Ansible : comprendre l'outil d'automatisation IT open source (gratuit)

Ansible : comprendre l'outil d'automatisation IT open source (gratuit) [ANSIBLE] Parmi les outils d'automatisation des configurations et des déploiements, Ansible est l'un des plus populaires. Des playbooks aux inventaires en passant par les templates, le point sur ses composants.

Ansible : qu'est-ce que c'est ?

Ansible est un logiciel libre de gestion des configurations qui automatise le déploiement des applications et la livraison continue des mises à jour. Disponible sous licence GPL v3, il s'adosse au protocole de cryptage réseau SSH (pour Secure Socket sHell) pour déployer les mises en production de code via des fichiers décrivant les configurations applicatives cibles au format Json (pour JavaScript object notation)

Résultat : Ansible représente une alternative crédible aux solutions de management IT en mode maitre-esclave. Le couple SSH / Json lui permet d'optimiser au maximum la consommation des ressources des serveurs. Souvent comparé à SaltStack, Ansible a été créé en 2012 par Michael DeHaan. Ecrit en langage Python, il est aujourd’hui géré par l’entreprise Red Hat (groupe IBM).  

Comment télécharger Ansible ?

Vous pouvez télécharger Ansible sur la page dédiée au projet open source sur GitHub. En plus, il est possible de télécharger un environnement utilisateur open source (baptisé AWX), également disponible sur GitHub, qui viendra se greffer sur l'outil pour en faciliter le pilotage. AWX combine une interface graphique, une API et un moteur de build. 

Comment installer Ansible ?

L’installation d'Ansible est très simple et peut se faire de plusieurs manières. Le plus rapide est d’utiliser l'outil Pyhton de gestionnaire de packages pip et d’obtenir la dernière copie du code source d'Ansible sur GitHub. Voici les commandes à lancer pour l'installer selon les environnements : 

Installation via le gestionnaire de packages pip :

$ sudo pip install ansible

Installation sur un système Linux RHEL/CentOS :

$ sudo yum install ansible

Installation sur un système Linux Debian/Ubuntu :

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

Comment gérer un Ansible file ?

De nombreux modules Ansible permettent de définir les attributs des fichiers de configurations et de déploiement, mais aussi ceux des liens symboliques et des répertoires correspondant. Inversement, ces modules peuvent gérer la suppression des fichiers, et celle des liens symboliques et des répertoires créés.

Parmi les modules en question figurent ansible.builtin.fileansible.builtin.assembleansible.builtin.copy ou encore ansible.builtin.template. Sous Windows, il est plutôt recommandé de recourir au module ansible.windows.win_file.

En complément, le module ansible.builtin.copy permet de copier un fichier local vers une machine distante, et inversement. Quant à ansible.builtin.lineinfile, il vérifie qu'une ligne de code est bien contenue dans un fichier ou encore remplace à la volée une ligne existante à l'aide d'une expression régulière.

Un playbook Ansible, c'est quoi ?

Un playbooks Ansible est un fichier YAML dans lesquels sont mentionnés toutes les tâches qu'Ansible doit exécuter : de la configuration de l'environnement informatique de production jusqu'à l'orchestration de toutes les étapes de déploiement d'une application ou d'une mise à jour sur celui-ci. La syntaxe quasi-naturelle utilisée pour décrire ces tâches est particulièrement simple. Le fichier YAML commence par décrire les hôtes (ou serveurs) ciblés puis les variables du processus avant de dérouler les jobs à accomplir.

Les fichiers YAML appellent des modules Ansible pour orchestrer le processus de livraison. Pour lancer les playbooks, il faut d’abord s’assurer que la syntaxe ne contient pas d’erreur en procédant ainsi : --syntax-check. Puis, vous pouvez effectuer une simulation avec : --check.

Pourquoi utiliser un template Ansible ?

Ansible a recours à des templates ou modèles pour faciliter la création de scripts de configuration. Ce dispositif s'appuie sur le langage de templating Jinja2 conçu pour Python. Il est en outre livré avec le moteur de templating du même nom.

Les templates Jinja2 facilitent la gestion des variables (template_host, template_uid, template_path...), des listes, des tests logiques et des boucles. Ils permettent de gérer la fonctionnalité ZTP (pour zero touch provisioning) et d’effectuer des scripts de configuration d’un niveau très avancé. Le module ansible.builtin.template simplifie la création de ces modèles avec leurs  paramètres associés.

Quel est l'apport et le prix d'Ansible Tower ?

Conçu par Red Hat, Ansible Tower coiffe l'outil open source d'une API et d'une interface utilisateur graphique visant à le rendre plus simple à utiliser. C’est une version commerciale d'Ansible. Sa valeur ajoutée principale ? Fournir une vision d'ensemble de l'infrastructure informatique, des serveurs en production aux templates récemment mises à jour en passant par les jobs exécutés (voir capture ci-dessous).

Le tableau de bord d'Ansible Tower fournit une vision de l'ensemble de l'activité en cours au sein de l'infrastructure informatique ciblée. © JDN / Capture

Ansible Tower permet de créer, paramétrer et supprimer des tâches de configuration ou de déploiement d’une manière plus intuitive. Centralisant la gestion de l'infrastructure IT via des tableaux de bord visuels, la plateforme couvre le contrôle d'accès (basé sur des rôles), la planification des tâches et le management d'inventaire.

