Mastering Ansible: A Step-by-Step Tutorial

Nous allons directement plonger dans les concepts et composants fondamentaux qui vous aideront à maîtriser Ansible. Ce tutoriel suppose que vous avez déjà installé Ansible sur votre système et que vous avez une compréhension de base de ce qu’est Ansible.

Configuration de l’environnement#

Génération de clés SSH#

Si ce n’est pas déjà fait, générez une paire de clés SSH sur votre nœud de contrôle Ansible.

ssh-keygen -t rsa

Distribution des clés SSH#

Copiez la clé publique SSH sur tous vos nœuds cibles.

ssh-copy-id username@target_host

Remplacez username par l’utilisateur approprié et target_host par l’adresse IP ou le nom d’hôte du nœud cible.

Fichiers d’inventaire#

Inventaire simple#

Créez un fichier d’inventaire simple avec l’extension .ini.

# my_inventory.ini
[web]
192.168.1.2

[db]
192.168.1.3

Inventaire dynamique#

Vous pouvez également utiliser des scripts d’inventaire dynamique. Ansible prend en charge les scripts qui produisent du JSON.

#!/usr/bin/python
import json
inventory = {
  "web": ["192.168.1.2"],
  "db": ["192.168.1.3"]
}
print(json.dumps(inventory))

Commandes ad-hoc#

Exécutez des commandes directement sur vos nœuds.

ansible web -i my_inventory.ini -m ping

Cela exécutera le module ping sur tous les nœuds du groupe [web] dans my_inventory.ini.

Rédaction de playbooks#

Votre premier playbook#

Créez un fichier YAML nommé my_first_playbook.yml.

---
- name: Mon premier playbook
  hosts: web
  tasks:
    - name: Installer Nginx
      apt:
        name: nginx
        state: present

Exécutez le playbook avec la commande ansible-playbook.

ansible-playbook -i my_inventory.ini my_first_playbook.yml

Playbook multi-tâches#

Vous pouvez avoir plusieurs tâches dans un playbook.

---
- name: Configuration du serveur web
  hosts: web
  tasks:
    - name: Installer Nginx
      apt:
        name: nginx
        state: present
    - name: Démarrer le service Nginx
      service:
        name: nginx
        state: started

Rôles et playbooks basés sur les rôles#

Les rôles vous permettent d’organiser vos playbooks en composants réutilisables.

ansible-galaxy init web-server

Cela créera un répertoire de rôle web-server avec divers sous-répertoires (tasks, vars, templates, etc.).

Utilisation des rôles dans un playbook#

---
- name: Playbook basé sur les rôles
  hosts: web
  roles:
    - web-server

Variables de rôle#

Dans web-server/vars/main.yml, définissez quelques variables.

http_port: 80
https_port: 443

Dans web-server/tasks/main.yml, utilisez ces variables.

---
- name: Configurer Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  vars:
    http_port: "{{ http_port }}"
    https_port: "{{ https_port }}"

Variables et faits#

Variables de playbook#

Définissez des variables dans vos playbooks.

---
- name: Exemple de variable
  hosts: web
  vars:
    my_variable: "Bonjour, le monde !"

Collecte de faits#

Ansible peut collecter des faits (informations système) sur les nœuds cibles.

---
- name: Collecte de faits
  hosts: all
  tasks:
    - setup:

Conditions et boucles#

Conditions#

Exécutez des tâches de façon conditionnelle.

---
- name: Playbook conditionnel
  hosts: all
  tasks:
    - name: Installer Apache si le système est Ubuntu
      apt:
        name: apache2
        state: present
      when: ansible_facts['os_family'] == "Debian"

Boucles#

Exécutez des tâches en boucle.

---
- name: Exemple de boucle
  hosts: all
  tasks:
    - name: Installer plusieurs paquets
      apt:
        name: "{{ item }}"
        state: present
      loop:
        - git
        - vim
        - curl

Modèles et fichiers#

Notions de base des modèles#

Ansible utilise Jinja2 pour les modèles. Créez un fichier modèle avec l’extension .j2.

# my_template.j2
Bonjour, {{ my_variable }} !

Utilisation des modèles dans les tâches#

---
- name: Exemple de modèle
  hosts: web
  tasks:
    - name: Déployer le modèle
      template:
        src: my_template.j2
        dest: /tmp/my_template.txt
  vars:
    my_variable: "Monde"

Concepts avancés#

Balises#

Utilisez des balises pour exécuter sélectivement des tâches spécifiques.

---
- name: Exemple de balise
  hosts: all
  tasks:
    - name: Installer Nginx
      apt:
        name: nginx
        state: present
      tags: ["web"]

Exécutez uniquement les tâches balisées.

ansible-playbook -i my_inventory.ini my_playbook.yml --tags "web"

Gestion des erreurs#

Ajoutez une gestion des erreurs à vos playbooks.

---
- name: Exemple de gestion des erreurs
  hosts: all
  tasks:
    - name: Essayer d'installer un paquet
      apt:
        name: some-nonexistent-package
        state: present
      ignore_errors: true

Dépannage et débogage#

Sortie verbeuse#

Exécutez les commandes Ansible avec -vvv pour une sortie verbeuse.

ansible-playbook -i my_inventory.ini my_playbook.yml -vvv

Module debug#

Utilisez le module debug pour afficher des variables.

---
- name: Exemple de débogage
  hosts: all
  tasks:
    - debug:
        var: my_variable

Et voilà, notre tutoriel approfondi sur la maîtrise d’Ansible est terminé. J’espère que ce guide vous a aidé à naviguer à travers les divers composants et subtilités d’Ansible, vous permettant de gérer et d’automatiser votre infrastructure avec aisance.