
Etape 1 : Créer un inventaire avec au moins deux noeuds gérés
Apprenez à créer un fichier d'inventaire Ansible pour gérer plusieurs serveurs. Cette étape détaille la définition des hôtes, des groupes et des variables de connexion.
L'importance de l'inventaire dans Ansible
L'inventaire est la pierre angulaire de toute opération Ansible. C'est un fichier, ou un ensemble de fichiers, qui décrit les machines (appelées "noeuds gérés" ou "managed nodes") sur lesquelles Ansible va agir. Sans inventaire, Ansible ne sait tout simplement pas où exécuter ses tâches et playbooks. Cette première étape de notre exercice pratique consiste donc à créer un inventaire simple mais fonctionnel, qui représentera un petit parc de serveurs que nous souhaitons administrer.
L'objectif ici est de définir au moins deux noeuds gérés. Cela nous permettra de voir comment Ansible peut opérer sur plusieurs machines simultanément et comment organiser ces machines en groupes pour des actions ciblées. Nous allons utiliser le format INI, qui est le plus classique et le plus simple à appréhender pour débuter, bien qu'Ansible supporte également le format YAML et des inventaires dynamiques.
Pensez à l'inventaire comme à un annuaire de votre infrastructure. Il contient non seulement la liste des hôtes, mais peut aussi inclure des variables spécifiques à ces hôtes ou à des groupes d'hôtes, telles que l'adresse IP de connexion, l'utilisateur SSH à utiliser, ou des paramètres spécifiques à une application.
Structure et syntaxe d'un fichier d'inventaire INI
Un fichier d'inventaire au format INI est un simple fichier texte. Sa structure repose sur des sections, définies par des noms entre crochets ([nom_du_groupe]), et des listes d'hôtes sous ces sections. Chaque ligne sous une section de groupe représente un noeud géré.
Pour cet exercice, nous allons créer un fichier que nous nommerons, par convention, inventory ou hosts. Vous pouvez aussi lui donner un nom plus spécifique comme lab_inventory.ini. A l'intérieur de ce fichier, nous allons commencer par définir nos noeuds. Imaginons que nous ayons deux serveurs : srv-web-01 et srv-db-01.
La forme la plus simple pour déclarer un hôte est d'indiquer son nom d'hôte (s'il est résolvable par DNS depuis votre noeud de contrôle) ou son adresse IP :
srv-web-01
srv-db-01Si ces noms ne sont pas directement résolvables ou si vous devez spécifier une adresse IP différente du nom d'hôte, vous pouvez utiliser la variable ansible_host :
srv-web-01 ansible_host=192.168.1.10
srv-db-01 ansible_host=192.168.1.20Il est fortement recommandé d'organiser vos hôtes en groupes. Un groupe est défini par un nom entre crochets, par exemple [webservers] ou [databases]. Un hôte peut appartenir à plusieurs groupes, et les groupes peuvent même être imbriqués (un groupe peut contenir d'autres groupes).
[webservers]
srv-web-01 ansible_host=192.168.1.10
[databases]
srv-db-01 ansible_host=192.168.1.20
[datacenter_paris:children]
webservers
databasesDans cet exemple, srv-web-01 appartient au groupe webservers, et srv-db-01 au groupe databases. Le groupe datacenter_paris est un méta-groupe qui inclut tous les hôtes des groupes webservers et databases.
Définir au moins deux noeuds gérés et variables de connexion
Conformément à l'objectif de cette étape, assurons-nous d'avoir au moins deux noeuds gérés dans notre inventaire. Supposons que vous ayez deux machines virtuelles ou serveurs physiques accessibles depuis votre noeud de contrôle Ansible. Appelons-les node1 et node2, avec les adresses IP respectives 10.0.0.5 et 10.0.0.6.
Voici comment pourrait se présenter votre fichier d'inventaire, que vous pouvez nommer my_inventory.ini :
# Fichier my_inventory.ini
[lab_servers]
node1 ansible_host=10.0.0.5
node2 ansible_host=10.0.0.6
# Variables applicables à tous les hôtes de cet inventaire
[all:vars]
ansible_user=your_ssh_user
ansible_ssh_private_key_file=~/.ssh/id_rsa_ansibleDans cet exemple :
- Nous avons créé un groupe nommé
lab_servers. node1etnode2sont les noms que nous donnons à nos serveurs dans Ansible.ansible_hostspécifie l'adresse IP à utiliser pour la connexion SSH. Si vos noms d'hôtes (node1, node2) étaient directement résolvables par DNS en ces IP,ansible_hostserait optionnel.- La section
[all:vars]permet de définir des variables qui s'appliquent à tous les hôtes de l'inventaire. ansible_userspécifie le nom d'utilisateur à utiliser pour la connexion SSH. Remplacezyour_ssh_userpar le nom d'utilisateur réel.ansible_ssh_private_key_fileindique le chemin vers la clé privée SSH à utiliser. Si vous utilisez la clé par défaut (~/.ssh/id_rsa) et que l'agent SSH est configuré, cette variable peut ne pas être nécessaire. Adaptez le chemin si votre clé porte un nom différent ou est stockée ailleurs.
Assurez-vous que l'utilisateur your_ssh_user existe sur node1 et node2, et que la clé publique correspondante à ansible_ssh_private_key_file est bien présente dans le fichier ~/.ssh/authorized_keys de cet utilisateur sur les deux noeuds gérés. C'est essentiel pour permettre à Ansible de se connecter sans mot de passe.
Vérification de la configuration de l'inventaire
Une fois votre fichier d'inventaire créé avec au moins deux noeuds, il est bon de vérifier qu'Ansible l'interprète correctement. Vous pouvez utiliser la commande ansible-inventory pour cela.
ansible-inventory -i my_inventory.ini --listCette commande affichera une structure JSON représentant la manière dont Ansible voit votre inventaire, y compris les groupes, les hôtes et les variables associées. Vous devriez y retrouver vos deux noeuds et les variables de connexion définies.
Une autre vérification rapide et utile est d'utiliser le module ping d'Ansible pour tester la connectivité à tous les hôtes de votre inventaire ou à un groupe spécifique :
ansible all -i my_inventory.ini -m pingOu pour cibler uniquement le groupe lab_servers :
ansible lab_servers -i my_inventory.ini -m pingSi tout est correctement configuré (fichier d'inventaire, connectivité réseau, configuration SSH et clés), chaque hôte devrait répondre par un "pong" vert. Si vous rencontrez des erreurs, elles sont souvent liées à des problèmes de résolution de nom, de pare-feu bloquant le port SSH (par défaut 22), ou d'authentification SSH (clé incorrecte, mauvais utilisateur, permissions de fichiers SSH incorrectes). Prenez le temps de déboguer ces problèmes avant de passer à l'étape suivante, car un inventaire fonctionnel est la base de tout le reste.