web-dev-qa-db-fra.com

Comment obtenir le nom de groupe du rôle d'exécution dans ansible

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?

7
Shreya Bhat

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.

6
Darney