Ansible est un système d’automatisation qui permet de provisionner, gérer des configurations, déployer des applications et orchestrer des déploiements sur un parc de machines. C’est un projet GNU GPL V3 accessible via Github (https://github.com/ansible/ansible)

Technologies

L’outil Ansible est écrit en Python et utilise des technologies éprouvées pour assurer son rôle. En effet, il utilise le protocole SSH pour réaliser ses actions sur les noeuds (machines) distants. Ansible ne réalisera une action que si le noeud a été modifié (exemple d’une configuration à modifier, un paquet qui change de version…). Les instructions sont rédigées en YAML ce qui rend la lecture des procédures facile d’accès.

Pré-requis système du contrôleur de noeuds

Ansible est compatible avec la plupart des systèmes Linux : Ubuntu, Debian, Gentoo, FreeBSD, ArchLinux, etc mais également avec des systèmes d’exploitation tels que MacOS. La liste des systèmes est accessible sur la documentation officielle (https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-the-control-node). 

L’outil nécessite la présence des librairies Python 2.6 ou supérieure et peut être installé via le gestionnaire de paquet du système d’exploitation (apt/yum) ou bien via le gestionnaire d’extension Python (pip ou pip3).

A la différence de Puppet, Ansible ne nécessite pas obligatoirement de serveur maître (orchestrateur) ce qui rend sa mise en oeuvre plus rapide.  Cependant, il existe une version orchestrateur Ansible Tower (https://www.ansible.com/products/tower) disponible. Cette dernière est une version payante. Une version OpenSource est également disponible (https://github.com/ansible/awx). Ces deux produits permettent d’organiser et contrôler de façon plus efficace le provisonning fait par Ansible. Il est par exemple possible d’effectuer des flux de travail pour gérer la bonne exécution de playbook et ainsi pouvoir selon son résultat déclencher d’autres actions à effectuer (notification, lancement d’un nouveau playbook, etc). Cet outil déployé via la technologie de container docker (https://www.atolcd.com/infographie/infographie-docker)  est accessible au travers d’une interface web.

Pré-requis des nœuds

Ansible est capable de poursuivre une procédure sur des systèmes Linux, et également sur des systèmes Windows.

Pour les deux systèmes il est nécessaire d’avoir un accès sur le nœud distant via SSH et Python 2.6 ou supérieur ou bien Python 3.5 ou supérieur.

Dans le cas de Windows, des versions du framework .NET et Powershell sont nécessaires. Dans ce cas, ce n’est pas Ansible qui interviendra mais bel et bien un administrateur pour préparer le système en amont.

Mode de fonctionnement

Le package ansible installé via le gestionnaire de package système ou via pip embarque avec lui plusieurs commandes qui permettent d’agir sur des nœuds.

  • La commande ansible permet de lancer une seule commande sur un nœud distant.
  • La commande ansible-playbook, que nous abordons dans ce billet, permet de lancer l’exécution d’un scénario, sur un ensemble de noeuds distants. 

Structure

Les modules

Ansible embarque des modules qui permettent de réaliser la plupart des tâches d’administration nécessaires au maintien opérationnel d’un nœud ou au déploiement d’une machine. Une liste exhaustive classée par catégorie est disponible à l’adresse suivante : https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

L’inventaire

L’inventaire est un fichier qui décrit l’ensemble des nœuds ciblés par Ansible. Les nœuds peuvent être regroupés par domaine.s et sous-domaine.

Pour vérifier son inventaire, Ansible met a disposition une commande ansible-inventory.

Les playbooks

Les playbooks définissent la liste des tâches qui vont être réalisées de façon séquentielle. Ils sont rédigés en YAML.  Ces tâches vont être exécutées sur différents nœuds définis par l’inventaire en utilisant les modules mis à disposition.

Exemple

Les rôles

Les playbooks peuvent être imbriqués ou bien faire appel à des rôles.

Globalement, ils définissent un ensemble de tâches qui doivent être exécutées pour que le nœud distant puisse assurer un service (ou rôle) au sein du système d’information. Ainsi différents rôles peuvent être appelés à partir d’un playbook pour créer un service complet sur un ou plusieurs noeuds.

Exemple: pour créer un serveur ACS (Alfresco Content Service) on va appeler successivement les rôles de :

  • PostgreSQL
  • Tomcat
  • Apache
  • ACS
  • ASS
  • ActiveMQ

L’utilisation des rôles permet entre autre d’assurer une uniformisation des déploiements d’un service.

Conclusion

Ansible est un outil d’automatisation riche et qui sait s’adapter à la taille des systèmes d’information. Il peut être utilisé aussi bien pour réaliser des actions quotidiennes pour un administrateur système (recopie de données par exemple), le déploiement de serveurs applicatifs (hébergement web, système de fichiers, base de données, etc.) mais également pour assurer la gestion d’un parc important de nœuds via son orchestrateur AWX ou Ansible Tower (dans sa version payante).