web-dev-qa-db-fra.com

Exécuter une tâche Ansible uniquement lorsque le nom d'hôte contient une chaîne

J'ai plusieurs tâches dans un rôle comme suit. Je ne souhaite pas créer un autre fichier yml pour gérer cette tâche. J'ai déjà un include pour les serveurs Web, mais quelques serveurs Perl nécessitent l'installation de packages Web.

- name: Install Perl Modules
  command: <command>
  with_dict: Perl_modules

- name: Install PHP Modules
  command: <command>
  with_dict: php_modules
  when: <Install php modules only if hostname contains the Word "batch">

Fichier d'inventaire hôte

[webs]
web01
web02
web03

[Perl]
Perl01
Perl02
Perl03
Perl-batch01
Perl-batch02
19
luckytaxi

Ci-dessous devrait faire l'affaire:

- name: Install PHP Modules
  command: <command>
  with_dict: php_modules
  when: "'batch' in inventory_hostname"

Notez que vous aurez quelques hôtes ignorés lors de l'exécution du livre de lecture.

inventory_hostname est l'une des variables "magiques" d'Ansible:

Inventor_hostname est également le nom du nom d'hôte sous la forme configuré dans le fichier hôte de l'inventaire d'Ansible. Cela peut être utile pour lorsque vous ne voulez pas vous fier au nom d’hôte découvert ansible_hostname ou pour d'autres raisons mystérieuses. Si vous avez un long FQDN, inventaire_nomhôte_short contient également la pièce jusqu'au premier période, sans le reste du domaine.

Source: Ansible Docs - Variables magiques et accès aux informations sur d'autres hôtes

39
Michal Gasek

Vous pouvez même filtrer les tâches pour les hôtes d'un groupe spécifique (pas l'inventaire complet). 

La condition suivante n'exécutera votre tâche que si un inventaire groupe [Perl] a un nom d'hôte, qui inclut la sous-chaîne "batch" :

 when: "groups['Perl'] | select('search','batch') | list"

Donc, si ce groupe n'a pas d'hôte avec cette sous-chaîne, la liste est vide, ce qui signifie fausse condition.

1
Noam Manos