Запускать задачу, только если хост не входит в группу

107

Я хотел бы иметь возможность запускать доступную задачу только в том случае, если хост текущей playbook не принадлежит к определенной группе. В полу псевдокоде:

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

Как мне это сделать?

Ргринберг
источник

Ответы:

199

Вот еще один способ сделать это:

- 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.
Питер Аджтай,
3
Я считаю этот подход более читаемым и удобным в написании, но оба работают одинаково хорошо. when: inventory_hostname not in groups.certain_groups
Лиам
4
Этот способ более надежен, чем inventory_hostname in groups['groupname']в тех случаях, когда сам раствор не существует, Ansible выдаст ошибку типа «Убедитесь, что имя вашей переменной не содержит недопустимых символов, таких как '-': аргумент типа 'StrictUndefined' не повторяется»
hamx0r
20

Вы можете установить управляющую переменную в файлах vars, расположенных внутри group_vars/или непосредственно в файле hosts, например так:

[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
nvartolomei
источник
2
принятый ответ более точен на вопрос, но он ведет вас по лучшему пути
nik.shornikov