Exécuter la tâche uniquement si l'hôte n'appartient à aucun groupe


106

Je voudrais pouvoir exécuter une tâche ansible uniquement si l'hôte du playbook actuel n'appartient pas à un certain groupe. En semi pseudo code:

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

Comment dois-je faire cela?

Réponses:


198

Voici une autre façon de procéder:

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

group_namesest une variable magique comme documenté ici: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

group_names est une liste (tableau) de tous les groupes dans lesquels se trouve l'hôte actuel.


3
+1 et si vous n'incluez pas le devis environnant, vous obtenez l'erreur: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
Je trouve cette approche plus lisible et plus pratique à écrire, mais les deux fonctionnent également bien. when: inventory_hostname not in groups.certain_groups
Liam

4
Cette méthode est plus robuste que inventory_hostname in groups['groupname']parce que dans les cas où le coulis lui-même n'existe pas, Ansible lancera une erreur du type "Assurez-vous que le nom de votre variable ne contient pas de caractères invalides comme '-': l'argument de type 'StrictUndefined' n'est pas itérable"
hamx0r

20

Vous pouvez définir une variable de contrôle dans les fichiers vars situés dans group_vars/ou directement dans le fichier hosts comme ceci:

[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

Et exécutez des tâches comme celle-ci:

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

2
La réponse acceptée est plus précise pour la question, mais cela vous mène sur une meilleure voie
nik.shornikov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.