Ansible : notre plateforme préférée pour le déploiement automatisé !

Ansible est une solution qui permet de faire principalement du déploiement automatisé et de la configuration automatisée. Ansible tourne avec Python, Powershell et Ruby et sert à automatiser la gestion des serveurs…
Camille.jpg
Camille REGNAULT, L'animatrice du podcast ITMis à jour le 28 Nov 2019
AXOPEN_Blog_Ansible.jpg

Vous gérez plusieurs serveurs et en avez marre de perdre du temps dans des tâches répétitives ? Ansible devrait vous plaire !

Ansible, c'est quoi ?

Ansible est une solution qui permet de faire principalement du déploiement automatisé et de la configuration automatisée. Ansible tourne avec Python, Powershell et Ruby et sert à automatiser la gestion des serveurs… Génial, non ?

A quelle problématique répond Ansible ?

Dans une infrastructure avec des dizaines et des dizaines de serveurs (pas nécessairement reliés entre eux), les serveurs sont souvent similaires. On retrouve bien souvent un serveur http (nginx, apache,…) et une base de données (PostgreSQLMoteur de gestion de base de données libre de droit., MySQLMoteur de gestion de base de données., MariaDB,…). Tout serveur a donc une « base » commune.

Malgré le fait que tous les serveurs aient une base commune, il faudra se connecter à la main à chacune de ces VM pour y effectuer des actions. Ce qui est assez long, ennuyeux et peut surtout être source d'erreurs !

Ansible a justement été créé pour automatiser ces tâches et vous faire gagner du temps !

Ansible, comment ça marche ?

Installation

Ansible s'installe sur un serveur simplement avec la commande « apt install ansible ». A l'intérieur d'Ansible, il existe plusieurs méthodes. De notre côté, on préconise d'avoir à côté un serveur git, pour versionner vos scripts de déploiement automatisé.

Ansible, ce n'est ni plus ni moins qu'une commande qu'on lance, qui a en paramètres l'ensemble des serveurs. Tous ces serveurs sont joignables normalement en SSH (sauf pour Windows).

Fichier répertoriant les serveurs

L'étape la plus longue du process se situe ici ! Il faut constituer à la main un fichier répertoriant vos différents serveurs. On doit :

  • Répertorier les IP
  • Répertorier les méthodes de connexion (avec identifiants et mots de passe ou clé SSH),
  • Etc.

Une fois le fichier créé, on le pousse à Ansible.

Généralement, (comme on adore avoir une seule source de données) on met ce fichier également dans notre Git pour suivre au fur et à mesure les ajouts et suppressions des serveurs.

Ecriture des scripts

Vous n'avez ensuite plus qu'à écrire les scripts que vous souhaitez exécuter en YAML, et à les transmettre à Ansible. Exemple : installer un Apache sur une grappe de serveurs, etc.

  • name: Check if apache2 is installed

    command: dpkg-query -W apache2

    register: package\_check\_deb

    failed\_when: package\_check\_deb.rc \> 1

    changed\_when: package\_check\_deb.rc == 1

  • name: Download apache2

    get_url:

    url={{ package\_url }};

    dest=/tmp/apache2

    when: package_check_deb.rc == 1

  • name: Install apache2

    apt: deb=/tmp/apache2

    sudo: true

    when: package\_check\_deb.rc == 1

On lance la procédure, puis tout se fait tout seul et ensuite, Ansible nous affiche les résultats.

ansible-playbook servers-group install_apache2.yml

« servers-group » étant soit :

  • Le nom du serveur
  • Le nom du groupe de serveur
  • Ou « all » pour l'ensemble de vos serveurs.

La remontée d'informations chez Ansible

A chaque script exécuté, Ansible remonte des informations :

  • Chaque exécution de scripts sur chaque serveur
  • Est-ce que ça s'est bien passé ?
  • Est-ce que c'était utile ou non ?
  • Préconisations : il vous donne des conseils ( ex : mettre à jour de Python) que vous pouvez appliquer ou non.

Ansible et le CI/CD

Pour faire du CI/CDProcessus d'automatisation : Intégration Continue et Déploiement Continu, on conseille de coupler Ansible avec des outils comme Jenkins ou Gitlab. Cela vous permettra de pouvoir piloter simplement les serveurs via des interfaces ! Et depuis peu, pour ceux qui veulent rester chez Ansible, vous pouvez utiliser Ansible Tower (qui expose en APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. Rest, les jobs Ansible).

Les points forts d'Ansible

Ansible dispose de plein de points forts :

  • Ça permet de gagner du temps : c'est bien plus rapide qu'à la main !
  • On peut paralléliser les déploiements/traitements : on peut par exemple publier 4 jobs en parallèle ! Ce qui fait gagner encore beaucoup de temps !
  • On évite les erreurs !
  • Communauté grande et active : on a la chance d'avoir une grande communauté active qui développe presque tous les jours des plugins pour nous aider dans nos développements (exemple d'un plugin qui nous a bien servi : plugin de compatibilité avec VMWare… merci à son auteur !)

Les points faibles d'Ansible :

  • Il faut une VM « puissante » , notamment si vous voulez faire tourner plusieurs process en parallèle.
  • Par défaut, Ansible affiche les mots de passe en clair… Par soucis de sécurité, il faut donc penser à installer de quoi crypter/ décrypter les mots de passe.

J'allais oublier, il faut savoir se servir de Linux et/ou Windows en fonction de votre infrastructure.

Alors Ansible, on adopte ?

C'est un grand OUI ! Pour l'avoir testé sur plusieurs projets, Ansible est juste génial ! Pour exemple, nous avions un build qui durait initialement plus d'une heure. En parallélisant les différents scripts avec Ansible, on a réussi à le faire descendre à moins de 30 minutes.

De plus, il n'y a pas de difficulté particulière pour installer et configurer Ansible, la seule difficulté est finalement de bien faire ses scripts.

Pour plus d'informations sur Ansible, je vous suggère d'aller voir la documentation Ansible et de demander conseil à la super communauté !