Ejecute la tarea solo si el host no pertenece a un grupo

106

Me gustaría poder ejecutar una tarea ansible solo si el anfitrión del libro de jugadas actual no pertenece a un grupo determinado. En semi pseudocódigo:

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

¿Cómo debería hacer esto?

rgrinberg
fuente

Respuestas:

198

Aquí hay otra forma de hacer esto:

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

group_nameses una variable mágica como se documenta aquí: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

group_names es una lista (matriz) de todos los grupos en los que se encuentra el host actual.

Iskandar Najmuddin
fuente
3
+1 y si no incluye la cita que lo rodea, aparece el error: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
Encuentro este enfoque más legible y conveniente de escribir, pero ambos funcionan igual de bien. when: inventory_hostname not in groups.certain_groups
Liam
4
Esta forma es más robusta que inventory_hostname in groups['groupname']porque en los casos en que la lechada en sí no existe, Ansible arrojará un error como "Asegúrese de que el nombre de su variable no contenga caracteres no válidos como '-': el argumento de tipo 'StrictUndefined' no es iterable"
hamx0r
19

Puede establecer una variable de control en archivos vars ubicados en group_vars/o directamente en el archivo hosts como este:

[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

Y ejecuta tareas como esta:

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var
nvartolomei
fuente
2
La respuesta aceptada es más precisa para la pregunta, pero esto lo lleva por un camino mejor
Nik.shornikov