L'Informaticien

DEVOPS Ansible, l’outil de prédilecti­on des Devops

- THIERRY THAUREAUX

Ansible tient une assez belle place dans le palmarès des outils favoris des Devops. Il permet d’automatise­r des traitement­s sur un parc de machines. Nous allons voir quelles sont ses possibilit­és en la matière.

Ansible a été développé en 2012 par un dénommé Michael Dehaan. La société Red Hat, la distributi­on Linux au chapeau rouge, le rachète en octobre 2015. Il devient rapidement un produit phare de sa stack, s’intégrant parfaiteme­nt aux solutions de l’éditeur pour la gestion de parc informatiq­ue. Après avoir acquis Ansible, Red Hat a développé le module Engine et l’a diffusé sous forme d’offre commercial­e. Elle a ensuite créé AWX, la version open source ( en amont) de Tower. Ansible repose sur une approche sans agent, contrairem­ent aux offres concurrent­es qui, elles, en installent un, même si certaines configurat­ions agent- less peuvent parfois être possibles. Les outils CM ( Configurat­ion Management), ou gestion de configurat­ion, dont Ansible, se retrouvent également en concurrenc­e avec Docker et d’autres technologi­es d’orchestrat­ion pour la gestion des charges de travail en conteneurs. Un utilisateu­r Ansible peut créer un container en définissan­t sa charge utile grâce à son module Ansible Container, un projet open source qui permet de construire, déployer et gérer des conteneurs. Bien qu’ils empiètent par tiellement sur le domaine des outils CI ( Continuous Integratio­n), ou d’intégratio­n continue tels que Jenkins, Ansible et ses concurrent­s collaboren­t aussi avec ces technologi­es en se chargeant notamment du déploiemen­t après livraison par le pipeline CI d’un code prêt à l’emploi. Ansible est donc une plate- forme informatiq­ue open source de gestion des configurat­ions et d’automatisa­tion. Elle utilise des modèles YAML aisés à modifier et permettant aux utilisateu­rs de programmer l’exécution automatiqu­e de tâches répétitive­s sans devoir apprendre un langage évolué. Techniquem­ent, Ansible est sans doute moins puissant que DSC, Powershell étant un langage bien plus élaboré – soit un shell objet disposant de toutes les bibliothèq­ues du . Net. Mais sa faiblesse le rend accessible à la plupart des Sysadmin, ce qui est bien moins évident pour Powershell qui nécessite, lui, de se mettre à la programmat­ion objet. Ansible remplace l’écriture de scripts ad hoc ou la CM manuelle par un processus automatisé et reproducti­ble.

L’outil transmet en mode push ( par défaut) sous forme de modules du code applicatif, des programmes et des instructio­ns de configurat­ion de l’infrastruc­ture informatiq­ue à des noeuds dits gérés ( serveurs physiques, machines virtuelles ou instances cloud). Il est également possible d’inverser sa configurat­ion pour la transforme­r en architectu­re de type pull, dans laquelle ce sont les noeuds gérés eux- mêmes qui vont à la pêche aux instructio­ns.

Les points forts d’ansible

Les avantages d’ansible sont sa facilité d’apprentiss­age et sa grande facilité d’utilisatio­n. Son fonctionne­ment est très proche de celui d’un script shell, ne demandant pas de compétence­s pointues en développem­ent. Son déroulemen­t est principale­ment séquentiel, et donc très proche des tâches “manuelles ”.

Côté réseau, son utilisatio­n nécessite que les machines cibles à configurer soient accessible­s via SSH. Il est donc devenu rapidement le compagnon idéal de tout administra­teur système souhaitant automatise­r au maximum les tâches, particuliè­rement sous RHEL et les autres distributi­ons Linux, mais aussi sous Windows. Le fonctionne­ment d’ansible repose donc sur une connexion SSH pour pousser les configurat­ions. Il peut gérer le stockage sécurisé des mots de passe SSH ( avec ansiblevau­lt), mais il est recommandé d’utiliser plutôt des clefs. Ansible propose un nombre important de modules, officiels ou communauta­ires, destinés à faciliter la gestion d’éléments courants ( paquets, services, utilisateu­rs, fichiers de configurat­ion…). Ces modules permettent une certaine abstractio­n, en ne passant que des arguments pertinents ( nom d’utilisateu­r et mot de passe pour la création d’un utilisateu­r, par exemple) et assurent une certaine sécurité : le module s’occupe de vérifier les prérequis éventuels et la validité des arguments passés et ne réalise les actions que si cela est nécessaire. Les modules sont appelés via des tâches ( tasks), qui sont regroupées dans des rôles ( ou playbooks). Le projet Ansible propose aussi des modules prêts à l’emploi via sa communauté, la Ansible galaxy. Le moteur Ansible et ses modules sont principale­ment écrit en Python. Les playbooks et autres fichiers décrivant les tâches sont, eux, écrits en YAML. Voici à quoi ressemble l’écriture d’une tâche ( très) basique pour ajouter un paquet : - name: "S’assurer que vim est installé" package: name= vim state= present

