Ansible

Automatisation IT sans agent - configurer serveurs, deployer apps, orchestrer workflows avec playbooks YAML

TL;DR

Quoi: Outil d’automatisation IT sans agent pour la gestion de configuration et le déploiement.

Pourquoi: Pas d’agents nécessaires, syntaxe YAML simple, opérations idempotentes, énorme bibliothèque de modules.

Quick Start

Installer:

# macOS
brew install ansible

# Linux (pip)
pip install ansible

# Vérifier
ansible --version

Première commande (ad-hoc):

# Ping localhost
ansible localhost -m ping

# Exécuter une commande sur des hôtes distants
ansible all -i "server1,server2," -m shell -a "uptime"

Fichier d’inventaire (hosts.ini):

[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com

Cheatsheet

CommandeDescription
ansible all -m pingPing tous les hôtes
ansible-playbook play.ymlExécuter le playbook
ansible-playbook -i hosts play.ymlAvec inventaire
ansible-galaxy install roleInstaller un rôle
ansible-vault encrypt fileChiffrer un fichier
ansible-doc -lLister les modules

Gotchas

Basic playbook

# playbook.yml
---
- name: Configure web servers
  hosts: webservers
  become: yes

  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Copy config
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Restart nginx

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

Variables

# Dans le playbook
vars:
  http_port: 80
  max_clients: 200

# Dans un fichier vars
# vars/main.yml
app_name: myapp
app_version: "1.0.0"

# Utiliser les variables
- name: Create directory
  file:
    path: "/opt/{{ app_name }}"
    state: directory

Common modules

# Opérations sur les fichiers
- file: path=/tmp/test state=directory mode=0755
- copy: src=file.txt dest=/tmp/file.txt
- template: src=config.j2 dest=/etc/app/config

# Gestion des paquets
- apt: name=nginx state=present
- yum: name=httpd state=latest

# Gestion des services
- service: name=nginx state=started enabled=yes

# Commandes
- command: /usr/bin/make
- shell: echo $HOME > /tmp/home.txt

Roles structure

roles/
  webserver/
    tasks/main.yml
    handlers/main.yml
    templates/
    files/
    vars/main.yml
    defaults/main.yml

Next Steps