Outil permettant de déployer, modifier, maintenir la configuration (fichiers, services, etc.) d’un nombre important d’hôtes de façon centralisée (via ssh).
Concepts et vocabulaire
Les concepts utilisés sont assez simple, on parle de :
- nœuds : éléments du réseau: serveurs, matériel réseau, IOC etc.
- nœud contrôleur ou nœud maitre : machine qui va exécuter les commandes
ansible
etansible-playbook
etc qui vont déclencher l’exécution des modules Ansible sur les nœuds enfants - nœuds gérés ou nœuds enfants
- inventaire : liste structurée des nœuds à gérer
- tache : unité d’exécution d’Ansible
- playbooks : ensemble de taches Ansible a exécuter (fichier
.yml
) - modules : c’est là qu’on trouve la puissance de cet outil tant le nombre de modules fournis est important et permet de gérer des type de nœuds ou taches variés
Modules Ansible
Ansible dispose d’un système de modules (à distinguer des plugins) regroupés par collections de modules qui lui permettent d’agir sur les nœuds, a l’aide d’un outil dédié par module
On trouvera par exemple le module copy qui permet de manipuler des fichiers (copier, remplacer, supprimer etc.) ou command qui permet d’exécuter une commande sur les machine distantes.
Installation
Ansible doit être installé sur le nœud contrôleur, c’est à dire la machine qui va exécuter les commandes ansible
et ansible-playbook
qui vont déclencher l’exécution des modules Ansible sur les nœuds gérés.
Python est un prérequis pour toutes les machines (certains modules nécessitent coté nœuds enfants) et pour utiliser Python 3 il faut effectuer une manip dans le fichier d’inventaire (ou spécifier l’argument -e des CLI) :
[all:vars] ansible_python_interpreter=/usr/bin/python3
Commande ad-hoc
Il est possible d’exécuter une commande de façon unitaire, pour cela on utilisera la commande ansible
:
ansible meswebservers -i inventaire.conf -m copy -a "src=~/fichier dest=~/chemin/fichierdest" --check --diff ansible meswebservers -i inventaire.conf -m service -a "name=wpa_supplicant state=stopped enabled=no" --become ansible meswebservers -i inventaire.conf -m apt -a "update_cache=yes autoclean=yes" --become
-m
: nom du module utilisé (ici copy)-i
: nom du fichier d’inventaire (possible d’utiliser localhost à la place)-a
: arguments du module--check
: dry run--diff
: montre les différences à l’exécution--become
: effectue unsudo
Playbooks
Le mode d’utilisation par playbooks (qui sont des fichiers de configuration écrit en yaml) permet réellement d’orchestrer, ordonnancer de façon synchrone ou asynchrone des ensemble de plays.
Voici un exemple de playbook (exemple.yml):
hosts: meswebservers tasks: - copy: src: '~/fichier' dest: 'chemin/fichierdest'
et on exécute le contenu de ce fichier avec la commande:
ansible-playbook -i inventaire.cfg --check exemple.yml
Modules
Les modules sont le cœur d’Ansible et permettent les exécutions sur les nœuds distants:
- apt : package manager des distributions dérivées de Debian
- package (win_chocolatey pour Chocolatey sous Win): utilise le gestionnaire de package de la distribution (apt, brew, yum, etc.) pour installer, mettre à jour ou désinstaller des packages sur l’OS
- service : équivalent
systemctl
- copy ou fetch : pour envoyer ou recevoir des fichiers vers les nœuds
- file (win_file pour Win): permet de manipuler des fichiers: création, suppr, modif de permissions ou de propriétaires (voir l’attr state)
- debug : permet d’afficher des infos (facts, variables ou expressions) lors de l’exécution des playbooks (a utiliser avec
--check
) - command : a n’utiliser qu’en dernier recours, fait partie de la famille des modules de commandes qui permettent d’exécuter des commandes arbitraires sur les nœuds, sans profiter de la gestion d’état d’Ansible.
- setup : est appelé auto par
ansible-playbook
, mais peut être appelé paransible
pour récupérer les facts concernant des nœuds.
Voirgather_subset
etgather_facts
Liens
Configuration Management vs Provisioning
popularité des configuration management tools (Chef, Puppet, Ansible, et SaltStack)
Vidéo d’introduction sur Ansible