Je suis nouveau dans l'utilisation d'ansible pour la gestion des serveurs et j'ai besoin d'aide pour gérer la définition des utilisateurs et des groupes en fonction de l'hôte et du groupe d'hôtes, avec un minimum de duplication et un maximum d'extensibilité.
(25 utilisateurs/20 groupes sur 50 hôtes, avec différents "sudo" et "appartenance à des groupes" à la fin).
L'idée est d'avoir :
- "groups_vars" fichiers définissant les utilisateurs (liste ou hachage) à créer sur chaque hôte du groupe d'hôtes.
- Les fichiers "host_vars" définissant les utilisateurs pour un hôte spécifique. (A la fin, j'aurai besoin de groupes imbriqués, plus que de fichiers host_vars spécifiques).
J'ai besoin que le contenu de ces "*_vars files" soit fusionné et non remplacé (je comprends comment fonctionne la "vars precedence") car je veux éviter la duplication des déclarations de l'utilisateur.
Pour y parvenir, j'ai utilisé la syntaxe de hachage dans les fichiers "*_vars" et défini "hash_behaviour=merge" dans /etc/ansible/ansible.cfg.
Voici mes fichiers :
Mon inventaire :
all:
children:
type_a:
hosts:
vm1:
vm2:
Mon manuel de débogage :
- hosts: type_a
tasks:
- name: Debugging
debug:
msg: "{{ users }}"
group_vars/type_a.yaml :
users:
user1:
name: user1
user2:
name: user2
host_vars/vm1.yaml
users:
user3_vm1_specific:
name: user3_vm1_specific
A la fin, j'ai besoin des 3 utilisateurs sur "vm1" et seulement "user1" et "user2" sur "vm2" et ensuite j'utiliserai les variables pour la création de l'utilisateur. L'utilisation de l'option de fusion (qui sera dépréciée dans une nouvelle version d'ansible) fonctionne, mais ne semble pas être une bonne pratique.
J'ai cherché ici sur ServFault et sur d'autres sites web, et la plupart du temps, les solutions sont les suivantes :
- pour dupliquer la définition de l'utilisateur (plus de 8 propriétés pour chaque utilisateur et trop de hostsgroup : inacceptable).
- d'utiliser un autre nom pour la deuxième liste d'utilisateurs, puis d'assembler les deux en utilisant "{{ user_list1 + user_list2 }}".
Pas très évolutif si l'on veut ajouter de nombreux groupes imbriqués. Vous devrez ajouter une liste de noms personnalisée à chaque fois. Il fait aussi des doublons si "host_vars" et "group_vars" ont le même utilisateur défini : il ne fusionne pas le contenu, mais le déclare deux fois avec un contenu différent à chaque fois.
Ma première solution fonctionne, mais en utilisant une option quasi obsolète. Alors quelles sont les meilleures pratiques pour gérer les vars dans ce genre de situation ? (J'ai déjà lu la documentation ansible sur les vars mais cela ne m'a pas vraiment aidé).
De plus, peut-être qu'une tour ansible ou un foreman pourrait résoudre ce problème ?
Salutations
M.