2017-08-31 15 views
0

私はこれを私のdevおよびhydraサーバーにのみ適用しようとしています。私はそれらにホストを持つ2つのホストファイルを持っています。 dev-allホストグループは アシスタント - 論理ORを使用してホストグループに一致させる

です。ヒドラグループには1つのサーバーしか含まれていませんが、別のホストファイルにあります。私が実行すると、ヒドラグループansible-playbook -i environments/hydra site.ymlのようなコマンドを使用し、devグループの場合、私はこのコマンドを使用しますansible-playbook -i environments/dev site.yml

私の質問は、ヒドラを呼び出すときにヒドラにのみ適用する条件、またはデベロッパーを呼び出すときにデベロッパーのみに適用する条件はどうすればよいですか?これは、このグループを別のホストファイル内のサーバーをプロダクトするために追加することを避けるのに役立ちます。 dev-allグループにはdevファイル内の多くのdevサーバグループが含まれています。私は基本的にそれらをすべてホストファイルから取り込もうとしていますので、dev-all:childrenグループを作成しました。

私はそれらがいつOR条件に一致するように思われる。たぶん、when文を書く良い方法があります。

- name: add dev environment sudo user group group: name=dev_sudo state=present gid=8002 tags: - groups - sudo-group when: (inventory_hostname in groups["dev-all"]) or (inventory_hostname in groups['hydra'])

答えて

2

あなたは、現在のホストがであるすべてのグループのリスト(配列)であるgroup_namesを使用することができます。magic variablesを参照してください。

同様:

when: ('dev-all' in group_names) or ('hydra' in group_names) 

か:

when: ['dev-all', 'hydra'] | intersect(group_names) | count > 0 
+0

働いていました!ありがとうございました!特定のインスタンスの代わりにタスクファイル全体に適用する方法はありますか? main.yml、hydra.yml、dev-web1.ymlなどを持っているようにしてください。そうすれば、そのファイルのすべてについて上記のような条件付き条件を実行する必要はありませんか? –

+1

別のymlファイルを作成し、main.ymlの中に 'include' +' when'を使います。 –

+0

例を挙げてもらえますか?私は 'include'がmain.ymlに置かれていることを理解していますが、インクルードされたymlファイル内のすべての項目に対して' when'条件をどうやって得るのでしょうか? –

関連する問題