Découverte de l’inventaire
Objectifs du chapitre et prérequis
Dans le chapitre précédent, vous avez vu comment installer Ansible et lancer quelques commandes sur la machine locale. Vous allez voir maintenant comment adresser vos requêtes à différentes machines et profiter de la capacité de lancement en parallèle d’Ansible pour l’exécution de vos opérations.
1. Contexte et prérequis
Les exemples traités dans ce chapitre partent du principe que :
-
vous disposez de machines Linux sur lesquelles vous avez effectué vos échanges de clés SSH (cf. chapitre Démarrer avec Ansible) ;
-
vous disposez de droits root sur vos machines.
2. Fichiers téléchargeables
Vous pouvez récupérer les exemples des répertoires inventaires et variables sur le repository GitHub suivant : https://github.com/EditionsENI/ansible
Vous pouvez également récupérer ces fichiers dans l’archive chapitre-03.tar.gz depuis la page Informations générales.
Structure d’un inventaire
L’inventaire sous Ansible est un fichier au format INI. La déclaration d’un groupe se fait en utilisant le nom du groupe entre crochets. Les machines rattachées à ce groupe sont simplement ajoutées à la suite de la déclaration du groupe (une machine par ligne).
Prenez un exemple avec les éléments suivants :
-
Un groupe apache constitué de la machine rec-apache-1.
-
Un groupe mysql avec la machine rec-mysql-1.
Ci-dessous un fichier d’inventaire correspondant à cette déclaration :
[apache]
rec-apache-1
[mysql]
rec-mysql-1
À noter qu’il est également possible de stocker cette déclaration sous la forme d’un fichier YAML. Dans ce cas, la déclaration prendra la forme suivante :
apache:
hosts:
rec-apache-1: {}
mysql:
hosts:
rec-mysql-1: {}
Par la suite, ce fichier sera référencé sous le nom de fichier host ou fichier d’inventaire. Il sera accessible sous le nom de recette.inv (au format INI) ou recette.yml (format YAML).
Pour y faire appel, il faudra passer l’option -i à ansible avec le nom du fichier.
Afin de vérifier que la communication avec les machines distantes se passe bien, vous allez appeler ansible avec le module ping (en passant le nom du module avec l’option -m).
Ci-dessous un exemple d’appel avec l’inventaire YAML :
$ ansible -i recette.yml -m ping all
Si tout se passe bien, Ansible devrait renvoyer le résultat suivant :
rec-mysql-1 | SUCCESS...
Fusion d’inventaires
Ansible est en mesure de fusionner plusieurs fichiers d’inventaires qui se trouvent dans le même répertoire. Le problème de cette technique est qu’il n’est pas possible de maîtriser les fichiers qui sont passés en paramètre à Ansible à moins de recopier temporairement les fichiers dans un répertoire de travail. Le problème est le même dans le cas où les fichiers se trouvent dans plusieurs répertoires différents.
Les versions récentes d’Ansible permettent de cumuler en ligne de commande la liste des inventaires. Ainsi, plutôt que de passer un chemin où sont stockés l’ensemble des fichiers d’inventaires, il devient possible de les passer un à un en répétant l’utilisation de l’option --inventory (ou -i).
Ainsi, pour lancer le module ping sur l’ensemble des machines des fichiers d’inventaires recette.yml et production.yml, la commande à lancer prendra la forme suivante :
$ ansible -m debug -i recette.yml -i production.yml all
Ci-dessous le résultat de cette commande :
prod-haproxy | SUCCESS => {
"msg": "Hello world!"
}
...
active-directory-1 | SUCCESS => {
"msg": "Hello world!"
}
container-1 | SUCCESS => {
"msg": "Hello world!"
}