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