Виконайте завдання лише в тому випадку, якщо хост не належить до групи


106

Мені б хотілося виконати відповідне завдання, лише якщо господар поточної книги не належить до певної групи. У напівпсихо коді:

- 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.
Peter Ajtai

3
Я вважаю такий підхід більш читаним і зручним для написання, але обидва працюють однаково добре. when: inventory_hostname not in groups.certain_groups
Ліам

4
Цей спосіб є більш надійним, ніж inventory_hostname in groups['groupname']через те, що у випадках, коли сама затирка не існує, Ansible видасть помилку типу "Переконайтесь, що назва вашої змінної не містить недійсних символів типу" - ": аргумент типу" StrictUndefined "не можна виправити"
hamx0r

20

Ви можете встановити змінну керування у файлах vars, що знаходяться у group_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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.