Pipelining SSH
Le pipelining reduit le nombre de connexions SSH en executant les modules directement via stdin au lieu de copier des fichiers temporaires.
# ansible.cfg
[ssh_connection]
pipelining = True
# Prerequis : desactiver requiretty dans sudoers
# /etc/sudoers : commenter "Defaults requiretty"
Forks (parallelisme)
Le parametre forks definit le nombre d'hotes traites en parallele :
# ansible.cfg
[defaults]
forks = 50 # Par defaut : 5
# Ou en ligne de commande
ansible-playbook -f 50 deploy.yml
Taches asynchrones
Les taches longues peuvent etre executees en arriere-plan avec async :
- name: Mise a jour systeme (asynchrone)
ansible.builtin.apt:
update_cache: true
upgrade: dist
async: 600 # Timeout max en secondes
poll: 0 # Ne pas attendre (fire and forget)
register: apt_update
- name: Autres taches pendant la mise a jour
ansible.builtin.debug:
msg: "Execution de taches en parallele"
- name: Attendre la fin de la mise a jour
ansible.builtin.async_status:
jid: "{{ apt_update.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 60
delay: 10
Strategies d'execution
# Strategie linear (par defaut) : attend que tous les hotes
# terminent une tache avant de passer a la suivante
- hosts: all
strategy: linear
# Strategie free : chaque hote avance a son propre rythme
- hosts: all
strategy: free
# Strategie host_pinned : comme free, mais les workers
# restent assignes au meme hote
- hosts: all
strategy: host_pinned
ControlPersist SSH
Maintenir les connexions SSH ouvertes pour eviter la reauthentification :
# ansible.cfg
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-%r@%h:%p
pipelining = True
Profiling avec callback
# ansible.cfg
[defaults]
callbacks_enabled = timer, profile_tasks, profile_roles
# Resultats : temps d'execution par tache et par role
Regle : Activez toujours pipelining et augmentez forks selon votre infrastructure pour des gains significatifs.