Show HN: Enroll、サーバーをAnsible構成管理に逆エンジニアリングするツール
106日前原文(enroll.sh)
概要
Enrollは、サーバーの現状を収集し、AnsibleのロールやPlaybookへ即座に変換可能。
ローカル・リモートどちらでも利用でき、災害復旧や構成の再現性確保に最適。
差分検出・通知機能も備え、構成管理の抜け漏れもカバー。
JinjaTurtle連携でテンプレート化も自動化可能。
Debian系・Redhat系のサーバーに対応。
Enrollの基本的な使い方
- サーバーの現状を一括収集し、Ansibleロール/Playbook/インベントリへ変換
- enroll single-shot --harvest ./harvest --out ./ansible
- 収集後、ansible-playbook -i "localhost," -c local ./ansible/playbook.ymlでローカル適用
- 災害復旧スナップショットや「この1台を再現したい」用途、「ゴールデンロール」の作成に最適
- JinjaTurtleをインストールし、--jinjaturtleオプションで構成ファイルをテンプレート化
- 自動検出にも対応
リモート収集とローカル変換
- SSH経由でリモートサーバーから情報収集し、ローカルでAnsible化
- enroll single-shot
--remote-host myhost.example.com
--remote-user myuser
--harvest /tmp/enroll-harvest
--out ./ansible
--fqdn myhost.example.com
- enroll single-shot
- sudo権限不要の場合は--no-sudoを追加(ただし収集精度は低下)
マルチサイト・複数サーバー対応
- 複数サーバーの状態を一括収集し、ホスト固有の状態をインベントリで管理
- enroll harvest --out /tmp/enroll-harvest
- enroll manifest --harvest /tmp/enroll-harvest --out ./ansible --fqdn "$(hostname -f)"
- サーバーごとのPlaybook実行
- ansible-playbook ./ansible/playbooks/"$(hostname -f)".yml
- 運用指針
- シングルサイト:1台・可読性重視
- --fqdn運用:多台数・抽象度重視・迅速な導入
差分検出と通知
- 2つの収集データを比較し、人間に分かりやすいレポート出力
- enroll diff --old /path/to/harvestA --new /path/to/harvestB --format markdown
- Webhook通知で変更検知を自動化
- enroll diff
--old /path/to/harvestA
--new /path/to/harvestB
--webhook https://example.net/webhook
--webhook-format json
--webhook-header 'X-Enroll-Secret: ...'
--exit-code
- enroll diff
Enrollの特徴・活用例
- 構成管理未導入サーバーの現状把握・再現性確保
- インストール済みパッケージ・稼働中サービス・初期状態から差分のあるファイル・独自データの収集
- 収集データはSBOM的にも活用可能、Ansibleロール/Playbook/Inventoryへ即変換
- ローカル/リモート両対応、Debian系・Redhat系サポート
- diffモードで構成ドリフト検知(現状は通知のみ、強制適用は未対応)
- 既存Ansible運用中でも「記載漏れ」の検出に有用
- DR戦略として「普段は手作りAnsible、バックグラウンドでEnrollによる全体スナップショット」運用も推奨
- JinjaTurtle連携で設定ファイルのJinja2テンプレート化も可能
まとめ・コメント
- Enrollはサーバー現状の可視化・再現性確保・差分検知を高速・簡単に実現
- 構成管理の導入・強化、災害復旧、運用抜け漏れ防止に最適
- 詳細なデモやドキュメントは公式Webサイト参照