Ansible

Ansible
Première Version 20 février 2012
Dernière Version 2.20.1
Fonction Gestionnaire de configuration
Infrastructure automation software
Infrastructure as Code
Site web www.ansible.com

Ansible est un outil d’automatisation IT open-source développé par Red Hat. Il permet de gérer la configuration, le déploiement d’applications et l’orchestration de tâches sur un parc de machines, sans installer d’agent sur les cibles.

Architecture


          Machine de contrôle            

  Inventory  Ansible  Playbooks    

              ansible.cfg                

                     SSH / WinRM


    [Serveur 1] [Serveur 2] [Serveur 3]
    (Ubuntu)    (Ubuntu)    (Ubuntu)

Agentless : Ansible se connecte via SSH (Linux) ou WinRM (Windows). Rien à installer sur les machines cibles, juste Python.

Structure d’un projet Ansible

mon-projet/
 ansible.cfg          # Configuration globale
 inventory/
    hosts.yml        # Liste des machines
    group_vars/      # Variables par groupe
        all.yml
        webservers.yml
 playbooks/
    site.yml         # Playbook principal
    webservers.yml
    databases.yml
 roles/
     nginx/
        tasks/
           main.yml
        templates/
           nginx.conf.j2
        handlers/
           main.yml
        defaults/
            main.yml
     postgresql/
         tasks/
             main.yml

Concepts fondamentaux

1. Inventory - Le parc de machines

# inventory/hosts.yml
all:
  children:
    webservers:
      hosts:
        web1:
          ansible_host: 192.168.1.10
        web2:
          ansible_host: 192.168.1.11
    databases:
      hosts:
        db1:
          ansible_host: 192.168.1.20
    monitoring:
      hosts:
        grafana:
          ansible_host: 192.168.1.30


2. Playbook — Le scénario d’automatisation

# playbooks/webservers.yml
---
- name: Configuration des serveurs web
  hosts: webservers
  become: yes          # sudo
  vars:
    http_port: 80
    app_version: "1.2.3"

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

    - name: Démarrer et activer Nginx
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Déployer la config Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Reload Nginx        # déclenche le handler

  handlers:
    - name: Reload Nginx
      service:
        name: nginx
        state: reloaded


3. Modules — Les briques de base

Ansible dispose de milliers de modules intégrés :


4. Roles — La réutilisabilité

Les rôles permettent d’organiser et réutiliser son code :

# roles/nginx/tasks/main.yml
---
- name: Installer Nginx
  apt:
    name: nginx
    state: present

- name: Configurer Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify: Reload Nginx


# Utilisation dans un playbook
- hosts: webservers
  roles:
    - nginx
    - nodejs
    - monitoring

5. Variables & Templates Jinja2

# group_vars/webservers.yml
nginx_worker_processes: 4
nginx_max_connections: 1024
app_domain: "monsite.fr"


# templates/nginx.conf.j2
worker_processes {{ nginx_worker_processes }};

events {
    worker_connections {{ nginx_max_connections }};
}

server {
    listen 80;
    server_name {{ app_domain }};
}


Fonctionnalités avancées

Conditions & boucles

Vault — Chiffrement des secrets

Tags — Exécution sélective

Ansible AWX/Tower

AWX (open-source) ou Ansible Tower (Red Hat, payant) ajoutent :

Forces & Limites

Forces

Limites