Par Maxime Jumelle
CTO & Co-Founder
Publié le 9 mai 2023
Catégorie Cloud / DevOps
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.
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.
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.
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.
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.
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.
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
28 févr. 2024
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
CTO & Co-Founder
Lire l'article
23 févr. 2024
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
CTO & Co-Founder
Lire l'article
16 févr. 2024
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
CTO & Co-Founder
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2025 Blent.ai | Tous droits réservés