[解決済み] Ansible PlaybooksとRolesの比較
質問
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/
の定義が含まれています。common
とwebservers
のロールに対応します。
プレイブックの内部(
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はそれとは何の関係もありません。
関連
-
Ansible はエラー 'module' オブジェクトに属性 'SSL_ST_INIT' ソリューションがないことに気づきました。
-
ansible共通モジュール
-
[解決済み】Ansibleのplaybookを安全に1台のマシンに限定する?
-
[解決済み] Ansibleのロールのdefaultsとvarsの違いは何ですか?
-
[解決済み] タスクまたはタスクのセットごとにユーザーを切り替えるには?
-
[解決済み] Ansible がホームディレクトリに .retry ファイルを作成しないようにするにはどうすればよいですか?
-
[解決済み] ansibleで変数が未定義のときにタスクを実行するには?
-
[解決済み] 現在実行中の ansible-playbook へのパスを持つ変数?
-
[解決済み] ansibleのインベントリファイルでhost_key_checking=falseを設定するには?
-
[解決済み] Ansible: 現在のターゲットホストの IP アドレスを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Ansible はエラー 'module' オブジェクトに属性 'SSL_ST_INIT' ソリューションがないことに気づきました。
-
[解決済み] Ansibleのロールのdefaultsとvarsの違いは何ですか?
-
[解決済み] タスクまたはタスクのセットごとにユーザーを切り替えるには?
-
[解決済み] Ansible hosts ファイルに定義されている現在のマシンのホスト名を取得する方法は?
-
[解決済み] Ansible がホームディレクトリに .retry ファイルを作成しないようにするにはどうすればよいですか?
-
[解決済み] ansibleで変数が未定義のときにタスクを実行するには?
-
[解決済み] Ansible - 変数が定義されていない場合は、デフォルトを使用する
-
[解決済み] 現在実行中の ansible-playbook へのパスを持つ変数?
-
[解決済み] ansibleのインベントリファイルでhost_key_checking=falseを設定するには?
-
[解決済み] Ansibleです。ファイルの内容に変数を設定する