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.
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 programmevms
= 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écuterping
= le module utilisé par ansible
Ça y est, vous avez une installation Ansible fonctionnelle.