Ansible est une solution open source de gestion de configuration qui se présente sous la forme d’un script qui effectue des actions définies par l’utilisateur via le protocole SSH sur une ou plusieurs machines. Elle permet d’automatiser des tâches comme des installations sur un grand nombre de machines tout en personnalisant les configurations.
Le logiciel possède de nombreuses extensions qui permettent de ne pratiquement jamais avoir recours à l’utilisation de commandes linux brutes dans les scripts. Tous ces modules permettent aussi à ansible de tester si il est nécessaire d’exécuter une tâche en fonction de l’état de la machine, ainsi si l’on indique de démarrer un processus mais qu’il est déjà démarré sur le serveur, ansible ne perdra pas de temps et passera à l’action suivante.
Cette solution permet par exemple d’installer automatiquement les services nécessaires à un serveur, passer du code en production automatiquement, etc…
Installation
L’installation d’ansible se fait via le gestionnaire de paquet :
sudo apt-get install ansible
Puis il suffit de créer un dossier avec les fichiers et répertoires nécessaires à votre script.
Fonctionnement
Ansible s’articule autour de deux systèmes principaux les playbooks (composés des tâches ou « tasks ») et les hôtes (« hosts »). Les playbooks contiennent la liste des actions à effectuer et le fichier hôte contient la liste des serveurs regroupés par groupe.
Exemple d’un playbook :
—
– hosts: webservers
sudo: yes
tasks:
– name: install packages
apt: name="{{ item }}" update_cache="yes" state="present"
with_items:
– "git"
– "nginx"
– "php7.0"
– "php7.0-mysql"
– "php7.0-curl"
– "php7.0-json"
– "php7.0-cgi"
– name: install php on nginx
template: « src=nginx.conf dest=/etc/nginx/sites-available/default.conf »
notify:
– restart php7-fpm
– restart nginx
– name: Create symlink
file: src=/etc/nginx/sites-available/default.conf dest=/etc/nginx/sites-enabled/default.conf state=link
…
Exemple de fichier « hosts » :
[servers_group1]
192.168.1.200
[servers_group2]
192.168.1.201
Autour de ces deux fichiers principaux, les créateurs d’Ansible ont ajouté d’autres fichiers permettant d’améliorer les scripts. Ainsi il a été ajouté les variables, les rôles, les templates, les événements, etc…
Les variables rendent la gestion de la configuration très simple.
Les rôles permettent de créer l’équivalent des fonctions en programmation.
Les templates sont des fichiers de configuration modifiés, lors de son appel, les variables nécessaires seront insérées dans le fichier final.
Les événements permettent d’effectuer des actions seulement lorsqu’une notification est envoyée par le fichier tâche, par exemple cela permet de redémarrer un service après avoir modifié sa configuration.
Exemple de la structure d’un script Ansible avec une organisation par rôle :
Bien entendu il s’agit d’un système de script, les exemples donnés plus haut ne peuvent donc pas représenter toutes les possibilités. Dans de prochains articles, je détaillerai le fonctionnement d’autres cas plus concrets.
Conclusion
Selon moi, Ansible est un outil incontournable dans la mise en production d’un service et dans la gestion d’un parc de serveur. De plus la solution possède son propre système de partage du contenu à la communauté nommé « Galaxy ». Néanmoins, Ansible peut être relativement difficile à prendre en main en particulier à cause de l’architecture des fichiers qui peut varier en fonction de l’utilisation des rôles et du manque de documentation sur certains points (comme la modification de la connexion SSH depuis une version récente).
Plus d’infos
http://docs.ansible.com/ansible