EXPOSÉ SUR ANSIBLE
INTRODUCTION
Dans notre vie quotidienne, nous rencontrons souvent des taches repetitives et fastidieuses, comme par
exemple se brosser les dents tous les matins, faire notre lit, prendre notre douche et aussi preparer notre
petit déjeuner tous les matins. Prenant le cas de la préparation de notre petit déjeuner, imaginons si
nous pouvions automatiser ce processus en programmant notre grille-pain pour qu’il se déclanche à une
heure précise et que notre cafétière démarre juste avant notre réveil,sans que nous ayons à nous en
soucier. De la meme manière, dans le monde informatique, Ansible, un outil open-source de gestion de
configuration et d'automatisation, agit comme un assistant numérique pour faciliter la gestion de
plusieurs ordinateurs simultanément. Nous lui donnons des instructions sur ce que nous voulons
accomplir sur ces machines, telles que l'installation de logiciels ou la configuration de paramètres
spécifiques, et il s'occupe de les exécuter de manière efficace et coordonnée.
1. Présentation d'Ansible
1.a Origine et historique
Ansible a été créé par Michael DeHaan en 2012 et est devenu un projet open-source sous la direction
de Red Hat. Il est devenu rapidement populaire en raison de sa simplicité et de son efficacité dans
l'automatisation des tâches informatiques.
1.b Architecture et composants
Liberation SerifComme le montre la figure précédente, la plupart des environnements Ansible
comportent trois
composants principaux :
Nœud de contrôle: Un système sur lequel Ansible est installé et à partir duquel ces opérations sont
lancées. Il contient l'inventaire des serveurs gérés, les playbooks (instructions pour les tâches) et les
modules .
Les nœuds gérés (Managed Nodes): sont les serveurs sur lesquels Ansible exécute les tâches. Les
modules Ansible sont utilisés pour communiquer avec ces nœuds via SSH ou d'autres protocoles.
Inventaire: Un inventaire dans Ansible, c'est une liste des machines que tu veux gérer avec Ansible.
Cela peut inclure des serveurs, des ordinateurs ou d'autres appareils sur lesquels tu veux effectuer des
opérations. L'inventaire contient des informations telles que les adresses IP, les noms d'hôtes, les
groupes de machines, et éventuellement des variables associées à chaque machine. Cela permet à
Ansible de savoir sur quels appareils il doit travailler et comment les atteindre. En résumé, l'inventaire
est comme la liste de contrôle que tu donnes à Ansible pour lui dire où il doit faire son travail.
II. Comprendre les concepts fondamentaux
1. Playbooks : Ce sont des fichiers YAML qui définissent un ensemble de tâches à exécuter sur un
ensemble de machines cibles.
Exemple de playbook:
Ce script Ansible est conçu pour automatiser l'installation de Kubernetes in Docker (KIND) sur un hôte
Ubuntu 20.04. Voici une explication détaillée de chaque partie :
---: Cela marque le début du fichier YAML, indiquant qu'il s'agit d'un fichier de configuration YAML.
name: Installation de KIND sur Ubuntu 20.04: Ceci est un en-tête de la tâche Ansible qui fournit une
description de la tâche à effectuer.
hosts: 192.168.31.152: Spécifie l'hôte sur lequel cette tâche Ansible sera exécutée. Dans ce cas, la tâche
sera exécutée sur l'hôte avec l'adresse IP 192.168.31.152.
become: yes: Cette option indique à Ansible d'exécuter les tâches avec des privilèges d'administration
(sudo).
vars:: Cet élément permet de définir des variables qui seront utilisées dans la tâche.
ansible_ssh_private_key_file: /home/yen/.ssh/id_rsa: Spécifie le chemin vers la clé privée SSH utilisée
pour se connecter à l'hôte distant.
ansible_become_pass: yann2024: Mot de passe permettant de devenir super-utilisateur lors de
l'exécution de commandes en tant que sudo.
tasks:: Cette section définit les tâches spécifiques à effectuer sur l'hôte distant.
name: Installation de Docker: Cette tâche installe Docker en utilisant le module apt.
name: Installation de curl: Cette tâche installe le paquet curl avec apt.
name: Téléchargement de KIND avec wget: Cette tâche utilise la commande wget pour télécharger le
binaire KIND à partir de l'URL spécifiée.
name: Attribution des droits d'exécution à KIND: Cette tâche utilise le module file pour définir les
permissions d'exécution sur le binaire KIND.
Dans l'ensemble, ce script automatise le processus d'installation de Docker, de curl et de KIND sur un
hôte Ubuntu 20.04, en utilisant Ansible pour gérer les opérations à exécuter sur l'hôte distant de
manière cohérente et reproductible.
NB: state: present: C'est l'état dans lequel on veut que le paquet soit. Ici, present signifie qu'Ansible
doit s'assurer que le paquet est installé sur l'hôte cible. Si le paquet est déjà installé, Ansible ne fera
rien. Si le paquet n'est pas installé, Ansible le téléchargera et l'installera.
Modules : Les modules sont des programmes exécutables par Ansible sur les machines cibles pour
effectuer des actions spécifiques, comme installer des logiciels, gérer des fichiers, démarrer des
services, etc. Ils constituent l'interface avec le système d'exploitation ou les applications sur lesquels
Ansible agit.Donc, quand tu écris un playbook Ansible et que tu dis à Ansible ce que tu veux faire, tu
utilises en fait ces modules pour accomplir ces tâches spécifiques sur les ordinateurs. Les modules sont
comme les mains d'Ansible - ils font le travail réel sur les machines que tu gères.
Dans cet exemple :
Le module utilisé est apt, qui est spécifique aux systèmes basés sur Debian (comme Ubuntu) et est
Les modules Ansible utilisés sur Ubuntu peuvent varier en fonction des tâches et des besoins
spécifiques, mais voici une liste de modules couramment utilisés sur des systèmes Ubuntu :
apt : Gère l'installation, la mise à jour et la suppression de paquets sur des systèmes basés sur
Debian, y compris Ubuntu.
yaml
Copy code
- name: Installe un paquet
apt:
name: mon_paquet
state: present
service : Gère les services système, permettant de démarrer, arrêter, ou redémarrer des services.
yaml
Copy code
- name: Redémarre le service
service:
name: mon_service
state: restarted
file : Modifie les fichiers et les répertoires, change les permissions et les propriétaires.
yaml
Copy code
- name: Crée un répertoire
file:
path: /chemin/vers/repertoire
state: directory
copy : Copie des fichiers depuis l'hôte de contrôle vers les nœuds gérés.
yaml
Copy code
- name: Copie un fichier
copy:
src: /chemin/vers/source
dest: /chemin/vers/destination
template : Crée des fichiers de configuration en utilisant des modèles Jinja2.
yaml
Copy code
- name: Crée un fichier de configuration
template:
src: template.j2
dest: /chemin/vers/destination
user : Gère les comptes d'utilisateurs sur les nœuds.
yaml
Copy code
- name: Crée un utilisateur
user:
name: nom_utilisateur
state: present
lineinfile : Modifie une ligne dans un fichier.
yaml
Copy code
- name: Ajoute une ligne à un fichier
lineinfile:
path: /chemin/vers/fichier
line: 'nouvelle_ligne'
shell/command : Exécute des commandes shell sur les nœuds.
yaml
Copy code
- name: Exécute une commande shell
shell: |
ma_commande_shell
Ces exemples illustrent quelques-uns des modules Ansible couramment utilisés sur des systèmes
Ubuntu. Vous pouvez adapter ces modules en fonction de vos besoins spécifiques et des tâches que
vous souhaitez automatiser.
III. Fonctionnalités et Avantages d'Ansible
Gestion de configuration : Ansible aide à garder tout en ordre sur tes ordinateurs et serveurs, en
s'assurant que tout est bien configuré comme tu le veux, sans que tu aies à tout faire manuellement.
Exemple : Tu veux t'assurer que tous les serveurs dans ton réseau ont la même configuration de
sécurité. Avec Ansible, tu crées un playbook décrivant cette configuration, comme quelles règles de
pare-feu utiliser, et tu le fais exécuter sur tous tes serveurs. Ansible s'occupe d'appliquer ces
configurations de manière cohérente.
Déploiement d'applications : Quand tu veux installer de nouveaux programmes ou applications sur tes
ordinateurs, Ansible peut le faire pour toi rapidement et sans souci. Il s'occupe de tout, de l'installation
à la configuration.
Exemple : Tu as besoin d'installer un serveur web Apache sur plusieurs machines. Avec Ansible, tu
crées un playbook qui spécifie l'installation d'Apache, la configuration des sites web, et tout ce dont tu
as besoin. En lançant ce playbook, Ansible déploie Apache sur toutes les machines concernées, sans
que tu aies à faire chaque étape manuellement.
Orchestration d'infrastructures : Imagine que tu as plein d'ordinateurs et de serveurs, et que tu veux
faire des choses compliquées avec eux, comme les mettre à jour tous en même temps. Ansible peut
t'aider à coordonner tout cela facilement.
Exemple : Imaginons que tu veux mettre à jour tous les serveurs de ton centre de données en même
temps. Avec Ansible, tu créés un playbook qui gère la coordination de la mise à jour sur tous les
serveurs. Ansible s'assure que la mise à jour est effectuée de manière synchronisée sur tous les nœuds,
évitant ainsi tout problème de compatibilité.
Automatisation des processus IT : Les tâches répétitives et ennuyeuses en informatique ? Ansible les
gère pour toi. Il peut automatiser toutes sortes de choses, comme les sauvegardes, les mises à jour
logicielles et bien plus encore.
Exemple : Chaque nuit, tu veux sauvegarder toutes les bases de données de tes serveurs. Ansible peut
être configuré pour exécuter automatiquement un playbook qui se connecte à chaque serveur, lance le
script de sauvegarde, et stocke les sauvegardes dans un emplacement centralisé. Cela évite que tu aies à
effectuer cette tâche manuellement chaque jour
Avantages par rapport à d'autres outils d'automatisation :
➢ Facile à utiliser : Ansible est simple à apprendre et à utiliser, même si tu n'as pas beaucoup
d'expérience en informatique.
➢ Pas besoin d'agents : Contrairement à certains autres outils, tu n'as pas besoin d'installer de
petits programmes supplémentaires sur tes ordinateurs pour qu'Ansible fonctionne.
➢ Ça s'intègre bien avec tout : Ansible peut travailler avec d'autres outils et systèmes que tu
utilises déjà, ce qui le rend très pratique.
➢ Beaucoup de gens l'utilisent : Il y a beaucoup de gens dans le monde qui utilisent Ansible, donc
si tu as des questions ou si tu as besoin d'aide, tu peux facilement trouver des réponses.
➢ Ça marche toujours pareil : Les tâches que tu lui demandes de faire sont toujours les mêmes,
même si tu les fais plusieurs fois. Cela évite les problèmes et les erreurs.
En résumé, Ansible est comme ton assistant personnel en informatique qui te permet de faire plein de
choses cools sans te casser la tête.
Contexte et Besoins en Automatisation
Au fil du temps, les entreprises ont de plus en plus besoin d'automatiser leurs tâches. Autrefois, elles se
contentaient de processus simples, mais aujourd'hui, elles doivent automatiser une grande variété de
choses, comme la gestion de leurs ordinateurs ou la fourniture de services à leurs clients. Cela
s'explique par le fait qu'elles doivent être plus rapides, précises et flexibles pour rester compétitives
dans un marché de plus en plus concurrentiel.
Le fait de compter sur des tâches manuelles ou partiellement automatisées peut poser des problèmes. Il
y a un risque d'erreurs humaines, les opérations peuvent être moins efficaces, ce qui coûte cher en
main-d'œuvre, et les déploiements peuvent être retardés. De plus, il est difficile de suivre les processus
manuels, ce qui peut entraîner des résultats incohérents et une baisse de productivité. C'est pourquoi il
est devenu très important pour les entreprises de passer à une automatisation plus complète et efficace
pour relever ces défis et rester compétitives.
.. Cas d'Utilisation
Provisionnement de serveurs : Ansible peut aider à mettre en place de nouveaux serveurs en
automatisant les étapes d'installation du système d'exploitation, de configuration réseau et d'autres
paramètres initiaux.
Configuration de logiciels : Une fois que les serveurs sont en place, Ansible peut configurer les
logiciels nécessaires, comme les serveurs web, les bases de données ou les services de messagerie, en
s'assurant qu'ils fonctionnent correctement et sont correctement paramétrés.
Déploiement d'applications : Ansible peut automatiser le déploiement d'applications sur les serveurs,
en installant les fichiers nécessaires, en configurant les environnements et en lançant les services
applicatifs.
Gestion des mises à jour et des correctifs : Ansible peut gérer les mises à jour logicielles et les
correctifs de sécurité sur les serveurs, en s'assurant que les systèmes sont toujours à jour et sécurisés.
Gestion des changements et des configurations : Ansible peut aider à gérer les changements de
configuration sur les serveurs, en garantissant que les modifications apportées aux logiciels ou à
l'infrastructure sont effectuées de manière cohérente et contrôlée.
Intégration avec des outils de développement et d'exploitation : Ansible peut être intégré à d'autres
outils utilisés dans les opérations informatiques, comme les outils de gestion de versions (Git), les
systèmes de suivi des problèmes (Jira) ou les outils de surveillance (Nagios), pour automatiser des
workflows complexes.
EXERCICE D’APPLICATION : tp-installation-kind-docker-avec-ansible
1. je créée un fichier inventery.yaml
2. après je créée un fichier playbook.yaml
3. Pingez all dans votre inventaire à travers cette commande: ansible all -m ping -i inventery.yaml
4. Cette commande ansible-playbook est utilisée pour exécuter des playbooks Ansible. Voici le rôle
de chaque composant :ansible-playbook -i inventery.yaml playbook.yaml
ansible-playbook: C'est le binaire qui exécute les playbooks Ansible.
-i inventaire.yaml: Cela spécifie l'inventaire à utiliser. L'inventaire contient une liste d'hôtes sur
lesquels les tâches doivent être exécutées.
playbook.yaml: Il s'agit du fichier YAML qui contient la définition des tâches à exécuter sur les hôtes
spécifiés dans l'inventaire. Ce fichier contient généralement des tâches organisées en rôles, chacun
décrivant un ensemble d'actions à effectuer sur un groupe spécifique d'hôtes.