Configuration d'Ansible
Mise à jour :
Dans ce guide, je vais vous montrer comment configurer Ansible à l’aide du
fichier ansible.cfg
, un élément essentiel pour adapter le comportement
d’Ansible à votre infrastructure. Que ce soit pour définir la localisation de
l’inventaire des machines, ajuster les paramètres de connexion SSH ou optimiser
l’exécution des tâches, la configuration
d’Ansible
vous permettra de contrôler et de personnaliser précisément le déploiement de
vos scripts d’automatisation.
Je vais détailler les différentes sections du fichier, les clés les plus
importantes et comment utiliser la commande ansible-config
pour vérifier ou
ajuster ces paramètres de manière optimale.
Présentation du fichier ansible.cfg
Le fichier ansible.cfg
est le point central de la configuration
d’Ansible.
Il permet de définir les paramètres globaux qui régissent la manière dont
Ansible
interagit avec les hôtes distants, exécute les tâches et gère les inventaires.
Bien qu’il soit possible d’utiliser Ansible sans configuration particulière,
tirer parti d’un fichier ansible.cfg
personnalisé vous offre un contrôle plus
fin et une meilleure efficacité lors de l’exécution des playbooks.
ansible.cfg
fonctionne comme un fichier de configuration classique en format
INI. Il est composé de différentes sections, chacune correspondant à un
domaine spécifique de la configuration (inventaire, gestion des privilèges,
connexion SSH, etc.). Chaque section contient des clés qui définissent des
paramètres particuliers. Par exemple, vous pouvez y définir l’utilisateur
distant par défaut, le chemin vers votre inventaire, ou encore les comportements
de connexion réseau.
Une des forces de ce fichier est qu’il vous permet de personnaliser Ansible en
fonction de vos besoins, tout en vous évitant de devoir spécifier constamment
certains paramètres à chaque exécution de commande. Par exemple, au lieu
d’indiquer manuellement le fichier d’inventaire à chaque exécution avec l’option
-i
, vous pouvez le définir dans ansible.cfg
une fois pour toutes.
De plus, ansible.cfg
peut être utilisé à plusieurs niveaux, offrant ainsi une
flexibilité dans la gestion des configurations. Ansible suit une hiérarchie
précise lorsqu’il cherche ce fichier. Si un fichier est trouvé à un niveau
supérieur dans cette hiérarchie, il sera utilisé en priorité, ce qui permet une
configuration adaptée selon le contexte ou le projet en cours.
Les différentes localisations de ansible.cfg
L’une des caractéristiques importantes d’Ansible est sa capacité à
rechercher le fichier de configuration ansible.cfg
à différents endroits. Cela
permet aux utilisateurs de définir des configurations spécifiques en fonction du
contexte dans lequel ils travaillent. Ansible suit une hiérarchie bien définie
pour localiser ce fichier, ce qui signifie qu’il cherchera dans plusieurs
emplacements jusqu’à en trouver un. Comprendre cette hiérarchie est essentiel
pour savoir quelle configuration est appliquée lors de l’exécution des
commandes.
Le répertoire courant du projet
Lorsque vous exécutez une commande Ansible, la première localisation où Ansible
va chercher le fichier ansible.cfg
est dans le répertoire courant d’où la
commande est lancée. Cette approche est très pratique lorsque vous travaillez
sur des projets distincts, car vous pouvez définir des configurations
spécifiques à chaque projet dans un fichier ansible.cfg
localisé directement
dans le répertoire du projet.
Exemple :
Dans cet exemple, si vous êtes dans le répertoire mon_projet
et exécutez une
commande Ansible, Ansible utilisera automatiquement ce fichier ansible.cfg
spécifique à ce projet. Cela évite d’avoir une configuration globale qui
pourrait ne pas convenir à des besoins particuliers pour ce projet précis.
Le répertoire personnel de l’utilisateur
Si Ansible ne trouve pas de fichier ansible.cfg
dans le répertoire courant, il
va ensuite chercher dans le dossier personnel de l’utilisateur. Le fichier
doit se trouver sous ~/.ansible.cfg
. Cette localisation est idéale pour
définir une configuration qui s’applique à toutes les commandes Ansible
exécutées par l’utilisateur sur la machine, quelle que soit sa position dans
l’arborescence des répertoires.
Cette configuration est pratique pour personnaliser le comportement d’Ansible à l’échelle de l’utilisateur, mais elle peut être écrasée par des fichiers de configuration présents au niveau du projet (comme décrit précédemment).
Le fichier global du système
Si Ansible ne trouve pas de fichier ansible.cfg
ni dans le répertoire courant
ni dans le répertoire personnel de l’utilisateur, il va enfin chercher dans le
fichier de configuration global situé à l’emplacement suivant :
Ce fichier est utilisé pour définir des paramètres de configuration applicables
à l’ensemble du système et donc à tous les utilisateurs et tous les projets.
C’est souvent ici que vous trouverez la configuration par défaut fournie avec
Ansible, qui s’applique à moins qu’elle ne soit remplacée par des fichiers
ansible.cfg
plus spécifiques.
Hiérarchie et priorités des localisations
La hiérarchie de recherche du fichier ansible.cfg
suit donc cet ordre précis :
- Le répertoire courant du projet
- Le répertoire personnel de l’utilisateur
- Le fichier global du système
Si plusieurs fichiers ansible.cfg
existent, Ansible applique uniquement celui
qui se trouve le plus haut dans cette hiérarchie. Par exemple, si vous avez un
fichier ansible.cfg
dans votre répertoire courant ainsi qu’un autre dans votre
répertoire personnel, c’est celui du répertoire courant qui sera utilisé, car il
a la priorité.
Utilisation d’une variable d’environnement
En plus de ces localisations standards, il est possible d’indiquer explicitement
à Ansible où trouver un fichier ansible.cfg
en définissant la variable
d’environnement ANSIBLE_CONFIG
. Cette méthode permet de spécifier manuellement
un fichier de configuration sans tenir compte de la hiérarchie par défaut.
Exemple d’utilisation de la variable d’environnement :
Cette commande force Ansible à utiliser le fichier ansible.cfg
spécifié, peu
importe l’emplacement à partir duquel la commande est exécutée.
Exemple concret
Imaginons que vous avez trois fichiers ansible.cfg
placés à ces endroits :
/etc/ansible/ansible.cfg
: Ce fichier définit un inventaire global et une configuration pour l’escalade de privilèges.~/.ansible.cfg
: Ce fichier définit un utilisateur distant par défaut pour les connexions SSH./projets/app_deploy/ansible.cfg
: Ce fichier, propre à votre projet, définit des options de gestion des forks et un inventaire spécifique au projet.
Si vous exécutez une commande dans /projets/app_deploy
, c’est ce dernier
fichier qui sera utilisé, car il se trouve dans le répertoire courant.
Cependant, si vous vous trouvez dans un autre répertoire et que vous exécutez
une commande Ansible, c’est le fichier présent dans votre répertoire personnel
(ou à défaut, celui du système) qui prendra le relais.
Structure générale du fichier ansible.cfg
Le fichier ansible.cfg
est organisé en plusieurs sections, chacune regroupant
des paramètres spécifiques qui influencent différents aspects du comportement
d’Ansible. Ce fichier utilise le format INI, où chaque section est définie
par un nom encadré par des crochets ([]
), suivi de différentes clés et
valeurs. Chaque clé modifie un paramètre précis du fonctionnement d’Ansible,
et il est possible de définir ou d’ignorer ces paramètres selon vos besoins.
La structure générale du fichier est donc simple et lisible, ce qui permet aux utilisateurs d’ajuster facilement les configurations pour optimiser l’exécution des commandes Ansible. Voici un aperçu de la manière dont le fichier est organisé.
Sections
Les sections du fichier ansible.cfg
sont utilisées pour regrouper les
paramètres par domaines spécifiques. Cela permet d’organiser la configuration et
de la rendre plus claire et plus modulaire. Par exemple, la section
[defaults] contient la majorité des paramètres globaux d’Ansible, tandis que
la section [ssh_connection] regroupe les paramètres spécifiques aux
connexions SSH.
Voici un exemple de la structure de base d’un fichier ansible.cfg
:
Les clés et valeurs
Chaque section contient plusieurs clés associées à des valeurs. Ces clés définissent des comportements spécifiques. Par exemple, dans la section [defaults], la clé inventory spécifie le chemin vers le fichier d’inventaire à utiliser et la clé remote_user définit l’utilisateur distant par défaut pour les connexions SSH.
Voici un exemple avec des commentaires pour plus de clarté :
Les sections principales
Le fichier ansible.cfg
comporte plusieurs sections principales qui sont
fréquemment utilisées pour configurer les aspects essentiels du fonctionnement
d’Ansible. Voici un aperçu des plus importantes :
a. [defaults]
Cette section contient les paramètres globaux qui influencent la majorité des opérations d’Ansible. Vous y trouverez des options comme le chemin de l’inventaire, l’utilisateur par défaut, les répertoires des modules et bien plus.
Exemple de paramètres :
b. [privilege_escalation]
Dans cette section, vous pouvez définir les options liées à l’escalade de privilèges. Cela inclut la manière dont Ansible doit gérer les droits d’administrateur, notamment avec sudo ou d’autres méthodes. C’est ici que vous pouvez indiquer si les tâches doivent être exécutées en tant qu’utilisateur root ou un autre utilisateur avec des privilèges.
Exemple :
c. [ssh_connection]
La section [ssh_connection] regroupe les paramètres qui définissent les connexions SSH utilisées par Ansible pour se connecter aux hôtes distants. Vous pouvez y spécifier des options comme le temps de connexion, les arguments spécifiques à SSH, ou encore des options pour améliorer la performance des connexions persistantes.
Exemple :
d. [inventory]
Cette section est dédiée à la configuration de l’inventaire des hôtes que gère Ansible. Ici, vous pouvez spécifier où Ansible doit chercher les fichiers d’inventaire et comment gérer ces fichiers (par exemple, en activant l’inventaire dynamique).
Exemple :
Lecture et compréhension de la documentation officielle
Ansible fournit une documentation
complète ↗
et bien structurée pour vous aider à comprendre et configurer correctement les
différents paramètres disponibles dans le fichier ansible.cfg
. Chaque option
de configuration y est décrite en détail, avec des informations sur son rôle,
son type de donnée, sa valeur par défaut et les différentes manières de la
définir (dans un fichier de configuration, via une variable d’environnement,
etc.).
Prenons par exemple la section de la documentation dédiée à la configuration DEFAULT_BECOME. Voici comment interpréter ces informations.
Extrait de la documentation : DEFAULT_BECOME
Élément | Description |
---|---|
Description | Toggles the use of privilege escalation, allowing you to ‘become’ another user after login. |
Type | boolean |
Default | False |
Ini Section | [privilege_escalation] |
Ini Key | become |
Environment | ANSIBLE_BECOME |
Explication de cet exemple :
-
Description : Cette option permet de basculer vers un autre utilisateur après s’être connecté à une machine distante via Ansible. C’est ce qu’on appelle l’escalade de privilèges, typiquement pour exécuter des commandes avec des privilèges administratifs en utilisant des outils comme sudo. Si cette option est activée, Ansible pourra passer d’un utilisateur normal à un utilisateur privilégié (ex: root).
-
Type : Cette option est un booléen. Cela signifie qu’elle peut prendre uniquement deux valeurs :
True
(activé) ouFalse
(désactivé). -
Valeur par défaut : La valeur par défaut de cette option est False. Cela signifie que, par défaut, Ansible n’essaiera pas d’utiliser l’escalade de privilèges, à moins que vous ne le spécifiiez explicitement.
-
Section INI : Ce paramètre se trouve dans la section [privilege_escalation] du fichier
ansible.cfg
. Les options relatives à l’escalade de privilèges sont donc toutes regroupées sous cette section, ce qui facilite leur gestion. -
Clé INI : La clé à utiliser pour activer ou désactiver cette option dans le fichier
ansible.cfg
est become. Vous pouvez définir cette clé dans la section [privilege_escalation] de cette manière :Dans cet exemple, l’escalade de privilèges sera activée par défaut pour toutes les tâches Ansible.
-
Variable d’environnement : Si vous ne souhaitez pas modifier le fichier
ansible.cfg
, vous pouvez également activer cette option via la variable d’environnement ANSIBLE_BECOME. Par exemple, vous pouvez l’activer temporairement pour une session spécifique avec la commande suivante :
Utilisation de la commande ansible-config
La commande ansible-config
est un outil extrêmement pratique car elle
permet de gérer et d’explorer la configuration d’Ansible. Que ce soit pour
vérifier la configuration active, obtenir des informations détaillées sur les
paramètres disponibles, ou bien valider un fichier ansible.cfg
, cette commande
offre plusieurs options essentielles pour optimiser et déboguer votre
configuration.
Présentation de la commande ansible-config
La commande ansible-config
est utilisée pour manipuler la configuration
d’Ansible. Elle vous permet d’afficher, de tester et de comprendre les
paramètres actifs, qu’ils proviennent du fichier ansible.cfg
, des variables
d’environnement, ou des paramètres par défaut.
Cette commande dispose de plusieurs sous-commandes importantes :
- dump : Pour afficher la configuration active.
- list : Pour lister toutes les options de configuration disponibles avec des détails sur leur type, leur valeur par défaut et leur description.
- view : Pour afficher un fichier de configuration spécifique.
- init : Pour générer un modèle de fichier
ansible.cfg
.
Utiliser ansible-config dump
pour vérifier la configuration active
La sous-commande dump est particulièrement utile pour visualiser la
configuration actuelle d’Ansible. Elle affiche toutes les options de
configuration telles qu’elles sont appliquées à l’exécution, y compris celles
définies dans les fichiers ansible.cfg
, via des variables d’environnement, ou
avec des valeurs par défaut.
Exemple de commande :
Cette commande renvoie une liste complète des paramètres avec leur valeur effective. Cela vous permet de savoir exactement quels paramètres sont actifs, d’où ils proviennent et comment ils influencent l’exécution de vos commandes Ansible. Cela est particulièrement utile pour résoudre les problèmes liés à des configurations inattendues ou à des conflits entre différents niveaux de configuration.
Exemple de sortie partielle :
Lister toutes les options avec ansible-config list
La sous-commande list permet de lister toutes les options de configuration disponibles dans Ansible. Cette commande est utile lorsque vous souhaitez obtenir une vue d’ensemble de toutes les clés configurables, ainsi que des informations détaillées sur chacune d’elles, comme leur type et leur description.
Exemple de commande :
Cette commande affiche une longue liste de toutes les options configurables avec
des informations supplémentaires, notamment le type de donnée (par exemple,
booléen, chaîne de caractères) et la section du fichier ansible.cfg
où ces
options doivent être placées.
Exemple de sortie partielle :
Ici, nous voyons l’option DEFAULT_TIMEOUT qui définit le temps d’attente des connexions SSH, avec des informations importantes sur :
- Le type de valeur attendue (un entier ici),
- La valeur par défaut (10 secondes),
- La section du fichier INI dans laquelle cette option doit être définie ([ssh_connection]),
- La variable d’environnement qui peut aussi être utilisée (ANSIBLE_TIMEOUT).
Cette information est extrêmement précieuse pour savoir comment et où configurer correctement une option spécifique.
Afficher un fichier ansible.cfg avec ansible-config view
Si vous voulez examiner un fichier ansible.cfg
spécifique, vous pouvez
utiliser la sous-commande view. Cela est particulièrement utile si vous avez
plusieurs fichiers de configuration sur votre système et que vous souhaitez voir
le contenu du fichier actuellement utilisé par Ansible.
Exemple de commande :
Cette commande affichera le contenu du fichier ansible.cfg
actuellement chargé
par Ansible, quel que soit son emplacement (répertoire courant, utilisateur ou
global).
Générer un modèle avec ansible-config init
Si vous souhaitez créer un nouveau fichier ansible.cfg
de manière rapide et
structurée, vous pouvez utiliser la sous-commande init. Elle génère un
fichier de configuration standard avec toutes les sections et options courantes,
que vous pouvez ensuite personnaliser en fonction de vos besoins.
Exemple de commande :
Cette commande génère un fichier ansible.cfg
avec toutes les options courantes
désactivées (commentées), vous permettant de les activer et de les configurer au
fur et à mesure de vos besoins.
Exemple de début du fichier généré :
Cela vous donne une base sur laquelle travailler, sans avoir à créer manuellement chaque section et chaque clé de configuration.
Validation de la configuration avec ansible-config dump --only-changed
Une option intéressante avec ansible-config est la possibilité d’afficher uniquement les paramètres qui ont été modifiés par rapport aux valeurs par défaut. Cela permet de rapidement voir quelles options ont été personnalisées dans votre configuration.
Exemple de commande :
Cette commande affichera uniquement les paramètres dont la valeur a été modifiée
dans votre fichier ansible.cfg
ou via des variables d’environnement, en
excluant toutes les autres options qui utilisent les valeurs par défaut.
Conclusion
Maîtriser la configuration d’Ansible via le fichier ansible.cfg
est une étape
clé pour tirer pleinement parti de cet outil d’automatisation. Que ce soit pour
optimiser les performances, adapter les connexions SSH, ou gérer les permissions
d’escalade de privilèges, ansible.cfg
vous offre une grande flexibilité pour
ajuster Ansible à vos besoins spécifiques.
Tout au long de ce guide, nous avons exploré les différentes sections du
fichier de configuration, les clés principales qui influencent le
comportement d’Ansible et comment ansible-config peut vous aider à valider
et ajuster vos configurations en temps réel. En comprenant la hiérarchie des
fichiers ansible.cfg
, vous pouvez adapter vos configurations à plusieurs
niveaux (projet, utilisateur, global) et ainsi éviter les erreurs liées aux
conflits de paramètres.