ホストがグループに属していない場合にのみタスクを実行する


106

現在のプレイブックのホストが特定のグループに属しいない場合にのみ、ansibleタスクを実行できるようにしたいと思います。準疑似コードでは:

- name: my command
  command: echo stuff
  when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"

どうすればよいですか?

回答:


198

これを行う別の方法を次に示します。

- name: my command
  command: echo stuff
  when: "'groupname' not in group_names"

group_namesここに記載されている魔法の変数です:https : //docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables

group_namesは、現在のホストがあるすべてのグループのリスト(配列)です。


3
1、あなたは周囲の引用符が含まれていない場合は、エラーを取得:This one looks easy to fix. It seems that there is a value started with a quote, and the YAML parser is expecting to see the line ended with the same kind of quote.
ピーターAjtai

3
この方法は読みやすく、書くのに便利ですが、どちらも同じように機能します。when: inventory_hostname not in groups.certain_groups
リアム

4
この方法はinventory_hostname in groups['groupname']、グラウト自体が存在しない場合にAnsibleが「変数名に「-」などの無効な文字が含まれていないことを確認してください:タイプ 'StrictUndefined'の引数が反復可能ではない」というエラーをスローするよりも堅牢です
hamx0r

19

次のgroup_vars/ように、hostsファイル内またはhostsファイル内に直接配置されたvarsファイルに制御変数を設定できます。

[vagrant:vars]
test_var=true

[location-1]
192.168.33.10 hostname=apollo

[location-2]
192.168.33.20 hostname=zeus

[vagrant:children]
location-1
location-2

次のようなタスクを実行します。

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var

2
受け入れられた答えは質問に対してより正確ですが、これはあなたをより良い道に導きます
nik.shornikov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.