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.