Qu’est-ce qu’Ansible ?

La description trouvée sur internet est :

Ansible est une suite d’outils logiciels qui permet l’infrastructure en tant que code. Il est open source et la suite comprend des fonctionnalités de provisionnement de logiciels, de gestion de la configuration et de déploiement d’applications.
Wikipédia

Et si nous mettons cela en termes simples, c’est un outil qui aide à introduire des changements dans un cluster d’ordinateurs ou de serveurs en une seule fois ; ce n’est qu’une des fonctionnalités fondamentales que je trouve impressionnante et très utile.

Outils prérequis nécessaires et installation.

La machine de contrôle doit être une variante du système Linux ou UNIX. Windows n’est pas pris en charge pour le nœud de contrôle au moment de la rédaction de cet article.

L’installation d’Ansible sera différente selon votre système d’exploitation, donc pour Debian, vous devrez également installer le référentiel Ansible.

sudo echo deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main >> /etc/apt/sources.List
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
sudo apt update
sudo apt install ansible

Pour installer sur un MacBook :

pip isntall ansible
# et l'alternative si vous avez installé homebrew :
brew install ansible

Vous trouverez le guide d’installation pour la plupart de SE ici: docs.ansible.com

Ansible fonctionne avec une machine de contrôle et un groupe de machines cibles. Si vous avez de la chance et que vous disposez de plusieurs machines pour jouer, il vous suffit d’installer une variante de Linux, en vous assurant que le serveur ssh fonctionne sur toutes les machines. Mais vous pouvez aussi créer des machines virtuelles sur votre plate-forme préférée, j’ai créé 3 Debian Bookworm dans Proxmox. schema

Ansible se connecte à ses cibles via SSH, donc sur les cibles et la machine de contrôle, il est nécessaire d’avoir SSH installé. Pour créer une clé SSH sur votre machine de contrôle, exécutez cette commande :

ssh-keygen -b 2048 -t rsa

Inventaire et connexion

Je vous suggère de créer un dossier de travail pour Ansible.

mkdir ansible

Ensuite, créez votre dossier d’inventaire à l’intérieur, vous pouvez y rassembler toutes vos cibles dans un seul fichier :

mkdir ansible/inventory
touch ansible/inventory/hosts
nano ansible/inventory/hosts

Le fichier hosts sera rempli avec les adresses IP de nos cibles.

[vms]
192.168.0.152
192.168.0.153
192.168.0.154

Si vous avez un serveur DNS local, vous pouvez également écrire leur nom et le domain.

L’étape suivante présuppose que vous avez créé un utilisateur sur vos machines cibles qui porte le même nom que l’utilisateur sur votre machine de contrôle.

Pour rendre la connexion rapide (pas de mot de passe), la clé publique ssh de la machine de contrôle doit être connue et autorisée par les machines cibles. Pour cela, nous pouvons utiliser le script ssh-copy-id. Un moyen plus simple peut être de créer un one-liner qui le fera presque automatiquement (vous devrez insérer le mot de passe pour chaque serveur.).

# imprimer toutes les lignes du marqueur à la fin du fichier
awk '/vms/{ f = 1; next }f' ansible/inventory/hosts | while read line; do ssh-copy-id $line; done

# Si vous avez plusieurs groupes d'hôtes (conteneurs et vms)
# imprimer toutes les lignes entre les marqueurs (si vous voulez faire que les conteneurs)
awk '/containers/{ f = 1; next } /vms/{f = 0 } f' ansible/inventory/hosts | while read line; do ssh-copy-id $line; done

Maintenant si vous avez suivi à la lettre, à cette commande :

ansible vms -i ansible/inventory/hosts  -m ping

Vous aurez ce résultat :

192.168.0.153 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.0.152 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.0.154 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Je vais décortiquer la commande :

  • ansible = appeler le programme
  • vms = est le nom du groupe dans le fichier hosts [vms] suivi de lignes d’IP
  • -i = cela indique à ansible que la chaîne suivante est le chemin vers le fichier hosts(inventory)
  • -m = ceci indique le nom du module qu’ansible doit exécuter
  • ping = le module utilisé par ansible

Ça y est, vous avez une installation Ansible fonctionnelle.