Table of Contents

Ansible est un outil d’automatisation open-source qui permet aux administrateurs système d’automatiser la gestion de l’infrastructure informatique. Il fournit un langage simple pour décrire l’état souhaité de l’infrastructure, et applique automatiquement cet état. Cela permet de réduire le temps et les efforts nécessaires à la gestion de systèmes complexes à grande échelle.

Si vous ne connaissez pas Ansible, cet article vous fournira une introduction à l’outil, y compris ses concepts de base et la manière de commencer à l’utiliser.

Introduction à Ansible

Ansible a été développé par Michael DeHaan en 2012 et acquis par Red Hat en 2015. Depuis, il est devenu l’un des outils d’automatisation les plus populaires de l’industrie.

Ansible utilise un langage simple et déclaratif appelé YAML (abréviation de “YAML Ain’t Markup Language”) pour définir l’état souhaité de l’infrastructure. Cela le rend facile à lire et à comprendre, même pour les non-programmeurs.

Ansible peut être utilisé pour automatiser un large éventail de tâches, notamment :

  • Gestion de la configuration
  • Déploiement d’applications
  • Livraison continue
  • Le provisionnement
  • Conformité à la sécurité
  • Orchestration

Démarrer avec Ansible

Pour commencer à utiliser Ansible, vous devez l’installer sur votre système. Ansible peut être installé sur un large éventail de systèmes d’exploitation, notamment Linux, macOS et Windows.

Pour installer Ansible sur Linux, en l’occurrence Ubuntu, vous pouvez utiliser les commandes suivantes :

sudo apt-get update
sudo apt-get install ansible -y

Sinon, vous pouvez utiliser les guides suivants pour installer ansible :

Une fois Ansible installé, vous pouvez vérifier qu’il fonctionne en exécutant la commande suivante :

ansible --version

Cela devrait afficher la version d’Ansible que vous avez installée.

Inventaire Ansible

La première étape de l’utilisation d’Ansible consiste à définir un inventaire. Un inventaire est une liste de serveurs qu’Ansible va gérer. Un inventaire peut être défini dans différents formats, notamment INI, YAML et JSON.

Voici un exemple de fichier d’inventaire au format INI :

[webservers]
webserver1.example.com
webserver2.example.com

[databases]
dbserver1.example.com
dbserver2.example.com

Ce fichier d’inventaire définit deux groupes de serveurs, les “serveurs web” et les “bases de données”, et énumère les noms d’hôte des serveurs de chaque groupe.

Manuels Ansible

Une fois que vous avez défini un inventaire, l’étape suivante consiste à définir un livre de jeu. Un playbook est un fichier YAML qui décrit un ensemble de tâches qu’Ansible doit exécuter sur les serveurs de l’inventaire.

Voici un exemple de playbook simple :

name: Install Nginx
hosts: webservers
become: yes

tasks:
    - name: Install Nginx package
        apt:
        name: nginx
        state: present

Ce playbook installe le serveur web Nginx sur tous les serveurs du groupe “webservers”.

