Ansible Playbook YAMLファイルのフォーマット
Ansible Playbook YAMLを正しいタスクインデント、モジュール引数、変数定義、ハンドラー参照でフォーマット・検証します。読みやすい自動化のためのAnsibleベストプラクティスに従います。
Real-World
詳細な説明
Ansible Playbook YAMLフォーマット
AnsibleはPlaybook、ロール、インベントリ、変数ファイルにYAMLを使用します。Ansible YAMLにはKubernetesなど他のYAML重視ツールとは異なる独自の慣例と一般的なパターンがあります。
Playbook構造
---
- name: Configure web servers
hosts: webservers
become: true
vars:
http_port: 80
max_clients: 200
tasks:
- name: Install Apache
ansible.builtin.apt:
name: apache2
state: present
update_cache: true
- name: Configure Apache
ansible.builtin.template:
src: templates/httpd.conf.j2
dest: /etc/apache2/apache2.conf
notify: Restart Apache
- name: Ensure Apache is running
ansible.builtin.service:
name: apache2
state: started
enabled: true
handlers:
- name: Restart Apache
ansible.builtin.service:
name: apache2
state: restarted
Ansible固有のフォーマットルール
---で開始 — すべてのAnsible YAMLファイルはYAMLドキュメント開始マーカーで始まるべき- タスク名 — すべてのタスクに説明的な
nameフィールドが必要(ansible-lintがこれを強制) - FQCNモジュール —
aptのような短い名前の代わりにansible.builtin.aptのような完全修飾コレクション名を使用 - キー順序 — 慣例は:
name、モジュール名、モジュール引数、when、register、notify、tags
変数ファイル
---
# vars/main.yml
app_name: myapp
app_version: "2.1.0"
app_config:
database:
host: "{{ db_host }}"
port: 5432
cache:
driver: redis
ttl: 3600
Jinja2式("{{ }}")のクォートに注意 — YAMLがブレースを誤解釈するのを防ぐためにクォートが必要です。
よくあるフォーマットの問題
- クォートされていないJinja2 —
host: {{ var }}は失敗する。host: "{{ var }}"にする必要がある - ブールのモジュール引数 —
yes/noではなくtrue/falseを使用する(ansible-lintが推奨) - 長い行 — 多くの引数を持つAnsibleタスクは非常に長くなる可能性がある。YAML複数行構文を使用
- 一貫しないインデント — Ansibleは任意のインデント幅で動作するが、2スペースが標準
ansible-lintの統合
ansible-lint ツールはAnsible固有のYAMLフォーマットルールを強制します。YAMLフォーマッターと並行して実行することで、一般的なYAMLの問題とAnsible固有のアンチパターンの両方をキャッチします。
ユースケース
Ansible Playbookフォーマットはインフラストラクチャ・アズ・コードのチームにとって不可欠です。クリーンで一貫してフォーマットされたPlaybookはレビュー、デバッグ、メンテナンスが容易です。数百のロールとPlaybookを管理するチームは、特にAnsible YAML慣例を知らない新しいチームメンバーのオンボーディング時に、Ansibleベストプラクティスを強制する自動フォーマットの恩恵を受けます。