Objectif : Déployer une architecture web complète :
ansible-project/
├── inventory/
│ ├── hosts
│ └── group_vars/
│ ├── webservers.yml
│ └── dbservers.yml
├── roles/
│ ├── haproxy/
│ ├── webserver/
│ └── database/
├── vault/
│ └── secrets.yml
├── site.yml
└── requirements.yml
[loadbalancers]
lb01 ansible_host=192.168.1.10
[webservers]
web01 ansible_host=192.168.1.20
web02 ansible_host=192.168.1.21
[dbservers]
db01 ansible_host=192.168.1.30
[production:children]
loadbalancers
webservers
dbservers
name: Déploiement Load Balancer
hosts: loadbalancers
become: yes
roles:
haproxy
name: Déploiement Web Servers
hosts: webservers
become: yes
roles:
webserver
name: Déploiement Database
hosts: dbservers
become: yes
roles:
database
| À FAIRE | À ÉVITER |
|---|---|
state: present/absent |
command: rm -rf |
notify handlers |
Redémarrages systématiques |
Tests avec --check |
Déploiement sans validation |
name: Tâche avec tolérance d'erreur
command: /script/may_fail.sh
ignore_errors: yes # Continue malgré l'erreur
register: result
name: Action corrective
command: /script/fix.sh
when: result.failed
name: Logging des changements
lineinfile:
path: /var/log/ansible_changes.log
line: "{{ ansible_date_time.iso8601 }} - {{ inventory_hostname }}"
delegate_to: localhost
| Optimisation | Gain | Commande |
|---|---|---|
| Pipelining | 2-3x | pipelining = True |
| Parallélisme | Proportionnel | forks = 20 |
| Cache facts | 50% temps | fact_caching = jsonfile |
| SSH persistent | 30% temps | control_path |
Validation syntaxique et des bonnes pratiques
pip install ansible-lint
ansible-lint site.yml
Testing framework pour les rôles
pip install molecule docker
molecule test
Interface graphique et orchestration entreprise :