specsfy-specialist-ansible について
Ansibleのplaybook、role、inventoryの作成とレビューを支援する専門スキルです。ホスト構成を自動化するチーム向けに、冪等性、シークレット管理、実行範囲の制御、本番などへの適用前の検証を重視します。
主な機能
- 01冪等なplaybookとroleの設計
- 02inventoryと変数優先順位の確認
- 03Vaultや外部参照による秘密情報の保護
- 04対象ホストの範囲とロールアウト制御
- 05構文、lint、check mode、再実行の検証
活用シーン
- 01Ansibleによるホスト構成
- 02共有環境での実行前レビュー
- 03一時環境でのrole冪等性テスト
- 04本番変更の段階的な適用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promovaweb/ specsfy --skill specsfy-specialist-ansibleインストール後、Claude Code で/specsfy-specialist-ansibleを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlreferences/standards.md
詳細
Ansible
使用する場面
- プロジェクトに playbook、role、
inventory、ansible.cfg、 または collection のrequirements.yml/galaxy.ymlがある場合に使用します。 - 既存の自動化を共有環境に対して実行する前に、本当に 冪等性があるか確認する場合にも使用します。
- すでにコンテナ化されたサービスをクラスターでオーケストレーションする場合は
使用しません。その場合は
$specsfy-specialist-docker-swarmを使用します。 ここでの Ansible の役割はホストのプロビジョニングであり、Swarm サービスの オーケストレーションではありません。 - playbook の実行がデプロイパイプラインの一工程である場合は、
$specsfy-specialist-delivery-engineeringと組み合わせます。
フロー
計画を提示し、進捗を報告して、変更したファイルと実行した検証を最後に示します。 公開向けの文章では、利用するプロジェクトに適用される共有編集ガイドラインに従います。
- リリースまたは完全なデプロイでは、
$specsfy-specialist-deployのもとで作業し、オーケストレーターが すでに準備したSEMVER、イメージ、マニフェストを使用します。 - 影響のある操作を実行する前に、ホスト、グループ、対象環境、接続方式、 対象となるホストの正確な範囲を確認します。
- 最初のリモート task の前に
./deploy check-hostsを使用して すべてのホストを表形式で提示し、pingモジュールを確認します。./deploy sync-keysを使用して、既存のauthorized_keysのエントリーを 削除せず、deployユーザーに公開鍵のみを追加します。 - 適用される変数の優先順位(
references/standards.mdの表を参照)と、 固定されている collection およびansible-coreのバージョンを確認します。 - 冪等性のあるモジュールと、1 つの責務を持つ一貫した role を使用して、 望ましい状態をモデル化します。
- secrets は Ansible Vault または外部プロバイダー(管理された保管庫からの lookup) で保護します。リポジトリに平文で保存してはいけません。
- エージェントが実行する場合は、デプロイオーケストレーターのもとで
./deploy run --non-interactiveを使用します。すでに提供されている ファイル、スクリプト、Vault IDs、ネイティブ設定を尊重します。 外部ソースがない場合は、人間が操作するターミナルで./deploy configure-vaultを実行するよう案内します。会話でパスワードを 尋ねたり読み取ったりしてはいけません。./deploy runコマンドは、 入力が非表示になる手動実行として維持します。 - 出力に secrets を漏らさず、構文、
ansible-lint、check mode、diff を 検証します。 - 破棄可能な環境で role をテストし、同じ実行を繰り返して、2 回目の実行で
changedが報告されないことを確認します。 - 変更の影響範囲に適したシリアル実行(
serial)、制限(--limit)、 停止ルール(max_fail_percentage/any_errors_fatal)を設定して本番環境に適用します。
ベストプラクティス
- 書き込みを伴う play の前に、コントローラーのバージョン、ターゲットシステム、Docker へのアクセス、manager の役割、registry へのログイン、collections、変更されないイメージ、Docker Secrets を確認する、独立した preflight を作成します。
- stack が Cloudflare Tunnel を使用する場合は、
vault_cloudflare_tunnel_tokenからcloudflare_tunnel_tokenを作成し、no_log: trueを設定します。stack に渡すのは Docker Secret の名前だけにします。 - バージョン管理されている manifest をホスト上の安定したディレクトリにコピーし、それぞれを
docker stack configで検証してから、依存関係の順に stack を公開します。 - 公開のたびにレプリカを確認し、収束するまで待つか、上限回数に達したらエラーで終了します。deploy モジュールの戻り値だけで完了と判断しないでください。
- check mode は正しく扱います。検査タスクでは
check_mode: falseを使用できますが、状態を変更するタスクはスキップするか、シミュレーションに対応させます。stack をデプロイしなくても preflight が有用である必要があります。 - FQCN(
copyではなくansible.builtin.copy)と宣言型モジュールを使用し、同等の冪等性を備えたモジュールがある場合はshell/commandを避けます。 - タスクと handler には実行内容がわかる名前を付けます(
name:にはモジュール名ではなく効果を記述します)。タスクによって状態が実際に変更された場合にのみ handler を通知します。 defaults/main.yml(role の利用者が設定可能)、vars/main.yml(内部用で、上書き不可)、secrets(Vault または外部 lookup)を別々のファイルに分けます。requirements.ymlで collections のバージョンを固定し、更新前にインストール済みのansible-coreとの互換性マトリックスを検証します。changed_when/failed_whenはコマンドの実際の意味を表す場合にのみ使用します。実際の失敗を隠したり、常に変更を報告するshell/commandに冪等性があるように見せたりしてはいけません。- 権限を必要最小限に制限し(
becomeは必要なタスクだけに設定)、ログ上では無害に見える値であっても、secret を扱うすべてのタスクでno_log: trueを使用します。 - ホスト間で副作用が発生するタスク(例:一度に 1 台のホストしか再起動できないサービス)では、偶然のホスト順序やデフォルトの並列実行に依存しないようにします。そのような場合は
serialとthrottleを明示的に使用します。
アンチパターン
creates、removes、または明示的なchanged_whenのないshell/command:最終状態が同じでも、タスクは毎回changedを報告します。これにより、実行中に「実際に何が変わったか」を読み取れなくなり、冪等性のない自動化を見えにくくします。- 無条件に通知される handler(
changedの場合にのみnotifyを実行するタスクの外で通知する場合):何も変更されていないときも含め、実行のたびにサービスが再起動され、不要な停止が発生します。 - 本番環境/ステージング環境の環境変数を、実際の優先順位を確認せず、汎用的な
group_varsだけで解決すること:コマンドラインの-eや、より具体的なhost_varsによって、想定した値が気付かないうちに上書きされることがあります。 - Vault を誤って復号してコミットしたり、
no_logを設定せずに secret をdebug:/ログへ埋め込んだりすること:ソースファイルが正しく暗号化されていても、Git の履歴や実行出力から secret が漏えいします。
検証
- 実際に適用する前に、
ansible-playbook --syntax-check、ansible-lint、および--check --diff(チェックモード)で実行し、diff に秘密情報が露出しないことを確認します。 - 同じターゲットに対して連続で2回実行します。2回目では、どのタスクも
changedと報告されないことが必要です。これが冪等性の運用上の証明であり、コードを目視で確認するだけでは不十分です。 - ハンドラーのテスト(サービスが必要なときに実際に再起動すること)、テンプレートのテスト(環境ごとに正しくレンダリングされること)、および部分的な失敗のテスト(ホストがバッチの途中で失敗した場合に
any_errors_fatalとmax_fail_percentageが想定どおり動作すること)を実施します。 - リモート環境を変更する前に、使用するインベントリと
--limitを明示的に確認します。「すべてのホストで実行する」ことを、暗黙のデフォルトとして受け入れてはいけません。 - 上記の連続した2回の実行とチェックモードを行わずに、ロールを「冪等」または「安全」と断言してはいけません。プレイブックを読んでも、使い捨て環境で実際に実行することの代わりにはなりません。
関連するスキル
-
$specsfy-specialist-server-reportは、Ansible による読み取り専用の収集を通じて、ログ、サービス、ディスク使用量をホストごとのレポートにまとめます。 -
$specsfy-specialist-deployは、サーバーの自動化全体を調整します。このスキルでは、ロールと Ansible プレイブックを扱います。 -
$specsfy-specialist-versioningは、自動化によって配布されるイメージとマニフェストにSEMVERを合わせます。 -
$specsfy-specialist-docker-swarmは、Ansible でプロビジョニングしたホストが Swarm クラスターに参加する場合に使用します。Ansible がノードを準備し、Swarm がその中のサービスをオーケストレーションします。 -
$specsfy-specialist-delivery-engineeringは、プレイブックの実行が環境間の昇格を伴うパイプラインの段階である場合に使用します。 -
$specsfy-specialist-application-securityは、秘密情報の管理、認証情報のローテーション、プロビジョニングしたホストのハードニングをレビューする際に使用します。 -
$specsfy-specialist-debian-serverは、アプリケーションの自動化を始める前に、APT、SSH、sysctl、systemd、ファイアウォール、Docker Engine を準備する際に使用します。
ロールの構成、変数の優先順位、冪等性、運用上のセキュリティ、テストコマンドについては、Ansible ドキュメントの公式情報源を掲載した references/standards.md をお読みください。