Aller au contenu principal

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.

astuce

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 ou YAML, 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.

  1. 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.

  1. Créez le répertoire /root/ansible.
Comment créer le répertoire /root/ansible ?

mkdir -p /root/ansible

  1. 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

  1. 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 et Ctrl+X pour quitter nano.

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

  1. 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.

info

Si vous avez bien travaillé, l'utilisateur root du conteneur Ansible doit pouvoir se connecter au conteneur Web sans mot de passe !

attention

Pour vous assurer que tout est correct, veuillez tester la connexion avec vos autres conteneurs Web.

  1. 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 :

  1. Vérifiez si Python est installé sur la machine distante, avec la commande python3 --version.

  2. 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


Qu'est-ce qu'un inventaire dans Ansible ?


Dans quel format peut-on écrire un inventaire Ansible ?


Comment spécifiez-vous un hôte dans un fichier d'inventaire INI ?


Comment tester si votre inventaire est correctement configuré ?


Que signifie le groupe [conteneurs] dans un fichier d'inventaire ?



astuce
  • 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 et YAML 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.