ansible-generator について
ansible-generatorは、Ansibleのプレイブック、ロール、インベントリ、タスクファイル、プロジェクト設定を生成するスキルです。完全なファイル、スニペット、ドキュメントを区別し、生成物の検証手順も示します。
主な機能
- 01プレイブックとロールの生成
- 02インベントリとタスクファイルの生成
- 03Ansibleプロジェクト設定のひな形
- 04冪等性とセキュリティの規約
- 05検証手順と代替チェック
活用シーン
- 01サービスをデプロイするプレイブックの作成
- 02再利用可能なAnsibleロールのひな形作成
- 03本番環境とステージング環境のインベントリ準備
- 04Ansibleプロジェクト設定の初期化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ akin-ozer/ cc-devops-skills --skill ansible-generatorインストール後、Claude Code で/ansible-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreassets/templates/inventory/hostshosts.ymlassets/templates/inventory/group_vars/all.ymldatabases.ymlwebservers.ymlassets/templates/inventory/host_vars/web1.example.com.ymlassets/templates/playbook/basic_playbook.ymlassets/templates/project/.ansible-lintansible.cfgrequirements.ymlassets/templates/role/README.mdassets/templates/role/defaults/main.ymlassets/templates/role/files/.gitkeepassets/templates/role/handlers/main.ymlassets/templates/role/meta/argument_specs.ymlmain.ymlassets/templates/role/molecule/default/converge.ymlmolecule.ymlassets/templates/role/tasks/main.ymlassets/templates/role/templates/config.j2assets/templates/role/vars/Debian.ymlmain.ymlRedHat.ymlreferences/best-practices.mdmodule-patterns.mdtest/playbooks/nginx-tls-playbook.ymltest/playbooks/templates/nginx-tls.conf.j2test/roles/sample-role/defaults/main.ymltest/roles/sample-role/handlers/main.yml詳細
Ansible ジェネレーター
トリガーフレーズ
Ansible のコンテンツを生成またはひな形作成する依頼には、このスキルを使用します。たとえば、次のような依頼です。
- 「TLS を使って nginx をデプロイするプレイブックを作成してください。」
- 「PostgreSQL のバックアップ用に Ansible ロールを生成してください。」
- 「本番環境とステージング環境のインベントリファイルを作成してください。」
- 「ユーザーのプロビジョニングに使える再利用可能な Ansible タスクを作成してください。」
- 「ansible.cfg と requirements.yml を含む Ansible プロジェクトを初期化してください。」
- 「Docker をインストールする簡単な Ansible スニペットをください。」
リクエストが検証またはデバッグのみ(構文エラー、lint の失敗、Molecule/テストの失敗)の場合、このスキルを主なワークフローとして使用しないでください。その場合は ansible-validator を使用してください。
決定論的な実行フロー
次のステージを順番に実行してください。Validation Exceptions Matrix で明示的に許可されている場合を除き、ステージを省略しないでください。
Stage 0: リクエストモードを分類する
まず、次のいずれかのモードを判定します。
| モード | ユーザーの典型的な意図 | 成果物 |
|---|---|---|
full-generation | プレイブック/ロール/インベントリ/プロジェクトのファイル一式を「作成/構築/生成」する | 完成した、本番環境ですぐに使えるファイル一式 |
snippet-only | 完全なファイルの文脈を伴わない「簡単なスニペット/例」 | 目的を絞ったタスク/プレイブックのスニペット |
docs-only | 説明、パターンの比較、または概念的なガイダンスのみ | 説明コンテンツ。必要に応じて例を追加 |
Stage 1: 最低限必要な入力を収集する
詳細が不足している場合は、簡潔に質問してください。ユーザーから回答がない場合は、安全な既定値を使用して進め、前提を明記してください。
| リソースの種類 | 必要な入力 | 不足時の安全な既定値 |
|---|---|---|
| プレイブック | 対象ホスト、権限昇格(become)、OS ファミリー、目的 | hosts: all、become: false、OS に依存しないモジュール |
| ロール | ロール名、主要なサービス/パッケージ、サポート対象 OS | タスクの分野に基づくロール名、Debian + RedHat の変数 |
| タスクファイル | 操作の範囲、必須変数、実行コンテキスト | 変数を文書化した、単独で再利用可能なタスク |
| インベントリ | 環境、ホストグループ、ホスト名/IP アドレス | プレースホルダーを含む production/staging グループ |
| プロジェクト設定 | コレクション/ロールの依存関係、lint ポリシー | 最小限の ansible.cfg、requirements.yml、.ansible-lint |
Stage 2: 参照資料の抽出チェックリスト
コンテンツの作成を始める前に、ローカルの参照資料/テンプレートから次の情報を抽出してください。
必須の参照資料
references/best-practices.md- 抽出する情報:FQCN の要件、冪等性のルール、命名規則、セキュリティ上の要件。
references/module-patterns.md- 抽出する情報:対象タスクの種類に適したモジュール/パラメーターのパターン。
出力の種類ごとに必要なテンプレート
- プレイブック:
assets/templates/playbook/basic_playbook.yml - ロール:
assets/templates/role/(テストのひな形作成用にmeta/argument_specs.ymlとmolecule/default/を含む) - インベントリ(INI):
assets/templates/inventory/hosts - インベントリ(YAML):
assets/templates/inventory/hosts.yml - プロジェクト設定:
assets/templates/project/ansible.cfg、assets/templates/project/requirements.yml、assets/templates/project/.ansible-lint
抽出時の確認項目
- 置換が必要な
[PLACEHOLDER]をすべて特定します。 - モジュール選択の優先順位を決めます(まず
ansible.builtin.*)。 - OS 固有の動作が必要な場合は、OS に適したパッケージ管理パターンを少なくとも 1 つ確認します。
- 必要な前提条件(コレクション、バイナリ、対象に関する前提)を確認します。
Stage 3: 生成する
次の生成基準を適用してください。
- FQCN のモジュール名を使用します(第一候補は
ansible.builtin.*)。 - タスクを冪等に保ちます(必要に応じて
state、creates/removes、changed_whenを使用)。 - 動詞で始まる、内容の分かりやすいタスク名を使用します。
- 真偽値には
yes/noではなくtrue/falseを使用します。 - 機密情報には
no_log: trueを追加します。 - 出力を提示する前に、すべてのプレースホルダーを置き換えます。
- RHEL 8+/CentOS 8+ では
ansible.builtin.dnfを優先します(古いシステムでのみ従来のyumを使用)。
Stage 4: 検証する(既定)または例外を適用する(フォールバック)
検証を決定論的かつ非ブロッキングにするため、以下のマトリックスを使用してください。
検証の例外マトリックス
| シナリオ | デフォルトの動作 | 許可される代替手段 | 報告する内容 |
|---|---|---|---|
full-generation | 生成後、および各修正パスの後に ansible-validator を実行します | バリデーター/ツールを利用できない場合は、手動の静的チェック(YAML の構造、プレースホルダーのスキャン、FQCN/冪等性/セキュリティのレビュー)を実施し、後で実行する検証コマンドを正確に提示します | 実施したチェック、スキップしたチェックとその理由を明示します |
snippet-only | デフォルトでは完全なバリデーターをスキップし、インラインの簡易チェックを実施します | ユーザーから依頼された場合、またはスニペットを完全なファイルにする場合のみ、完全なバリデーターを実行します | 出力がスニペットのみのため、検証が限定的であることを明記します |
docs-only | ランタイム検証は実施しません | 不要です | 実行可能な成果物を生成していないことを明記します |
| オフライン環境(Web/ドキュメントにアクセスできない場合) | ローカルのリファレンスとテンプレートを使用して続行します | 外部ドキュメントの検索をスキップし、組み込みモジュールによる実装を優先し、後で外部検証するためのメモを提示します | オフラインであることと、影響を受けるチェック/検索を明記します |
リソース生成のガイダンス
Playbook
- 構成の基礎として
assets/templates/playbook/basic_playbook.ymlを使用します。 - 必要に応じて、ヘッダーコメント、
pre_tasks/tasks/post_tasks、ハンドラー、タグを含めます。 - サービスのデプロイや設定に関わる場合は、ヘルスチェックを追加します。
Role
assets/templates/role/の構成を基に作成します。- デフォルト値は
defaults/main.ymlに、高い優先度のロール変数はvars/main.ymlに記述します。 - 関連する場合は、OS 固有の変数(
vars/Debian.yml、vars/RedHat.yml)を含めます。 - 変数の検証用に
meta/argument_specs.ymlを追加します。 - 本番環境向けのロールには、
assets/templates/role/molecule/を基にしたmolecule/default/のひな形を含めます。
タスクファイル
- 対象範囲を絞り、再利用しやすくします。
- 必須の入力変数をコメントで説明します。
- 環境や OS に依存する操作には条件分岐を使用します。
インベントリ
- 論理的なホストグループと、必要に応じてグループ階層を構成します。
- 変数の階層化は意図的に行います:
group_vars/all.yml-> グループ -> ホスト。 - シンプルなトポロジーでは INI 形式(
hosts)をデフォルトで使用し、ユーザーから指定された場合、または階層が複雑な場合は YAML 形式(hosts.yml)を使用します。
プロジェクト設定
- 基本となる
ansible.cfg、requirements.yml、.ansible-lintを用意します。 - デフォルト値は実用的で編集しやすいものにします。
カスタムモジュールとコレクション
リクエストで組み込みではないモジュール/コレクションが必要な場合:
- コレクションとモジュールを特定し、必要なバージョン依存性を確認します。
- まずローカルの
references/module-patterns.mdを確認します。 - それでも解決せず、ネットワーク/ツールを利用できる場合は、Context7 に問い合わせます:
mcp__context7__resolve-library-idmcp__context7__query-docs
- Context7 を利用できない場合は、Ansible の公式ドキュメント/Ansible Galaxy のページを使用します。
- 外部情報を参照できない場合は、組み込み機能による代替方法を提示し、制約を明記します。
コレクションのモジュールを使用する場合は、必ずコレクションのインストール方法を記載します。
標準的な使用例のフロー
フロー A:完全生成(Playbook)
ユーザーのプロンプト:「Ubuntu と RHEL に TLS 対応の nginx をデプロイする Playbook を作成してください。」
full-generationと分類します。- 必要な入力(ホスト、証明書のパス、権限昇格、サービス名)を収集/確認します。
- 必要なリファレンス(
best-practices.md、module-patterns.md)と Playbook テンプレートを抽出します。 - OS ごとの条件分岐(
apt/dnf)、ハンドラー、設定テンプレートの検証を含む完全な Playbook を生成します。 ansible-validatorを実行します。- チェックに合格するまで問題を修正して再実行します(または、ツールを利用できない場合はマトリックスの代替手段を適用します)。
- 検証の概要、使用コマンド、前提条件を添えて出力を提示します。
フロー B:クイックスニペット(タスクブロック)
ユーザーのプロンプト:「ユーザーと SSH キーを作成するスニペットをください。」
snippet-onlyと分類します。ansible.builtin.userとansible.builtin.authorized_keyの最小限のモジュールパターンを抽出します。- FQCN、冪等性、変数プレースホルダーを含む簡潔なスニペットを生成します。
- インラインの健全性チェック(YAML の構造、FQCN、明らかな冪等性とセキュリティ)を実施します。
- スニペットを提示し、
snippet-onlyモードのため完全なバリデーターの実行を省略したことを明記します。
出力要件
実行可能な成果物を生成する場合は、次のレスポンス構造を使用してください。
## Generated [Resource Type]: [Name]
**Validation Status:** [Passed / Partially validated / Skipped with reason]
- YAML syntax: [status]
- Ansible syntax: [status]
- Lint: [status]
**Summary:**
- [What was generated]
- [Key implementation choices]
**Assumptions:**
- [Defaults or inferred values]
**Usage:**
```bash
[Exact command(s)]
前提条件:
- [コレクション、バイナリ、環境要件]
## Done Criteria
This skill execution is complete only when all applicable items are true:
- Trigger decision is explicit (`full-generation`, `snippet-only`, or `docs-only`).
- Required references/templates were consulted for the selected artifact type.
- Generated output has no unresolved placeholders.
- Validation followed default behavior or a documented exception from the matrix.
- Any skipped checks include a concrete reason and deferred command(s).
- Final output includes summary, assumptions, usage, and prerequisites.