Ansible est un outil de gestion de configuration, appelé configuration management en anglais.
Introduction
Sa principale utilisation est le déploiement d’actions en masse sur un parc de serveurs. Il devient rapide et facile de réaliser une banale action sur plusieurs centaines de serveurs.
Pour simple et court, Ansible s’organiser autour des principaux concepts suivants : Inventory, Task, Playbook.
- L’Inventory (ou inventaire en francais) regroupe l’ensemble des serveurs que vous souhaitez controler.
- La Task (tache en francais) est une tache à réaliser. Cela peut etre une commande shell, un paquet système, ou un fichier à déposer. Il existe une grande variété de taches, qui augmente avec le temps grace à la communauté open source.
- Le Playbook permet d’appliquer les Tasks sur les serveurs de l’Inventory, il fait le liant entre les précédents objets.
Inventory : Inventaires des serveurs cibles
Un inventaire est un fichier au format .ini
ou .yaml
qui se place généralement dans un répertoire inventories/
. Il contient des fichiers qui regroupent les serveurs par ensemble : dev, preprod, prod, france, spain, italy.
Quand un seul inventaire est présent, la communauté nomme ce ficheir hosts. Son nom importe peu étant donné qu’il sera explicitement renseigné au moment d’exécuter l’outil. On utilise très fréquemment des alias pour augmenter en lisibilité (exemple front est l’alias de l’adresse IP de sa machine).
Un inventaire ressemble à ceci (.ini
) :
front ansible_host=192.168.0.10 api ansible_host=192.168.0.20
Tasks : Actions à déployer
Un tache est un bloc de code écrit dans un fichier. Ce fichier est un fichier de tasks (utilisé dans les rôles) ou un fichier playbook.
Une tache ressemble à ceci :
- name: Install vim on server apt: name: vim state: present
Playbook : Déploiement des Tasks sur l’Inventory
Un playbook est un fichierau format .yaml qui contient l’ensemble des taches à déployer sur les serveurs cibles. Les y serveurs indiqué en stipulant leur nom d’utilisation
Exemple d’un playbook reprenant les exemples précédents :
- hosts: front:api tasks: - name: Install vim on server apt: name: vim state: present
On image très facilement uen application plus large sur une flotte plus importante de serveurs.
Ses concurrents
Dans ses nombreux comcurrents, on retrouve entre autre : Puppet, Chef, SaltStack.
Les autres outils sont moins nettement connus et offre moins de fonctionnalités.
Retour d’expérience
J’utilise maintenant Ansible depuis 2016 (version 2.1) et je n’ai pas encore trouvé d’outil aussi performant, personnalisable et facile d’utilisation.
Je me suis aventuré sur Puppet, mais l’utilisation reste lourde, malgré l’utilisation d’agent qui rend l’exécution des actions totalement autonome.
Comparatif rapide entre Ansible et Puppet :
Ansible | Puppet | |
---|---|---|
Type de connexion aux serveurs cibles | SSH | Agent (coté serveur) |
Logiciel codé en… | Python | Ruby, C++, Clojure |
Ressources utilisateur codé en | YAML (déclaratif) | Ruby DSL (langage propre à Puppet) |
Simplicité de mise en place | Facile | Moyen |
Simplicité d’utilisation | Facile | Moyen |
Simplicité d’écriture des ressources | Facile | Difficile |
Type d’exécution | CLI / Oneshot | Mode daemon / Permanent |