Ansible
Le guide de survie

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