Le langage des inventaires
La cartographie de votre orchestre Ansible.
Dans Ansible, la cartographie des machines se fait à travers les inventaires, qui sont des listes de vos hôtes organisées par groupe.
Imaginez maintenant que vous avez un groupe de musiciens prêts à jouer, mais vous devez savoir qui ils sont et où ils se trouvent.
Notions théoriques
L'inventaire d'Ansible
Un inventaire Ansible est un fichier qui définit les hôtes et les groupes d'hôtes sur lesquels Ansible doit agir.
Le fichier d'inventaire Ansible qui définit les hôtes peut être aussi simple qu'une liste d'adresses IP ou de noms de domaine, mais il peut aussi inclure des variables spécifiques à chaque hôte ou groupe d'hôtes.
Les inventaires sont écrits en format
INI
ouYAML
, qui sont des langages de sérialisation de données simples et lisibles.
Les 3 composantes d'Ansible
Ansible fonctionne à partir :
- du serveur de contrôle
- des inventaires
- des Playbooks
Un inventaire au format INI
Nous allons créer un fichier d'inventaire au format
INI
.
- Connectez-vous à votre serveur Ansible.
Comment se connecter au conteneur Ansible ?
- Si le conteneur est arrêté, le démarrer avec la commande :
docker start ansible-controle
- Une fois le conteneur démarré, vous pouvez vous y connecter avec une session interactive en utilisant :
docker exec -it ansible-controle /bin/bash
La commande docker exec
permet d'exécuter une commande dans un conteneur en cours d'exécution. L'option -it
permet d'ouvrir une session interactive (-i
pour "interactive" et -t
pour allouer un pseudo-TTY), et /bin/bash
lance un shell Bash dans le conteneur, vous permettant d'interagir avec lui.
- Créez le répertoire
/root/ansible
.
Comment créer le répertoire /root/ansible
?
mkdir -p /root/ansible
- Créez un fichier d'inventaire nommé
mon_inventaire.ini
dans le répertoire/root/ansible
.
Comment créer un fichier d'inventaire ?
nano /root/ansible/mon_inventaire.ini
- Si l'erreur suivante s'affiche :
bash: nano: command not found
- il faut installer
nano
avec les commandes suivantes :
apt update
apt install nano
- puis exécuter de nouveau la commande pour éditer le fichier :
nano /root/ansible/mon_inventaire.ini
- Ajoutez l'adresse IP de vos 3 conteneurs cibles sous la forme suivante :
[conteneurs]
mon_conteneur ansible_host=adresse_ip_de_votre_conteneur
Pensez à taper
Ctrl+O
pour enregistrer le fichier etCtrl+X
pour quitternano
.
Exemple de fichier d'inventaire au format INI
[conteneurs]
web-1 ansible_host=172.17.0.3
web-2 ansible_host=172.17.0.4
web-3 ansible_host=172.17.0.5
- Testez maintenant la connexion sans mot de passe, à vos conteneurs Web.
Voici une commande pour tester la connexion au 1er conteneur Web :
ssh 172.17.0.3
Remplacez
172.17.0.3
par l'adresse IP de votre conteneur Web n°1.
Si vous avez bien travaillé, l'utilisateur root
du conteneur Ansible doit pouvoir se connecter au conteneur Web sans mot de passe !
Pour vous assurer que tout est correct, veuillez tester la connexion avec vos autres conteneurs Web.
-
Testez que votre inventaire fonctionne avec la commande :
ansible -i /root/ansible/mon_inventaire.ini conteneurs -m ping
Si tout est correct, Ansible devrait répondre avec un pong
de la part de chaque conteneur :
Si une erreur s'affiche
Si l'erreur que vous rencontrez lors de l'exécution de la commande Ansible est la suivante :
web-1 | FAILED! => {
"changed": false,
"module_stderr": "Shared connection to 172.17.0.3 closed.\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 127
}
Cette erreur indique que le module Ansible tente d'exécuter /usr/bin/python
sur la machine distante (IP : 172.17.0.3), mais il ne parvient pas à le trouver.
Cela est dû au fait que Python n'est pas installé sur la machine distante.
Pour résoudre ce problème, vous pouvez prendre les mesures suivantes :
-
Vérifiez si Python est installé sur la machine distante, avec la commande
python3 --version
. -
Si Python n'est pas installé, installez-le sur la machine distante avec la commande
apt install python3
.
Cela signifie que le fichier Dockerfile qui a servi à créer le conteneur ne contenait pas la commande apt install -y python3
FROM debian:latest
RUN apt update && \
apt install -y openssh-server python3 && \
mkdir /var/run/sshd && \
echo 'root:YOUR_PASSWORD' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# Ajoutez ici d'autres configurations si nécessaire
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Test de mémorisation/compréhension
- Dans ce tutoriel, nous avons enregistré notre inventaire au format
INI
. - Un inventaire peut être aussi enregistré au format
YAML
(les 2 formats de fichiers sont possibles).
Les formats
INI
etYAML
sont des langages de sérialisation de données humainement lisibles.
Nous allons maintenant créer des Playbooks
, qui eux, sont toujours écrits au format YAML
.
Ce sera l'occasion d'étudier ce deuxième langage de sérialisation de données.