Ansible

Le guide de survie

Ansible

L’Infrastructure as Code (IaC) est une approche de gestion de l’infrastructure informatique par du code plutôt que par des processus manuels. Cela permet de versionner, automatiser, tester et déployer les configurations de manière reproductible.

Ansible est un outil d’automatisation open source utilisé pour la configuration, la gestion et le déploiement d’infrastructure. Il utilise des fichiers YAML appelés playbooks pour décrire les tâches à exécuter sur des machines distantes. Il est agentless (aucun agent requis sur les hôtes) et repose sur SSH pour communiquer avec les nodes.


Cheat Sheet ansible

Catégorie Commande / Syntaxe Description
Installation sudo apt install ansible / brew install ansible Installation sur Debian/macOS
Ping des hôtes ansible all -m ping Test de connectivité
Inventaire /etc/ansible/hosts Fichier d’inventaire par défaut
  -i mon_inventaire.ini Utiliser un inventaire personnalisé
Commande ad-hoc ansible all -m shell -a "uptime" Lancer une commande sur tous les hôtes
  ansible web -m yum -a "name=httpd state=present" Installer un paquet
Playbook ansible-playbook site.yml Exécuter un playbook
  ansible-playbook -i inventory.ini site.yml Avec inventaire personnalisé
Modules ansible-doc -l Lister les modules disponibles
  ansible-doc copy Voir la doc du module copy
Variables vars: / vars_files: Définir des variables dans un playbook
  group_vars/, host_vars/ Variables par groupe/hôte
Templates template: src=tpl.j2 dest=/tmp/fichier Copier un template Jinja2
Boucles with_items: [ 'nginx', 'mysql' ] Répéter une tâche
Handlers notify: restart apache / handlers: Exécuter une action en cas de changement
Tags --tags "install" / --skip-tags "debug" Exécuter (ou ignorer) certaines tâches
Faits (facts) ansible all -m setup Afficher les facts (infos systèmes)
Vault ansible-vault encrypt secrets.yml Chiffrer un fichier
  ansible-vault view/edit/decrypt fichier.yml Gérer un vault
  ansible-playbook site.yml --ask-vault-pass Exécuter avec mot de passe
Rôles ansible-galaxy init mon_role Créer un squelette de rôle
  roles/mon_role/tasks/main.yml Structure standard d’un rôle
Debug / Test ansible-playbook --check Mode dry-run
  -v / -vvv Niveau de verbosité
Galaxy ansible-galaxy install geerlingguy.nginx Installer un rôle depuis Galaxy

Installer Apache sur un groupe de serveurs

- name: Installer Apache
  hosts: web
  become: yes
  tasks:
    - name: Installer le paquet Apache
      apt:
        name: apache2
        state: present

Copier un fichier de configuration

- name: Copier le fichier de conf
  hosts: all
  tasks:
    - name: Copier nginx.conf
      copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf

Redémarrer un service si un fichier change

- name: Redémarrer Nginx si le fichier change
  hosts: web
  tasks:
    - name: Déployer config Nginx
      copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf
      notify: restart nginx

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

Déployer un template avec variable

- name: Déploiement avec template
  hosts: app
  vars:
    port: 8080
  tasks:
    - name: Template config
      template:
        src: templates/config.j2
        dest: /etc/app/config.ini

Exemple de Playbook Ansible : Déploiement de NGINX

Ce playbook installe et configure le serveur web NGINX sur un groupe de serveurs.

Inventaire (exemple inventory.ini)

[webservers]
web1 ansible_host=192.168.1.11
web2 ansible_host=192.168.1.12

Playbook deploy_nginx.yml

- name: Déployer NGINX sur les serveurs web
  hosts: webservers
  become: yes

  tasks:
    - name: Installer NGINX
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Copier la configuration personnalisée
      copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf
        backup: yes
      notify: Restart nginx

    - name: S'assurer que NGINX est démarré
      service:
        name: nginx
        state: started
        enabled: yes

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

Structure des fichiers

.
├── deploy_nginx.yml
├── inventory.ini
└── files
    └── nginx.conf

Exécution du playbook

ansible-playbook -i inventory.ini deploy_nginx.yml