Ansibleの役割とプレイブックのディレクトリ構造を形成したいと思います。
現在、私はのようなディレクトリ構造を持っています。
group_vars
* all
* group-one
- group-vars.yml
- group-vault.yml
...
Host_vars
- server1.yml
plays
- Java_plays
* deploy_fun_Java_stuff.yml
* deploy_playbook.yml
roles
- role1
- tasks
* main.yml
- handlers
- (the rest of the needed directories)
- role2
- Java
- Java_role1
- tasks
* main.yml
- handlers
- (the rest of the needed directories)
役割を呼びかけたいのですがJava_role1
劇中deploy_fun_Java_stuff.yml
電話できます
---
- name: deploy fun Java stuff
hosts: Java
roles:
- { role: role1 }
しかし、私は電話をかけることができません(私は複数の方法を試しました)。これは可能ですか?
- name: deploy fun Java stuff hosts: Java roles: - { role: Java/java_role1 }
私が本当にやりたいのは、自分の役割に沿って整然と演劇を構成できるようにすることです。私はそれらを整理したい両方の役割と演劇の数が多くなることになります。
これは、playディレクトリごとに個別のansible.cfgファイルで処理できますが、それらのcfgファイルをansibleタワーに追加することはできません(したがって、別の解決策を探しています)。
問題は、相対パスを適切に設定する必要があることだと思います。 Ansibleは、最初に呼び出されたプレイブックディレクトリに対して指定されたパスを適用し、次に現在の作業パス(ansible-playbook
コマンドを実行しているパス)を調べ、最後に/etc/ansible/roles
をチェックインするため、dir構造の{ role: Java/java_role1 }
の代わりに{ role: ../../roles/Java/java_role1 }
または{ role: roles/Java/java_role1 }
を使用できます。 。さらに別のオプションは、ansibleがロールを探すパスを構成することです。そのためには、 Ansible docs で説明されているように、プロジェクト内にroles_path
をansible.cfg
に設定できます。
あなたの例に基づいて:
ディレクトリツリー:
ansible/
├── hosts
│ └── dev
├── plays
│ └── Java_plays
│ └── Java.yml
└── roles
├── Java
│ └── Java_role1
│ └── tasks
│ └── main.yml
└── role1
└── tasks
└── main.yml
それをテストするために、プレイにはJava_role1
とrole1
が含まれます。
plays/Java_plays/Java.yml:
---
- name: deploy Java stuff
hosts: Java
roles:
- { role: roles/role1 }
- { role: roles/Java/java_role1 }
テストの目的で、これらのロールは単にデバッグメッセージを出力します。
role1/tasks/main.yml:
---
- debug: msg="Inside role1"
dev
hostsファイルは、単にlocalhostをJava
グループに設定します。これで、プレイブックを使用できます。
fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/Java_plays/Java.yml
PLAY [deploy Java stuff] *******************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [role1 : debug] ***********************************************
ok: [localhost] => {
"msg": "Inside role1"
}
TASK [Java_role1 : debug] *************************************
ok: [localhost] => {
"msg": "Inside Java_role1"
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
{ role: ../../roles/Java/java_role1 }
と{ role: ../../roles/role1 }
を使用するときに同じことを行うと、TASK
括弧内のログ出力には、ロール名だけでなく相対パス全体が表示されます。
fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/Java_plays/Java.yml
PLAY [deploy Java stuff] *******************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [../../roles/role1 : debug] ***********************************************
ok: [localhost] => {
"msg": "Inside role1"
}
TASK [../../roles/Java/java_role1 : debug] *************************************
ok: [localhost] => {
"msg": "Inside Java_role1"
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
別のオプションと私が使用するオプションは、プレイブックディレクトリにansible.cfgファイルを作成し、その中に次のものを配置することです。
[デフォルト]
role_path =/etc/ansible/roles ::
またはあなたの場合:
[デフォルト]
role_path =/etc/ansible/roles:/ etc/ansible/roles/Java
次に、相対パスを使用しないでください。
より洗練されたソリューション(imo)は、ロールディレクトリをプレイブックディレクトリ内にシンボリックリンクすることです。
私のディレクトリ構造は次のとおりです。
inventory/ playbooks/ |->ロール-> ../ roles |-> group_vars-> ../ group_vars | -> Host_vars-> ../Host_vars roles/ group_vars/ Host_vars/
私の場合、ln -s ../roles playbooks/roles
を実行してシンボリックリンクを作成しました