Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Ansible
  3. Inventaires : notions avancées
Extrait - Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
Extraits du livre
Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
2 avis
Revenir à la page d'achat du livre

Inventaires : notions avancées

Objectifs du chapitre et prérequis

1. Contexte et prérequis

Ce chapitre va être consacré à plusieurs thématiques autour de l’inventaire. Vous verrez notamment comment stocker des données sensibles (identifiants et mots de passe) dans un fichier ainsi que la notion d’inventaire dynamique d’Ansible.

Au niveau des inventaires dynamiques, vous verrez quelques applications sur des produits du marché que vous pourriez rencontrer. Vous n’avez sûrement pas envie de réécrire un inventaire pour Ansible et de le maintenir alors que cette information est déjà disponible quelque part (et que vous y avez déjà consacré un temps précieux).

Les exemples traités dans ce chapitre partent du principe que vous disposez de droits d’administration sur vos machines.

Pour la partie sur l’écriture d’inventaire dynamique, vous aurez besoin de quelques notions en programmation Python.

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-04.tar.gz depuis la page Informations générales.

Chiffrement de fichiers

1. Contexte

Dans le chapitre de la découverte de l’inventaire, vous avez vu comment gérer ce dernier et stocker des identifiants ou des mots de passe. Petit problème, ces données sont stockées dans des fichiers plats. Quiconque ayant accès à vos inventaires pourrait en extraire des informations et s’en servir.

Dans ce qui va suivre, vous verrez un mécanisme qui permet de chiffrer vos fichiers afin d’éviter que des mots de passe en clair soient directement accessibles.

Tous les exemples qui vont suivre utiliseront le mot de passe « ansible ».

2. Stockage d’identifiants de connexion

La première étape va être de créer un fichier dans lequel vous allez stocker des informations de connexion à une base de données MySQL. Vous utiliserez pour cela deux champs : intranet_mysql_db_user et intranet_mysql_db_password.

Ces deux identifiants vous serviront pour une hypothétique application intranet. 

Ci-dessous, la déclaration que vous utiliserez comme exemple pour la suite :

intranet_mysql_db_user: "intranet" 
intranet_mysql_db_password: "1ntran3t!" 

3. Chiffrement du fichier entier

Le chiffrement d’éléments dans Ansible se fait à l’aide de l’outil ansible-vault. Ce dernier peut fonctionner avec un mot de passe ou en passant des fichiers en argument.

Dans les deux cas, pour le chiffrement d’un fichier entier, il faut lancer ansible-vault avec l’option encrypt (chiffrer en anglais) suivie du nom de fichier.

Ansible peut utiliser des fichiers chiffrés pour tous les fichiers qu’il manipule. Vous...

Les inventaires dynamiques

1. Contexte

Vous êtes administrateur système/réseau et vous avez un parc de plusieurs centaines de machines. Vous devez donc déjà disposer de produits pour gérer vos machines.

Dans un premier réflexe, vous pourriez très bien faire une extraction régulière de votre parc à l’aide de vos propres scripts (shell, Python ou autre). Vous allez voir que ce n’est pas forcément nécessaire et que, généralement, il est tout à fait possible d’obtenir cette information directement à la source. Ci-dessous quelques exemples de ce que vous pourriez utiliser :

  • Vous supervisez votre parc à l’aide de Nagios, Shinken ou d’une autre solution, comme par exemple Zabbix.

  • Vous virtualisez votre infrastructure à l’aide de VMware.

  • Vous utilisez des machines dans le cloud (AWS, Azure ou autre).

  • Vous administrez des conteneurs de type Docker (Kubernetes ou Docker Swarm).

Si vous tombez sur un de ces cas, vous avez de grandes chances de pouvoir réutiliser ces informations directement via un plugin existant. Si ce n’est pas le cas, ce livre vous indiquera comment récupérer ces informations à l’aide d’un script d’inventaire spécifique.

À noter que les mécanismes présentés ici sont une introduction à la notion d’inventaire générique et ne sont pas supportées par la communauté. Une mise en place plus réaliste sera abordée un peu plus loin à la section Fonctionnement des plugins d’inventaires génériques.

2. Machines AWS

a. Prérequis...

Fonctionnement des plugins d’inventaires génériques

1. Contexte

Précédemment, le lecteur a abordé plusieurs façons de fournir à Ansible une liste de machines avec lesquelles travailler :

  • Par l’intermédiaire de fichiers textes (INI ou YAML)

  • Par l’intermédiaire de scripts générateurs d’inventaires au format YAML

En réalité, tous ces mécanismes font appel à un seul mécanisme interne à Ansible : les plugins d’inventaire.

Dans ce qui va suivre, le lecteur se familiarisera avec ce fonctionnement. Il abordera également la création d’un script d’inventaire dans le cas où l’existant ne conviendrait pas.

À noter que par défaut, Ansible supporte déjà un certain nombre de scripts (par ordre de priorité) :

  • host_list : machines passées en ligne de commande séparées par des virgules (exemple : -i host1,host2,host3).

  • script : script d’inventaire exécutable (exemple vu précédemment).

  • auto : format d’inventaire basé sur des fichiers au format YAML contenant une clé plugin (disponible depuis la version 2.5 d’Ansible).

  • yaml : format d’inventaire au format YAML (vu précédemment).

  • ini : format d’inventaire historique au format INI (vu précédemment).

  • toml : format d’inventaire au format TOML.

Le format TOML est un mélange entre le format INI et JSON/YAML. Il ne sera pas abordé dans ce livre.

La liste des formats supportés se configure à l’aide de la variable d’environnement...

Écrire son propre inventaire dynamique

1. Contexte

Vous avez fait le tour des plugins existants et rien ne correspond à votre cas. Autre possibilité, vous avez trouvé un plugin intéressant, mais vous avez besoin d’adapter certains aspects.

Ce chapitre va aborder l’écriture d’un plugin d’inventaire. L’ancien mécanisme s’appuyait sur la sortie d’une structure au format JSON. Même si rien n’empêche de continuer à utiliser cette solution, l’exemple qui sera abordé par la suite s’appuiera sur le nouveau mécanisme d’inventaire. Vous aborderez les éléments qui doivent s’y trouver et l’application à un cas concret.

2. Format en entrée

Dans l’exemple que vous aborderez, vous partirez d’un fichier properties Java que vous analyserez avant de le redonner à Ansible afin qu’il puisse s’en servir comme inventaire.

La structure de ce fichier de properties est connue. Vous y trouverez les clés suivantes :

  • db.host : nom de la machine de base de données.

  • db.user : utilisateur de la base de données.

  • db.password : mot de passe de l’utilisateur de la base de données.

  • apache.hosts : liste des machines apache séparées par des virgules (,).

Ci-dessous le fichier prop2inv.properties qui sera utilisé par la suite :

db.host=mysql1 
db.user=test 
db.password=password_test 
apache.hosts=apache1,apache2 

3. Structure du programme

Anciennement, le programme en lui-même pouvait être écrit dans n’importe quel langage. Dorénavant, avec le mécanisme...