Ansible
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 collections de modules qui lui permettent d’agir sur les nœuds. Les modules sont le cœur d’Ansible et permettent les exécutions sur les nœuds distants, voir doc d'intro et la liste de tous les collections et modules.
On trouvera par exemple le module command qui permet d’exécuter une commande sur les machine distantes.
Facts
Les facts sont des informations basiques concernant un nœud, recueillis par Ansible.
Voir gather_subset
et gather_facts
Installation
Ansible doit être pour utiliser Python 3, sur les machines hotes, pour Python3 devrait etre détecté automatiquement, cependant, il est possible de spécifier explicitement l'emplacement du binaire a utiliser à traver un 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 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
Liens
- Configuration Management vs Provisioning
- popularité des configuration management tools (Chef, Puppet, Ansible, et SaltStack)
- Vidéo d’introduction sur Ansible