Aller au contenu

Playbooks Ansible

Les playbooks sont le cœur d’Ansible : des fichiers YAML qui orchestrent une série de tâches à exécuter sur des hôtes. Ils permettent d’automatiser des configurations complexes de manière reproductible.

Structure d’un playbook

Un playbook contient : - hosts : Les hôtes cibles (issus de l’inventaire). - tasks : Liste des tâches à exécuter. - vars : Variables pour personnaliser les tâches. - handlers : Tâches déclenchées par des notifications.

Exemple de playbook pour déployer un serveur web :

---
- name: Déployer un serveur web
  hosts: webservers
  become: yes
  vars:
    http_port: 80
  tasks:
    - name: Installer Apache
      apt:
        name: apache2
        state: present
        update_cache: yes
    - name: Copier fichier de configuration
      template:
        src: templates/httpd.conf.j2
        dest: /etc/apache2/sites-available/000-default.conf
      notify: Restart Apache
    - name: Démarrer Apache
      service:
        name: apache2
        state: started
        enabled: yes
  handlers:
    - name: Restart Apache
      service:
        name: apache2
        state: restarted

Fichier template (httpd.conf.j2)

Exemple de fichier template Jinja2 :

Listen {{ http_port }}
ServerName example.com
DocumentRoot /var/www/html

Exécuter un playbook

Exécutez avec :

ansible-playbook -i inventory.ini playbook.yml

Pour vérifier la syntaxe avant exécution :

ansible-playbook -i inventory.ini playbook.yml --syntax-check

Tâches conditionnelles

Vous pouvez exécuter des tâches sous certaines conditions :

- name: Installer Nginx si OS est Ubuntu
  apt:
    name: nginx
    state: present
  when: ansible_distribution == "Ubuntu"

Boucles

Utilisez des boucles pour installer plusieurs paquets :

- name: Installer plusieurs paquets
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - vim
    - git
    - curl

Gestion des erreurs

Ignorez les erreurs pour certaines tâches :

- name: Tenter une commande
  command: /bin/false
  ignore_errors: yes

Bonnes pratiques

  • Utilisez des noms explicites : Nommez vos tâches clairement.
  • Modularisez : Regroupez les tâches similaires dans des roles.
  • Testez en mode check : Utilisez --check pour simuler l’exécution :
    ansible-playbook -i inventory.ini playbook.yml --check
    
  • Documentez : Ajoutez des commentaires dans vos playbooks :
    # Ce playbook configure un serveur web
    - name: Déployer Apache
      hosts: webservers
      ...
    

Ressources