1. ホーム
  2. ansible

[解決済み] Ansible PlaybooksとRolesの比較

2022-08-13 17:33:17

質問

Ansible のドキュメントによると プレイブック

...本当にシンプルな構成管理および複数マシンのデプロイメントシステムの基礎で、すでに存在するものとは異なり、複雑なアプリケーションのデプロイメントに非常に適しているものです。

また、同じドキュメントによると 役割 があります。

...既知のファイル構造に基づいて、特定の vars_files、タスク、およびハンドラを自動的にロードする方法です。ロールによってコンテンツをグループ化することで、他のユーザーと簡単にロールを共有することもできます。

しかし、これらと異なる使用例との区別は、私にはすぐにはわかりません。たとえば、私が自分の /etc/ansible/hosts ファイルを次のように構成するとします。

[databases]
mydb01.example.org
mydb02.example.org

[mail_servers]
mymail01.example.org
mymail_dr.example.org

...では、この"は何でしょう。 [databases] "エントリ...である。 役割 ? または、どこかのプレイブックYAMLファイルの名前?または何か他のもの?

もし誰かがこれらの違いについて説明してくれるなら、私のAnsibleの理解は大いに高まるでしょう

  • プレイブック vs ロール vs [databases] と似たようなエントリーが /etc/ansible/hosts
  • Playbooks が YAML ファイルの内部で定義される場合、Roles はどこで定義されるのでしょうか?
  • を除けば ansible.cfg はさておき、Ansibleサーバーに住んでいる私は、利用可能なPlaybooks/RolesでAnsibleを追加/設定するにはどうすればよいですか?例えば、私が ansible-playbook someplaybook.yaml を実行するとき、Ansible はそのプレイブックをどこで見つけるかをどのように知っていますか?

どのように解決するのですか?

<ブロッククオート

etc/ansible/hosts の Playbook vs Role vs [databases] と同様のエントリです。

[databases] はホストのグループに対する単一の名前です。これにより、複数のホストを一つの名前で参照することができます。

役割は、ホストが特定の 役割 .

Playbookはホストとロールの対応表です。

の例 ドキュメント は、サンプルプロジェクトを記述しています。これは2つのものを含んでいます。

  • プレイブックです。 site.yml , webservers.yml , fooservers.yml はプレイブックです。
  • ロールです。 roles/common/roles/webservers/ の定義が含まれています。 commonwebservers のロールに対応します。

プレイブックの内部( webservers.yml ) のようなものがありますね。

---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
  roles: <- this is list of roles to assign to these hosts
     - common
     - webservers

PlaybooksがYAMLファイル内で定義されている場合、Rolesはどこで定義されるのでしょうか?

以下の内部で定義されます。 roles/* ディレクトリの中で定義されます。ロールは主に YAML ファイルを使って定義されますが、あらゆる種類のリソース ( files/ , templates/ ). によると ドキュメント のロール定義はこのように構成されています。

  • roles/x/tasks/main.yml が存在する場合、そこに記載されているタスクがプレイに追加されます。
  • roles/x/handlers/main.yml が存在する場合、そこにリストされたハンドラが再生に追加されます。
  • roles/x/vars/main.yml が存在する場合、そこにリストされた変数が再生に追加されます。
  • roles/x/meta/main.yml が存在する場合、そこに記載されているロールの依存性がロールのリストに追加されます (1.3 以降)。
  • コピータスクはroles/x/files/にあるファイルを相対的または絶対的にパスすることなく参照することができます。
  • スクリプトタスクは、roles/x/files/にあるスクリプトを、相対的あるいは絶対的にパスすることなく参照することができます。
  • テンプレートタスクは、roles/x/templates/にあるファイルを、相対的あるいは絶対的にパスすることなく、参照することができます。
  • インクルードタスクは、roles/x/tasks/にあるファイルを、相対的あるいは絶対的にパスすることなく参照することができます。

最も重要なファイルは roles/x/tasks/main.yml で、ここではロールが実行されたときに実行されるタスクを定義します。

<ブロッククオート

Ansibleサーバーにあるansible.cfgは別として、利用可能なPlaybooks/RolesでAnsibleを追加/設定するにはどうすればよいですか?例えば、私が ansible-playbook someplaybook.yaml を実行するとき、Ansible はその playbook をどこで見つけるかをどのように知るのでしょうか。

$ ansible-playbook someplaybook.yaml

カレントディレクトリの中にあるプレイブックを探します。

$ ansible-playbook somedir/somedir/someplaybook.yaml

の中にあるプレイブックを探します。 somedir/somedir/ ディレクトリの中にあるプレイブックを探します。

すべてのプレイブックとロールを含むプロジェクトをサーバーに置くのは、あなたの責任です。Ansibleはそれとは何の関係もありません。