Le playbook hosts spécifie le groupe de serveurs sur lequel le playbook doit être exécuté. Le paramètre become spécifie que les tâches doivent être exécutées avec des privilèges élevés (en utilisant le paramètre sudo ou su

Les tasks énumère les tâches individuelles que le playbook doit exécuter. Dans ce cas, il n’y a qu’une seule tâche, qui installe le paquetage Nginx à l’aide de la commande apt module.

Modules Ansible

Les modules Ansible sont des unités de code réutilisables qui peuvent être utilisées pour effectuer des tâches spécifiques. Ansible est livré avec un large éventail de modules intégrés, et de nombreux modules tiers sont également disponibles.

Voici quelques exemples de modules intégrés :

  • apt - Gérer les paquets sur les systèmes basés sur Debian
  • yum - Gérer les paquets sur les systèmes basés sur Red Hat
  • file - Gérer les fichiers
  • service - Gérer les services du système
  • user - Gérer les utilisateurs et les groupes
  • copy - Copier les fichiers de la machine de contrôle vers les serveurs gérés

Vous trouverez une liste complète des modules intégrés dans la section Ansible documentation

Rôles et structure des dossiers Ansible

Un rôle Ansible est un moyen d’organiser et de réutiliser des tâches et des configurations communes. Il s’agit d’une structure de répertoire qui contient des tâches, des gestionnaires, des modèles, des fichiers et d’autres ressources.

Voici un exemple de rôle Ansible simple pour l’installation et la configuration de Nginx :

roles/
└── nginx/
    ├── tasks/
    │   ├── main.yml
    ├── handlers/
    │   ├── main.yml
    ├── templates/
    │   ├── nginx.conf.j2
    ├── files/
    ├── vars/
    ├── defaults/
    ├── meta/

Dans cet exemple, le rôle nginx est un répertoire qui contient plusieurs sous-répertoires, chacun d’entre eux ayant une fonction spécifique :

  • tasks : contient les tâches qui seront exécutées par le rôle.
  • handlers : contient les gestionnaires que les tâches peuvent notifier.
  • templates : contient les modèles Jinja2 qui seront utilisés pour générer les fichiers de configuration pour Nginx.
  • files : contient tous les fichiers statiques nécessaires au rôle.
  • vars : contient les variables spécifiques au rôle.
  • defaults : contient les variables par défaut pour le rôle.
  • meta : contient des métadonnées sur le rôle, telles que ses dépendances.

Les rôles peuvent être facilement partagés et réutilisés dans plusieurs playbooks et projets.

Voici un exemple de fichier main.yml dans le répertoire tasks :

---
- name: Install Nginx
  apt:
    name: nginx
    state: present
  notify: restart nginx

- name: Enable Nginx
  systemd:
    name: nginx
    enabled: yes
    state: started

Cette tâche installe Nginx à l’aide du module apt et active et démarre le service Nginx à l’aide du module systemd. Elle notifie également le gestionnaire restart nginx, qui redémarre Nginx si des modifications ont été apportées à la configuration.

L’utilisation d’un rôle Ansible comme celui-ci peut simplifier le processus de gestion et de configuration de logiciels sur plusieurs serveurs ou environnements. En séparant les tâches, les gestionnaires, les modèles et les autres ressources dans une structure de répertoire unique, vous pouvez plus facilement gérer et réutiliser ces composants dans différents playbooks et projets.

Meilleures pratiques pour Ansible

Voici quelques bonnes pratiques à suivre lors de l’utilisation d’Ansible :

1. Utiliser le contrôle de version

Le stockage de vos playbooks et rôles Ansible dans un système de contrôle de version tel que Git est une bonne pratique qui peut vous aider à suivre les modifications et à collaborer avec d’autres personnes. Le contrôle de version fournit un historique des modifications apportées à votre base de code, ce qui vous permet de revenir aux versions précédentes si nécessaire. Il facilite également la collaboration avec d’autres personnes en partageant le code et en gérant les conflits.

2. Utilisez les rôles pour organiser vos playbooks

Les rôles sont un moyen puissant d’organiser vos playbooks et vos tâches Ansible. En regroupant les tâches connexes dans des rôles, vous pouvez rendre vos playbooks plus modulaires et réutilisables. Les rôles facilitent également le partage du code entre différents projets.

Voici un exemple de livre de jeu qui utilise un rôle pour installer et configurer Nginx :

name: Install and configure Nginx
hosts: webservers
become: yes
roles:
  - nginx

Ce playbook utilise un rôle appelé “nginx” pour installer et configurer Nginx sur le groupe d’hôtes “webservers”.

3. Utiliser des balises pour regrouper les tâches

Les balises peuvent être utilisées pour regrouper des tâches connexes dans vos playbooks Ansible. Cela facilite l’exécution de parties spécifiques d’un playbook, en particulier lorsque vous travaillez avec des playbooks complexes et volumineux.

Voici un exemple d’utilisation des balises dans un livre de jeu Ansible :

name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
    tags: nginx_install

  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    tags: nginx_config

Ce playbook comporte deux tâches, l’une pour l’installation de Nginx et l’autre pour la configuration de Nginx. Chaque tâche est associée à une balise, ce qui permet de n’exécuter que les tâches nécessaires.

4. Utiliser des variables pour rendre les playbooks plus flexibles

Les variables peuvent être utilisées pour rendre vos playbooks Ansible plus flexibles et réutilisables. En utilisant des variables, vous pouvez rendre vos playbooks plus génériques et les adapter à différents environnements.

Voici un exemple d’utilisation de variables dans un playbook Ansible :

name: Install and configure Nginx
hosts: webservers
become: yes

vars:
nginx_port: 80
nginx_user: www-data

tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service:
    name: nginx
    state: restarted

Ce playbook utilise des variables pour spécifier le port sur lequel Nginx doit écouter et l’utilisateur qui doit exécuter Nginx. Cela rend le playbook plus flexible et adaptable à différents environnements.

5. Testez vos playbooks

Tester vos playbooks Ansible est une bonne pratique qui peut vous aider à détecter les erreurs et à vous assurer que vos playbooks fonctionnent comme prévu. Un outil populaire pour tester les playbooks Ansible est Molecule.

Molecule est un cadre de test qui vous permet de tester vos playbooks de manière cohérente et automatisée. Molecule peut créer des machines virtuelles, appliquer votre playbook, puis vérifier que tout fonctionne comme prévu. Cela peut vous aider à détecter les erreurs et à vous assurer que vos playbooks fonctionnent correctement avant de les déployer en production.

Voici un exemple d’utilisation de Molecule pour tester un rôle Ansible :

molecule init role myrole
cd myrole
molecule test

Conclusion

Dans cet article, nous avons présenté Ansible, un puissant outil d’automatisation qui peut vous aider à gérer une infrastructure informatique complexe. Nous avons abordé les concepts de base d’Ansible, notamment les inventaires, les playbooks, les modules et les rôles.

Nous avons également abordé les meilleures pratiques d’utilisation d’Ansible, notamment l’utilisation du contrôle de version, l’organisation des playbooks avec des rôles, l’utilisation de balises et de variables, et le test de vos playbooks.

Si vous débutez avec Ansible, nous vous recommandons de commencer par expérimenter quelques playbooks simples et de développer progressivement vos compétences et vos connaissances au fil du temps. Avec de la pratique, vous serez en mesure d’automatiser les tâches d’infrastructure les plus complexes avec facilité !