Aller au contenu

Configuration d'Ansible

Mise à jour :

Logo Ansible

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 :

Terminal window
~/projets/mon_projet/ansible.cfg

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 :

Terminal window
/etc/ansible/ansible.cfg

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 :

  1. Le répertoire courant du projet
  2. Le répertoire personnel de l’utilisateur
  3. 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 :

Terminal window
export ANSIBLE_CONFIG=/chemin/vers/mon/ansible.cfg

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 :

  1. /etc/ansible/ansible.cfg : Ce fichier définit un inventaire global et une configuration pour l’escalade de privilèges.
  2. ~/.ansible.cfg : Ce fichier définit un utilisateur distant par défaut pour les connexions SSH.
  3. /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 :

[defaults]
inventory = /etc/ansible/hosts
remote_user = ansible
forks = 5
[privilege_escalation]
become = true
become_user = root
become_method = sudo
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
timeout = 30

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é :

[defaults]
# Chemin de l'inventaire à utiliser
inventory = /etc/ansible/hosts
# Utilisateur distant par défaut pour les connexions SSH
remote_user = ansible
# Nombre de processus parallèles (forks) lors de l'exécution
forks = 5

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 :

[defaults]
inventory = /etc/ansible/hosts
remote_user = ansible
forks = 10

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 :

[privilege_escalation]
become = true
become_user = root
become_method = sudo

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 :

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
retries = 3

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 :

[inventory]
enable_plugins = host_list, script

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émentDescription
DescriptionToggles the use of privilege escalation, allowing you to ‘become’ another user after login.
Typeboolean
DefaultFalse
Ini Section[privilege_escalation]
Ini Keybecome
EnvironmentANSIBLE_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é) ou False (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 :

    [privilege_escalation]
    become = True

    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 :

    Terminal window
    export ANSIBLE_BECOME=True

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 :

Terminal window
ansible-config dump

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 :

Terminal window
DEFAULT_FORKS(default) = 5
DEFAULT_HOST_LIST(default) = ['/etc/ansible/hosts']
DEFAULT_REMOTE_USER(default) = 'ansible'
DEFAULT_TIMEOUT(default) = 10

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 :

Terminal window
ansible-config list

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 :

Terminal window
DEFAULT_TIMEOUT(default) = 10
Type: integer
Default: 10
Description: SSH timeout for connections to hosts.
Ini Section: [ssh_connection]
Ini Key: timeout
Environment Variable: ANSIBLE_TIMEOUT

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 :

Terminal window
ansible-config view

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 :

Terminal window
ansible-config init --disabled > ansible.cfg

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é :

# [defaults]
# inventory = /etc/ansible/hosts
# remote_user = root
# fork = 5
# ...

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 :

Terminal window
ansible-config dump --only-changed

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.