AnsibleVoici 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 de changed est true.
  • Le deuxième lancement est sans effet, puisque l’utilisateur greg existe déjà. Le résultat s’affiche en vert et la valeur de changed est false.

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 et nmap 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 module file avec le paramètre state=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.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *