← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 9 mai 2023

Catégorie Cloud / DevOps

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

Ansible est un outil open source de gestion de configuration, d'automatisation et de déploiement d'application. Il est conçu pour simplifier et automatiser la gestion de configurations complexes sur des infrastructures distribuées. Devenu rapidement un incontournable dans le monde DevOps ces dernières années, il a été adopté par de nombreuses entreprises, à la fois en raison de sa simplicité d'utilisation, de configuration, mais aussi car sa personnalisation lui permet d'être autonome quel que soit l'environnement utilisé (Cloud public, On-Premise, etc).

Dans cet article, nous allons présenter dans son ensemble Ansible, comment il fonctionne, et proposer des exemples de playbooks, qui constituent la base pour automatiser la configuration de serveurs.

Fonctionnement d'Ansible

Ansible utilise un modèle client-serveur pour automatiser les tâches sur les nœuds cibles. Un des avantages d'Ansible est qu'il est agentless, ce qui signifie qu'il ne nécessite pas l'installation d'une application sur un ordinateur ou un serveur cible. Pour exécuter ses tâches, Ansible utilise donc uniquement le protocole SSH pour communiquer et effectuer les tâches requises. Par conséquence, cela améliore sa portabilité et permet son utilisation sur de nombreuses plateformes, ce qui permet de gérer des systèmes très variés.

Ansible utilise un langage simple basé sur le format YAML (Yet Another Markup Language) pour décrire les configurations système, les tâches (commandes à effectuer sur les hôtes distants) et les rôles à exécuter sur les nœuds cibles, et utilise le protocole SSH pour se connecter aux machines distantes et effectuer les tâches requises.

L'autre avantage d'Ansible est sa facilité d'utilisation et sa flexibilité. Puisqu'il ne nécessite pas d'installation d'agent sur les nœuds cibles, ce qui permet de déployer rapidement et facilement des configurations sur des machines distantes, des serveurs cloud et des conteneurs. En outre, Ansible dispose d'une large communauté d'utilisateurs actifs, ce qui facilite la recherche et l'adoption de bonnes pratiques et de solutions prêtes à l'emploi pour les cas d'utilisation courants.

Ansible dispose de nombreuses fonctionnalités, qui en font un outil très apprécié pour les DevOps, architectes, développeurs et même Data Engineers. Il y a ainsi de nombreux cas d'usages où Ansible se révèle puissant.

  • Déploiement de configurations : Ansible permet de décrire les configurations système à l'aide de fichiers YAML, ce qui facilite leur gestion et leur déploiement. Il est possible de configurer des paramètres système, des packages logiciels, des fichiers de configuration et bien plus encore.
  • Gestion de la sécurité : il peut être utilisé pour automatiser la mise à jour des correctifs de sécurité et la configuration des règles de pare-feu, ce qui contribue à maintenir un environnement sécurisé.
  • Automatisation de tâches : sûrement l'une des utilisations d'Ansible les plus courantes, il est adapter pour automatiser des tâches répétitives, telles que la configuration des utilisateurs, la sauvegarde des données, la configuration des DNS et bien plus encore.
  • Déploiement multi-environnements : Ansible permet de déployer des configurations sur différents environnements, tels que le développement, la préproduction et la production, en utilisant des fichiers de configuration différents pour chaque environnement.
  • Intégration continue : enfin, il peut être intégré à des outils d'intégration continue tels que Jenkins pour automatiser la création, le test et le déploiement de logiciels.

De plus, Ansible dispose également d'une large communauté d'utilisateurs actifs, avec de nombreux contributeurs et utilisateurs d'un projet open source. Cela a permis la création de plusieurs extensions et modules pour étendre les fonctionnalités et adapter Ansible aux différents environnements.

Enfin, il peut être intégré avec différents outils et plateformes grâce à son API REST et à ses bibliothèques de modules pour l'utiliser dans différents langages de programmation tels que Python, par exemple.

Inventaires

Un inventaire Ansible est une liste de tous les hôtes ou serveurs que l'on souhaite gérer avec Ansible. Cet inventaire est un fichier texte, généralement nommé inventory ou hosts, qui contient une liste des noms d'hôtes ou des adresses IP des machines que l'on souhaite gérer.

Prenons comme exemple un site Web Wordpress qui est exécuté sur deux serveurs différents. Ce site Wordpress va utiliser une base de données PostgreSQL qui est exécutée sur un seul serveur. Au total, nous aurions trois serveurs, et le fichier d'inventaire pourrait ressembler à cela.

[web]
webserver1.example.com
webserver2.example.com

[database]
dbserver1.example.com

[web:vars]
http_port=80
max_clients=200

[database:vars]
db_port=5432
db_name=mydb

Dans cet exemple, les groupes web et database contiennent les noms d'hôtes des serveurs associés à chaque groupe. Les variables d'environnement sont spécifiées sous chaque groupe, avec des variables spécifiques à chaque groupe. Par exemple, le groupe web a deux variables définies http_port et max_clients, tandis que le groupe database a deux variables db_port et db_name.

Les variables d'environnement peuvent être utilisées par la suite dans les commandes Ansible pour configurer les paramètres spécifiques à chaque groupe ou chaque hôte. Les groupes peuvent être utilisés pour organiser les serveurs en fonction de leur rôle ou de leur fonction, ce qui facilite la gestion de la configuration et du déploiement à grande échelle.

Par exemple, dans le cas de cet inventaire, on procèderait aux mêmes installations sur les deux serveurs du groupe web, car il s'agit du même composant applicatif (à savoir Wordpress). En revanche, pour le serveur de base de données, ce serait une toute autre installation, d'où le fait de créer un groupe séparé database. Ainsi, avec Ansible, on pourra spécifier quelles sont les actions à mettre en place pour chacun des groupes présents dans l'inventaire.

Playbooks

Les playbooks Ansible sont des fichiers YAML qui permettent de décrire les étapes à suivre pour effectuer une tâche de gestion ou un ensemble de tâches sur un ou plusieurs hôtes cibles, spécifiés dans un inventaire. Les playbooks fournissent une structure pour la gestion et l'automatisation de la configuration des systèmes.

Les playbooks peuvent inclure plusieurs tâches, chacune décrivant une action spécifique à effectuer sur les hôtes distants. Les tâches sont organisées en séquences logiques appelées rôles. Les rôles permettent d'organiser les tâches en fonction de leur objectif ou de leur fonction, ce qui facilite la maintenance et la réutilisation du code. Ils permettent également de définir des variables d'environnement et des valeurs par défaut pour les tâches, ainsi que des conditions pour exécuter ou sauter des tâches en fonction de l'état des hôtes ou de leur environnement.

Les playbooks sont exécutés en utilisant la commande ansible-playbook, qui permet de spécifier l'inventaire et le fichier de playbook à utiliser. Il s'agit de l'un des éléments clés d'Ansible car ils permettent de décrire de manière détaillée la configuration et le déploiement des systèmes, ce qui facilite la maintenance et l'évolutivité des environnements de production. En pratique, on n'utilise que très peu la CLI ansible et on utilise très majoritairement les playbooks Ansible, car ils permettent de séquencer facilement les étapes, de versionner efficacement avec Git, et surtout d'améliorer la lisibilité lorsque l'on doit effectuer des dizaines (voir centaines) de commandes.

Prenons comme exemple un Playbook où nous allons installer Nginx (un serveur Web) sur un hôte distant.

---
- name: Install and configure Nginx
  hosts: web
  become: true
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
        update_cache: true

    - name: Create user and group
      block:
        - name: Create group
          group:
            name: webadmin
            state: present
        - name: Create user
          user:
            name: webadmin
            group: webadmin
            shell: /bin/bash

    - name: Copy Nginx configuration file
      copy:
        src: nginx.conf
        dest: /etc/nginx/nginx.conf
        owner: webadmin
        group: webadmin
        mode: 0644

    - name: Restart Nginx
      service:
        name: nginx
        state: restarted

Ce playbook contient les éléments suivants :

  • name : nom du playbook.
  • hosts : spécifie le groupe d'hôtes cibles pour le playbook (ici tous les hôtes du groupe web).
  • become : spécifie avec true que le playbook doit être exécuté avec les privilèges administrateurs.
  • tasks : liste des tâches à effectuer sur les hôtes cibles.

Chaque tâche est alors exécutée dans l'ordre, en suivant pour chacune d'entre-elles les différents paramètres attribués.

Alternatives à Ansible

Bien évidemment, Ansible n'est pas le seul outil sur le marché : il existe plusieurs alternatives pour la gestion de configuration et l'automatisation des tâches sur les infrastructures distribuées.

  • Chef : il s'agit d'un autre outil open source de gestion de configuration et d'automatisation, qui utilise un langage de configuration basé sur Ruby. Chef utilise un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • Puppet : c'est un autre outil de gestion de configuration open source, qui utilise un langage de configuration basé sur Ruby. Puppet utilise également un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • SaltStack est un autre outil open source de gestion de configuration et d'automatisation, qui utilise un langage de configuration basé sur YAML. SaltStack utilise un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • Kubernetes peut aussi être vu comme une alternative à Ansible du fait de la gestion de conteneurs, qui permet de gérer des applications conteneurisées sur des infrastructures distribuées.

Malgré tout, Ansible reste l'outil de prédilection pour la configuration automatisée de serveurs.

Vous souhaitez vous former au Cloud / DevOps ?

Articles similaires

Blog

28 févr. 2024

Cloud / DevOps

Pour de nombreuses entreprises, innover chaque jour en proposant des applications à ses utilisateurs est un sujet primordial. Pour autant, cette course au déploiement continu de nouvelles applications nécessite des compétences bien particulières sur les architectures Cloud, l'automatisation de projets et la supervision. C'est à partir de ce moment qu'intervient le rôle de l'ingénieur DevOps dans les entreprises.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

23 févr. 2024

Cloud / DevOps

Dans le monde du DevOps, les conteneurs sont rapidement devenus des incontournables, aussi important que les machines virtuelles. Des plateformes de conteneurisation comme Docker ont permis de simplifier et d'accélérer la création d'image et l'exécution de conteneurs sur différents systèmes, à portée de tous.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

16 févr. 2024

Cloud / DevOps

Dans l'approche GitOps, il existe de nombreux outils permettant d'exécuter des pipelines CI/CD : certains se concentrent uniquement sur la partie intégration continue, d'autres avec le déploiement en plus. S'il y en a un qui est considéré comme l'un des plus matures et des plus robustes, c'est bien GitLab.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article