Skip to content

Installation et structure

Ansible dispose de plusieurs méthodes d’installation :

  • Via le package manager de la distribution GNU/Linux
  • Via le package manager Python (pip, poetry, …)

Ansible recommande d’installer les outils via le package manager Python afin de disposer des dernières versions. C’est aussi la méthode que j’utilise et que l’on va détailler ici.

Une fois l’installation d’Ansible faite, on s’attardera un peu sur comment se créer un espace de travail pour Ansible et comment faire quelques configurations aidantes.

Pour détailler l’installation, je vais détailler tout le processus via le package manager pip.

En premier lieu, assurez-vous d’avoir installé sur votre système les modules Python nécessaire :

Installation sur une base Debian
sudo apt install python3-pip python3-venv

Une fois ces paquets installés sur la machine, créez un virtualenv Python qui vous servira pour Ansible et activez le :

Création venv Ansible
python3 -m venv --copies ~/ansible_venv
source ~/ansible_venv/bin/activate

À cette étape, vous êtes prêt à installer Ansible via le package manager de Python.

Il ne vous reste donc qu’à lancer l’installation :

Installation d’Ansible
pip install ansible

Vous pouvez vérifier la version d’Ansible que vous avez installé avec la commande suivante :

Vérification de la version d’Ansible
$ ansible --version
ansible [core 2.17.5]
...

Ansbile utilise une structure de dossiers et fichiers pour la gestion des inventaires et des modules.

La structure recommandé par Ansible, à minima pour les parties inventaires, playbooks et rôles et la suivante :

  • Directoryansible_workspace/
    • Directoryinventories/
      • Directoryhost_vars/
        • …
      • Directorygroup_vars/
        • …
      • inventory.yml
    • Directoryplaybooks/
      • …
    • Directoryroles/
      • …

On retrouve donc les dossiers et fichiers suivants :

  • inventories : Dossier qui contiendra vos différents inventaires au besoin
  • host_vars : Dossier contenant les variables propres à chaque cible
  • group_vars : Dossier contenant les variables propres à chaque groupe
  • inventory.yml: Fichier d’inventaire
  • playbooks : Dossier contenant vos différents playbooks
  • roles : Dossier contenant vos différents rôles

Il est possible de configurer Ansible pour :

  • l’adapter à votre environnement
  • optimiser les exécutions sur des parcs importants
  • récupérer automatiquement des secrets
  • utiliser des callbacks personnalisés
  • …

Pour voir l’ensemble des configurations possibles, vous pouvez génerer la configuration de référence avec la commande suivante :

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

Vous aurez ainsi l’ensemble des options de configurations d’Ansible dans le fichier ansible.cfg sans surcharger les configurations par défaut du fait de l’apposition de l’option --disabled.

Personnellement, j’utilise assez peu de configurations mais qui restent assez pratiques :

[defaults]
; Force la path de recherche des rôles
;roles_path = ./roles
; Force la path de recherche des playbooks
;playbook_dir = ./playbooks
; Définit le fichier d’inventaire par défaut
inventory = ./inventories/inventory.yml
; Définit le fichiere contenant le mot de passe pour les vault ansible
; !!! Attention, si vous gérez votre code ansible avec GIT à ne pas inclure ce fichier dans votre dépot
vault_password_file=.vault_password
; Allow world readable tmpfile to permit become to unprivileged user in task
; Peut être dangereux à l’usage, à utiliser en connaissance de cause et si vous n’avez pas d’autre solutions
;allow_world_readable_tmpfiles=true
; Active le task_debugger. En cas d’erreur sur une tâche, Ansible activera le debugger pour permettre l’analyse
; de l’environnement d’exécution afin de comprendre plus en détail l’erreur.
;enable_task_debugger = true
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Performance tuning
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Tasks profiling
;callback_whitelist = profile_tasks
; Augmentation du nombre de fork pour accélérer le déploiement sur un inventaire large
forks=10
[ssh_connection]
; Activation du multiplexage de session SSH. La session reste connectée et est réutilisée au besoin.
; Permet d’éviter le dialogue d’ouverture de session surtout dans le cas de copie de fichiers.
ssh_args = -o ControlMaster=auto -o ControlPersist=2m

Il y a beaucoup d’autres options de configuration, mais pour ma part je suis resté « simple ». Je vous laisserai fouille dans le fichier de configuration de référence pour trouver d’autre options qui pourraient être intéressantes pour vous à configurer.