ロールの依存関係の事前タスクを定義するにはどうすればよいですか。私は現在、ユーザー変数を持つApache
ロールを持っているので、<role>/meta/main.yml
での自分のロールで、次のようなことをします。
---
dependencies:
- { role: Apache, user: proxy }
この時点での問題は、指定したユーザーがまだ存在せず、ロールが存在しないユーザーの下でApache
サーバーを起動しようとするとエラーが発生することです。
<role>/tasks/main.yml
のようなタスクを作成してみました:
---
- user: name=proxy
ただし、ユーザーは、依存関係でApache
タスクを実行した後にのみ作成されます(これは予想されることです)。では、依存関係でロールを実行する前にユーザーを作成するタスクを作成する方法はありますか?
pre_tasksを使用して、ロールの前にいくつかのタスクを実行します。 Kashyap に感謝します。
#!/usr/bin/env ansible-playbook
---
- hosts: all
become: true
pre_tasks:
- name: start tasks and sent notifiaction to HipChat
hipchat:
color: purple
token: "{{ hipchat_token }}"
room: "{{ hipchat_room }}"
msg: "[Start] Run 'foo/setup.yml' playbook on {{ ansible_nodename }}."
roles:
- chusiang.vim-and-vi-mode
vars:
...
tasks:
- name: include main task
include: tasks/main.yml
post_tasks:
- name: finish tasks and sent notifiaction to HipChat
hipchat:
color: green
token: "{{ hipchat_token }}"
room: "{{ hipchat_room }}"
msg: "[Finish] Run 'foo/setup.yml' playbook on {{ ansible_nodename }}."
# vim:ft=ansible :
簡単な答え:言語でpre_tasks
をロールに指定することは許可されていないと思います。
ユーザーの作成を別のプレイブックに移動し、include
の代わりにrole
をプレイすると、チート/回避策を実行できます。このようなもの:
my_fake_role_playbooks/user_and_Apache.yml:
- hosts: "{{p_hosts}}"
pre_tasks:
user: name=proxy
roles: [ Apache ]
actual_playbook.yml:
- include: my_fake_role_playbooks/user_and_Apache.yml p_hosts=[Host1, Host2]
*コードはテストされていません。
HTH
名前のない<role>
またはApache
ロールの別の依存関係を使用して、これを簡単に解決できます。
新しいプロキシユーザーロールのコンテンツ全体:
---
- user: name=proxy
...
次に、roles/Apache/meta/main.yml
に依存関係を追加します。
---
dependencies:
- proxy-user
...
またはroles/<role>/meta/main.yml
で設定します:
---
dependencies:
- proxy-user
- { role: Apache, user: proxy }
...
Ansible 2.2では、include_role
を使用できます。 https://docs.ansible.com/ansible/include_role_module.html
- user: name=proxy
- include_role:
name: Apache
vars:
user: proxy
問題に対処しなければならなかったのですが、実際の問題は、事前タスクが役割よりも多少具体的である可能性が高いことです。ポストタスクを行うのは簡単です。なぜなら、単に新しいロールを依存関係にするだけだからです。これは「ラッパーロール」として知られています...または少なくとも、シェフのアイデアと呼ばれるものです。
事前タスクでは、「ラッパーロール」と私が「兄弟ロール」と呼ぶものを使用して、階層を少し変更する必要があります。したがって、依存関係ロジックは次のように表示されます。
ラッパーには2つの依存関係がありますが、依存関係リストの最初に「兄弟ロール」を追加してください。 Ansibleは上から下に行くので。
最後に、変数をplaybookから上書きできるように、ラッパーロールに変数を配置する必要があります。変数を可能な限り階層に従い、兄弟間でジャンプしないようにします。
同様のニーズがあり、ロールvarsで変数を定義することで解決しました。つまり、<role>/vars/main.yml
を作成するには
---
user: proxy
これは、Apacheモジュールで定義されたuser
変数をオーバーライドする必要がありますが、モジュールdefaults
ディレクトリに書き込むことはできません。
私はansible 1.9を使用していますが、この動作がどのくらい続いているかはわかりません。