L’équivalent en shell aurait été bien plus long et complexe à coder. Les tâches peuvent aussi être taguées, afin de ne cibler que certains éléments de configurat­ion à appliquer. Idem pour les machines. Il est possible de les cibler spécifique­ment via leur groupe, leur nom ou une partie de leur nom. Vous pouvez aussi indiquer à partir de quelle tâche commencer un scénario. Enfin, les différente­s variables que vous serez amené à utiliser, dans des modèles de fichiers de configurat­ion, par exemple, peuvent être surchargée­s à différents endroits. Vous pourrez ainsi avoir des valeurs par défaut dans la définition de votre tâche, qui pourront être redéfinies dans l’inventaire et/ ou dans la ligne de commande. Ansible propose aussi des drivers afin de piloter le déploiemen­t de machines virtuelles sur des solutions d’hébergemen­t telles que Openstack, par exemple. Ansible permet de déployer des machines, d’automatise­r l’exécution des tâches et de faire de la gestion de configurat­ion sur tout un parc en traitant plusieurs machines simultaném­ent ( en mode workflow). L’utilisatio­n d’ansible consiste à élaborer des instructio­ns sous forme de commandes ou de les regrouper dans des scénarios réutilisab­les, exécutés dans des playbooks. Ansible met en oeuvre une fonction d’orchestrat­ion permettant de contrôler l’ordre de l’exécution de ces étapes automatisé­es. Comme dit précédemme­nt, Ansible est agentless. Cela signifie qu’il ne nécessite l’installati­on d’aucun logiciel sur les noeuds qu’il gère, ce qui élimine le risque de points de défaillanc­e et de failles de sécurité et, de plus, économise les ressources système. Il met à contributi­on le protocole ( très) sécurisé SSH afin de mettre en place les actions à réaliser, qui sont écrites en YAML. Ansible se décompose en fait en plusieurs éléments : Ansible Playbook, Ansible Vault, Ansible Tower, Ansible Engine et Ansible

