Voici le huitième article de la formation Ansible. Dans mon précédent article, nous avons présenté les premières commandes ad hoc pour utiliser Ansible en mode interactif. Aujourd’hui nous allons nous intéresser à l’une des principales caractéristiques d’Ansible et ce qui fait sa force par rapport à des méthodes de configuration plus traditionnelles comme les scripts shell : l’idempotence.
C’est quoi l’idempotence ?
Le terme d’idempotence nous vient des mathématiques. Dans ce contexte, il désigne une fonction que l’on peut exécuter une seule fois ou autant de fois que l’on veut, on obtient toujours le même résultat. C’est une propriété à laquelle Ansible attache énormément d’importance.
Pour un système de gestion de configuration, cela signifie plus concrètement que lorsqu’un certain état de la configuration est atteint, il s’agit de le maintenir. Toutes les exécutions subséquentes des instructions seront sans effet.
Si c’est encore un peu trop abstrait à votre goût, prenons quelques exemples :
- Un paquet logiciel doit être installé. La première invocation s’en charge. Les invocations subséquentes ne font que constater qu’il n’y a plus rien à faire.
- Un fichier de configuration contient déjà la ligne souhaitée – il ne reste plus rien à faire.
- Un lien symbolique est déjà présent sur le système – il ne reste plus rien à faire.
- Un utilisateur fait déjà partie d’un groupe – il ne reste plus rien à faire.
Voyons voir cela de plus près. Placez-vous dans le répertoire du septième atelier pratique :
$ cd ~/formation-ansible/atelier-07
Voici les quatre machines virtuelles de cet atelier :
Machine virtuelle | Adresse IP |
---|---|
ansible |
10.23.45.10 |
rocky |
10.23.45.20 |
debian |
10.23.45.30 |
suse |
10.23.45.40 |
Démarrez les VM :
$ vagrant up
Connectez-vous au Control Host :
$ vagrant ssh ansible
L’environnement de cet atelier est préconfiguré et prêt à l’emploi :
- Ansible est installé sur le Control Host.
- Le fichier
/etc/hosts
du Control Host est correctement renseigné. - L’authentification par clé SSH est établie sur les trois Target Hosts.
- Le répertoire du projet existe et contient une configuration de base et un inventaire.
Rendez-vous dans le répertoire du projet :
$ cd ansible/projets/ema/ $ ls ansible.cfg inventory
Je crée l’utilisateur greg
sur la machine rocky
:
$ ansible rocky -m user -a "name=greg shell=/bin/bash"
rocky | CHANGED => {
"changed": true,
"comment": "",
"create_home": true,
"group": 1001,
"home": "/home/greg",
"name": "greg",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
Observez ce qui se passe lorsque je relance exactement la même commande :
$ ansible rocky -m user -a "name=greg shell=/bin/bash"
rocky | SUCCESS => {
"append": false,
"changed": false,
"comment": "",
"group": 1001,
"home": "/home/greg",
"move_home": false,
"name": "greg",
"shell": "/bin/bash",
"state": "present",
"uid": 1001
}
- Au premier lancement du module
user
, le résultat s’affiche en orange et la valeur dechanged
esttrue
. - Le deuxième lancement est sans effet, puisque l’utilisateur
greg
existe déjà. Le résultat s’affiche en vert et la valeur dechanged
estfalse
.
Exercice
Pour vous familiariser avec la notion d’idempotence, exécutez une série de tâches administratives sur toutes les machines cibles. Pour ce faire, servez-vous des commandes ad hoc que nous avons vues dans le précédent article. Prenez soin d’exécuter chaque commande deux fois et observez ce qui se passe dans l’affichage du résultat.
- Installez successivement les paquets
tree
,git
etnmap
sur toutes les cibles. - Désinstallez successivement ces trois paquets en utilisant le paramètre supplémentaire
state=absent
. - Copier le fichier
/etc/fstab
du Control Host vers tous les Target Hosts sous forme d’un fichier/tmp/test3.txt
. - Supprimez le fichier
/tmp/test3.txt
sur les Target Hosts en utilisant le modulefile
avec le paramètrestate=absent
. - Enfin, affichez l’espace utilisé par la partition principale sur tous les Target Hosts. Que remarquez-vous ?
Lire la suite : Playbooks
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire