Les variables de groupes (group vars en anglais) représentent les variables associés aux groupes.
Le principe est simple et les possibilités infinies : c’est parti !
Le format de fichier
Les fichiers de group_vars s’écrivent au format YAML
tout simplement.
Principe du group_var
Le fichier de group_var
contient les variables qui seront appliquées aux taches lorsqu’elles seront exécutées sur les serveurs.
On peut ainsi variabiliser des paramètres dynamiques ou changeant avec le temps.
Les fichiers de group_vars
sont localisés dans le répertoire group_vars/
.
ansible/ ├── inventories/ │ └── myhome.ini └── group_vars/ ├── debian.yaml ├── linux.yaml └── ubuntu.yaml
Contenu des fichiers
Les fichiers de group_vars
contiennent des variables au formats suivants :
- Un scalair : un couple clé/valeur, qu’il soit sous forme de chaine de caractère, entier, flottant ou booléen.
- Un dictionnaire : une structure hiérarchique où chaque élément parent est une clé.
- Une liste : une liste d’entité, qui peut être un scalair, un dictionnaire ou une liste.
# Scalair os_name: debian os_version: 11 selinux_enabled: true # Dictionnaire sshd: secure: true port: 22 service: sshd banner: "Hello world!" # Liste users: - enabled: true username: bob groups: - bob - dockerq profiles: bashrc: true bash_profile; false
Le lien avec l’inventory
L’inventaire liste les serveurs et les groupes.
front01 ansible_host=192.168.0.10 front02 ansible_host=192.168.0.11 [debian] front01 [ubuntu] front02
Chaque groupe identifié dans l’inventaire peut bénéficier de son fichier de group_var
.
On retrouvera donc les fichiers suivants :
ansible/ ├── inventories/ │ └── myhome.ini └── group_vars/ ├── debian.yaml └── ubuntu.yaml
Et le fichier de group_var
associé au group ubuntu
.
os_name: ubuntu os_version: 22
Imbrication des groupes
L’inventaire permet d’imbriquer les groupes entre eux.
front01 ansible_host=192.168.0.10 front02 ansible_host=192.168.0.11 [debian] front01 [ubuntu] front02 [linux:children] debian ubuntu
Les groupes, debian
et ubuntu
font parti du group linux
et héritent des variables de ce groupe.
On facilement créer des variables globales au sein du groupe parent (ici linux
) et permettre aux groupes enfants (debian
et ubuntu
) d’en bénéficier, sans devoir y écrire sa valeur.
os_type: linux
Grace à ce mécanisme, la variable os_type
est disponible dans les variables des 2 groupes enfants, donc pour les serveurs qui appartiennent à ces groupes.
Mise en pratique
Reprenons l’exemple au complet en affichant les valeurs clés de l’article.
server01 ansible_connection=local [debian] server01 [linux:children] debian
Les fichiers group_vars
associés :
os_type: linux
os_name: debian
Le playbook d’afficahe :
- hosts: linux tasks: - name: Show child var debug: var: os_name - name: Show parent var debug: var: os_type
Exécution du playbook Ansible :
ansible-playbook -i inventories/myhome.ini vars_of_groups.yml
TASK [Show child var] ***************************************************************** ok: [server01] => { "os_name": "debian" } TASK [Show parent var] **************************************************************** ok: [server01] => { "os_type": "linux" }
Conclusion
Les group_vars
sont une puissante arme de variabilisation et de factorisation à utiliser sans modération.
Attention à bien organiser vos variables, car les groupes enfants surchargent les variables des groupes parents.
Les autres articles autour d’Ansible :