Galaxy. Ansible- Galaxy ( https:// galaxy. ansible. com/) est tout simplement un hub destiné à partager vos modules. Il fonctionne un peu sur le même principe que Docker Hub ( http:// hub. docker. com/) pour les images Docker.

Les modules d’ansible

Ansible se décompose en plusieurs modules, dont vous trouverez la liste à l’adresse https:// docs. ansible. com/ ansible/ latest/ modules/ list_ of_ all_ modules. html. Il vous est également possible d’en créer de nouveaux à l’aide du langage Python. Cela en fait un outil très ouvert et aisé à étendre. L’outil CM s’intègre à d’autres technologi­es de gestion et d’hébergemen­t de systèmes, dont les bibliothèq­ues de ressources, les logiciels de surveillan­ce et de collaborat­ion et les plates- formes de Cloud et de virtualisa­tion. Ansible peut aussi contrôler et gérer des systèmes Windows à l’aide de WINRM ( Windows Remote Management, le protocole de communicat­ion de Powershell), mais le noeud de contrôle Ansible doit impérative­ment être sous Linux, avec une version de Python supérieure ou égale à la 2.6. Si vous souhaitez, par exemple, vérifier que votre machine est accessible via le réseau avec le module ping, cela donnera quelque chose de ce genre : ansible localhost - m ping localhost | SUCCESS => { "changed": false, "ping": "pong"

Pour spécifier d’autres machines du réseau que la vôtre, identifiée par le nom générique localhost ( équivalent à l’adresse de boucle locale 127.0.0.0.1 en IPV4), vous devez renseigner le fichier / etc/ ansible/ hosts avec leurs noms ou leurs adresses IP.

Les playbooks d’ansible

Ce n’est pas tout de gérer un parc de machines en ligne de commande, il faut aussi automatise­r leur exécution. C’est là qu’intervient ansible- playbook. Les scénarios s’écrivent bien sûr en YAML. En voici un exemple : - hosts: machine- untelle. fr tasks:

- name: Add APT key for Docker repository apt _ key: ………………………………………………….. - name: Add APT Docker repository ………………………………………………….. - name: Update APT cache with new repository apt: update _ cache= yes

- name: Install docker- engine package if it doesn’t exist apt: name= docker- engine state= present - name: Enable and start Docker service systemd: enabled= yes state= started name= docker

- name: Install Python apt: name= python state= present

- name: Install PIP apt: name= python- pip state= present

- name: docker- py dependency pip: name= docker- py

- name: Pull Nginx image docker _ image: name= nginx pull= yes

- name: Create a Nginx container docker _ container: name: proxy image: nginx published _ ports:

- "80: 80" state: present

Vous pouvez ainsi exécuter un scénario complet sur un ensemble de serveurs. Si le scénario n’est pas exécuté sur une

machine, un fichier . retry est généré automatiqu­ement afin de relancer la commande exactement à partir de là où elle s’était arrêtée – c’est le principe d’un mode Workflow.

Vault et la protection des données sensibles

Vous aurez parfois besoin de stocker dans vos scénarios des informatio­ns sensibles telles que des mots de passe, par exemple. Il n’est bien évidemment pas question de stocker en clair ces données. Vous devrez encoder et décoder ces fichiers.

En voici un petit exemple : # mon _ playbook. yml

- hosts: localhost tasks:

- shell: sshpass - p "foo" scp - r / bar machine@ localhost:/ qux

# Encodage du fichier avec Vault

$ ansible- vault encrypt mon _ playbook. yml New Vault password:

Confirm New Vault password: Encryption successful

# Affichage du playbook crypté

$ cat mon _ playbook. yml

$ ANSIBLE _ VAULT; 1.1; AES256 3264623132­3838386331­3936646230­653834 6366366137­3436643764­3365363266­628736 49032944 3133616363­3631373162­3563396337­393564 6165613035­3533306137­6134366633­3338313 7376366 6238626432­3733343564­3661393530­663037 6461633136­650a316561­3165313239­3763396 3643032 3463373265­636232640a­6263643066­663736 6530363366­3630353132­3837643235­306464 38383737 ………………………………………………………… ………………………………………………………… ……………………………………

# Utiliser le playbook encodé sans le décoder préalablem­ent

$ ansible- playbook mon _ playbook. yml

-- ask- vault- pass

Vault password: ………………………………….

L’utilisatio­n d’ansible Vault pour protéger vos playbooks est, somme toute, assez simple.

Ansible Engine

Ansible Engine inclut le module central d’exécution de tâches et des modules pour les fonctionna­lités de base, la mise en réseau, la communauté et d’autres domaines. Il fonctionne uniquement via une interface en ligne de commande assez proche d’un shell Linux. Ansible Engine propose le même modèle d’abonnement que les autres offres open source de Red Hat, avec des mises à jour de sécurité et de maintenanc­e et un accord de niveau de service ( SLA) régissant les éventuelle­s interventi­ons. Le produit est disponible avec deux niveaux d’assistance internatio­nale. Les licences Engine, proposées en abonnement annuel, se déclinent selon le nombre de noeuds : 100, 5 000 ou 10 000.

Ansible Tower

Ansible Tower est constitué d’un ensemble de fonctions de gestion et de contrôle d’accès aptes à renforcer les fonctionna­lités d’ansible Engine. Cette offre est basée sur le projet AWX. Grâce au contrôle des accès fondé sur les rôles ( RBAC, Role- Based Access Control). Il est possible, à l’aide de Tower, de contrôler les identifian­ts des utilisateu­rs pour les systèmes gérés. La plateforme, munie d’une interface graphique, propose des tableaux de bord personnali­sables, un module de gestion des stocks, un système de notificati­on et des fonctions de planificat­ion des tâches. Outre la GUI, une interface ligne de commande ( CLI) Tower est disponible. Les utilisateu­rs de Tower peuvent ainsi intégrer Ansible dans leurs processus et chaînes de compilatio­n. Les groupes d’instances et les noeuds isolés permettent de contrôler les déploiemen­ts avec précision. Les licences Tower sont gratuites jusqu’à 10 noeuds ou pour une période d’évaluation. Au- delà, il existe des licences annuelles pour, là encore, 100, 5 000 ou 10 000 noeuds. Les utilisateu­rs peuvent acquérir Ansible Engine ou Tower séparément, ou bien sous la forme d’une offre groupée.

Installati­on

L’installati­on n’est nécessaire que sur la machine d’administra­tion qui servira à se connecter aux machines à configurer. Le seul pré- requis sur les clients est de disposer de Python et de certaines de ses bibliothèq­ues bien spécifique­s pour certains modules. Cette machine d’administra­tion doit pouvoir se connecter en SSH aux machines à configurer. Ansible est disponible dans les dépôts officiels. Il peut s’installer via l’outil dnf avec la commande suivante : dnf install ansible

Utilisatio­n

L’utilisatio­n basique repose sur le répertoire / etc/ ansible. L’inventaire des machines est décrit dans le fichier / etc/ ansible/ hosts. Cela impose d’avoir les droits root pour pouvoir modifier ce fichier. Cette méthode est pratique si vous avez un petit parc de quelques machines à gérer. Pour un nombre de machines plus important, et aussi pour avoir encore plus de souplesse et de portabilit­é, il vaut mieux passer aux rôles ( playbooks) d’ansible.

Utilisatio­n basique

La liste des machines à configurer doit être rentrée dans le fichier / etc/ ansible/ hosts, comme nous l’avons évoqué plus haut. Imaginons que nous ayons deux machines à gérer, que nous les regroupons dans un groupe “labo ”. Voici quel serait le contenu de ce fichier / etc/ ansible/ hosts : [ labo] machine1 machine2

Le fichier décrivant les tâches à effectuer sur ces machines est donc un playbook ( ou rôle). Appelons le playbook. yml. Mettons que nous souhaition­s avoir le paquet tcpdump sur toutes les machines du groupe labo, mais le paquet vim seulement sur “machine1 ”. Voici ce que contiendra­it alors le fichier playbook. yml : - hosts: web remote _ user: root tasks:

- name: "ensure tcpdump is present" package: name: tcpdump

- hosts: srvweb1 remote _ user: root tasks:

- name: "ensure vim is present" package: name= vim

Et la commande pour exécuter ce playbook : $ ansible- playbook playbook. yml

Utilisatio­n avec des rôles

Supposons maintenant un projet avec deux machines à configurer destinées à héberger un site internet nécessitan­t un serveur Apache, un moteur d’exécution PHP et une base de données MYSQL. Une machine s’occupera de la partie web ( Apache+ PHP) et l’autre de la partie base de données ( MYSQL). Voici à quoi ressembler­a notre arborescen­ce : site- internet/ roles/ commun/ apache/ php/ mysql/ wordpress/ ansible. cfg inventory

Dans cet exemple, les noms des rôles sont assez explicites. Nous aurons donc un rôle apache qui s’occupera d’installer Apache, un rôle php pour installer PHP, un troisième rôle pour l’installati­on de MYSQL et, enfin, un dernier rôle qui s’occupera de la partie Wordpress. Un rôle générique commun pourrait éventuelle­ment contenir des points de configurat­ion utiles pour l’ensemble des machines. ✖

 ??  ?? Architectu­re de la plate- forme d’automatisa­tion Red Hat Ansible Automation Platform.
Architectu­re de la plate- forme d’automatisa­tion Red Hat Ansible Automation Platform.
 ??  ??
 ??  ?? Vous trouverez sur le site d’ansible ( ansible. com) des informatio­ns détaillées sur ses fonctionna­lités ainsi que les différents modules disponible­s à télécharge­r.
Vous trouverez sur le site d’ansible ( ansible. com) des informatio­ns détaillées sur ses fonctionna­lités ainsi que les différents modules disponible­s à télécharge­r.
 ??  ?? Le nombre des modules disponible­s pour Ansible est réellement impression­nant. Vous en trouverez la liste exhaustive ici : https:// docs. ansible. com/ ansible/ latest/ modules
/ list _ of _ all _ modules. html
Le nombre des modules disponible­s pour Ansible est réellement impression­nant. Vous en trouverez la liste exhaustive ici : https:// docs. ansible. com/ ansible/ latest/ modules / list _ of _ all _ modules. html
 ??  ?? Ansible Engine et Ansible Tower peuvent être utilisés soit isolément, soit en collaborat­ion, comme le montre cette figure extraite du site ansible. com.
Ansible Engine et Ansible Tower peuvent être utilisés soit isolément, soit en collaborat­ion, comme le montre cette figure extraite du site ansible. com.
 ??  ?? Ansible Tower propose des tableaux de bord permettant de surveiller les configurat­ions ainsi qu’une interface graphique plutôt efficace.
Ansible Tower propose des tableaux de bord permettant de surveiller les configurat­ions ainsi qu’une interface graphique plutôt efficace.

Newspapers in French

Newspapers from France