Les trois  éditions d'Ansible Tower
Edition Ansible Tower Basic Ansible Tower Enterprise Ansible Tower Premium
Prix 5 000 dollars par an 10 000 dollars par an 14 000 dollars par an
Capacité Jusqu'à 100 nœuds Jusqu'à 100 nœuds Jusqu'à 100 nœuds
Support 30 jours de support Support aux heures ouvrées par téléphone Support par téléphone en 24/7
SLA Pas d'engagement de temps de réponse Engagement à répondre sous 24h pour les problèmes non-critiques, et sous 4h pour  les problèmes critiques Engagement à répondre sous 8h pour les problèmes non-critiques, et sous 2h pour  les problèmes critiques
Mise à jour Maintenance et mise à jour Maintenance et mises à jour Maintenance et mises à jour
Fonctions Limitées Fonctionnalités Enterprise Fonctionnalités Enterprise

Est-il possible d'utiliser Ansible en ligne de commande Shell ?

Ansible inclut un module (Ansible Shell) dessiné pour lancer des instructions sur un serveur distant en lignes de commande. Comment l'utiliser ? D'abord, il est évidemment nécessaire de créer un hôte :

sudo nano /etc/ansible/hosts

Une fois l'hôte créé, il faudra créez une nouvelle entrée :

[serverjdn] 189.134.1.24

Enfin, il est possible d'exécuter un playbook sur le serveur hôte, par le biais de la commande suivante :

ansible-playbook monfichier.yml --ask-become-pass

Comment gérer Windows via Ansible ?

Pour qu'Ansible puisse communiquer avec des serveurs Windows et leurs différents modules, l'édition serveur de l'OS de Microsoft utilisée devra être dotée de l'interface en lignes de commande PowerShell 3.0 ou d'une version plus récente de cette dernière, et à minima du framework .Net 4.0 de Microsoft. Un écouteur WinRM devra en outre être créé et activé.

Sans surprise, les modules d'Ansible pour Windows sont tous écrits en PowerShell et exécutés au travers de l'interface Winrm (pour Windows Remote Management). Ansible est compatible avec Windows 7, 8.1 et 10 côté desktop et Windows Server 2008, 2008 R2, 2012, 2012 R2, 2016 et 2019 (voir le guide sur le site officiel d'Ansible). 

Comment gérer votre inventaire avec Ansible ?

Ansible pilote simultanément plusieurs nœuds (ou hôtes) en recourant à la notion de liste ou de groupe de listes représentant des inventaires de ressources informatiques. Une fois l'inventaire IT défini, les templates permettent de sélectionner les hôtes ou les groupes d'hôtes sur lesquels exécuter Ansible.

Le chemin de l'inventaire est par défaut /etc/ansible/hosts. Un fichier d'inventaire différent peut être spécifié via l'interface en lignes de commande en utilisant l'option -i <path>. Il est aussi possible d'opter pour un inventaire dynamique si celui-ci fluctue. La méthode consiste à utiliser plusieurs fichiers d'inventaire en même temps et / ou à extraire un inventaire à partir d'une ou plusieurs sources (cloud, système d'informations sur site). Introduits à l'occasion de la sortie de sa version 2.4, Ansible est désormais équipé de modules de gestion d'inventaire baptisés Inventory Plugins.

Comment déboguer grâce à Ansible ?

Ansible inclut un débogueur pour traquer les erreurs lors de l'exécution des configurations et des livraisons de code. Au fur et à mesure du processus, il permet de vérifier et, si besoin, de redéfinir la valeur des variables et / ou les arguments d'un module. Puis, il réexécute à la volée la tâche avec les nouvelles variables et arguments. Une manière de résoudre les problèmes au fil de l'eau. 

Ansible fournit un module ad hoc pour gérer le débogage. Baptisé ansible.builtin.debug, il est taillé comme évoqué plus haut pour déboguer des variables ou expressions sans stopper l'exécution du playbook.

Comment piloter un application Docker avec Ansible ?

Ansible embarque tout une série de modules pour manager une infrastructure à base de containers logiciels Docker. Ils gèrent tout une série de tâches. Au programme : la gestion des images (via les modules docker_image et docker_image_info), la gestion du cycle de vie du container (via docker_container), l'orchestration des containers (via docker_compose), la gestion des authentifications (via docker_login) ou encore la génération dynamique d'inventaire (via docker dynamic inventory).

Un guide complet sur Docker est disponible sur le site officiel du projet Ansible. L'utilisation des modules Docker d'Ansible nécessite d'installer le kit de développement (SDK) Docker pour Python, et ce sur l'ensemble des serveurs concernés.

Qu'apporte Ansible Galaxy ?

Ansible Galaxy est un site communautaire d'échange et d'entraide autour de la technologie Ansible. Il permet de télécharger et partager gratuitement des playbooks et autres outils complémentaires dans différents domaines : système, réseau, cloud, base de données, monitoring,  sécurité...

Tutoriel : quelques liens

Le site officiel d'Ansible propose toute une série de tutoriels en anglais pour prendre en main l'outil de gestion des configurations et des déploiements. En voici une sélection non-exhaustive :