J'ai un cas d'utilisation où j'ai besoin de créer un répertoire dans tous les hôtes d'un groupe dont le nom sera le nom du groupe.
Par exemple: je crée un fichier d'inventaire dynamique avec sortie du formulaire:
{
"db": ["Host1", "Host2", "Host3"],
"logs": ["Host2"],
"misc": ["Host4"]
}
J'ai besoin de créer un répertoire avec le nom db dans chaque hôte du groupe db et un répertoire nommé log dans chaque hôte du journal de groupe.
Jusqu'à présent, mon livre de jeu ressemble à:
- hosts: db
tasks:
- name: create db directory
file: path=db state=directory
- hosts: logs
tasks:
- name: create logs directory
file: path=logs state=directory
Le nombre de groupes est d'au moins 10+. Cela pourrait augmenter à l'avenir. Je veux écrire quelque chose qui sera facilement extensible et gérable pour les futurs groupes.
J'ai lu qu'ansible ne fournit pas un fait ou une variable par défaut pour le nom du groupe pour la tâche. Je vois que cela peut être mieux fait si je fournis une variable comme nom de groupe dans l'hôte.
Existe-t-il une meilleure solution qui pourrait utiliser le bouclage au lieu de répéter la même tâche?
Vous pouvez utiliser la variable magique group_names
. La variable est une liste (tableau) de tous les groupes dans lesquels se trouve l'hôte actuel. Plus d'informations sont disponibles dans le documentation
- hosts: all
tasks:
- name: create db directory
file:
path: "{{ item }}"
state: directory
with_items: "{{ group_names }}"
Avertissement: N'a pas testé ce code.