Mitogen pour Ansible
Mitogen est un plugin de connexion qui remplace le mecanisme SSH standard d'Ansible. Il peut accelerer les playbooks de 2x a 7x.
Installation de Mitogen
pip install mitogen
# Trouver le chemin d'installation
python -c "import mitogen; print(mitogen.__path__[0])"
# Exemple : /usr/lib/python3/dist-packages/mitogen
Configuration
# ansible.cfg
[defaults]
strategy_plugins = /usr/lib/python3/dist-packages/ansible_mitogen/plugins/strategy
strategy = mitogen_linear
# Pour la strategie free :
# strategy = mitogen_free
Comment Mitogen fonctionne
- Etablit un tunnel Python via SSH (pas de copie de fichiers)
- Transfere le code des modules directement en memoire
- Reutilise les connexions entre les taches
- Reduit drastiquement les appels fork() sur les hotes distants
Fact Caching
Le fact caching evite de reevaluer les facts a chaque execution :
Cache JSON (fichier local)
# ansible.cfg
[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts_cache
fact_caching_timeout = 3600 # 1 heure en secondes
Cache Redis
# Installation
pip install redis
# ansible.cfg
[defaults]
gathering = smart
fact_caching = redis
fact_caching_connection = localhost:6379:0
fact_caching_timeout = 7200 # 2 heures
fact_caching_prefix = ansible_facts_
Modes de gathering
- implicit (defaut) : Collecte les facts a chaque execution
- explicit : Ne collecte que si gather_facts: true
- smart : Utilise le cache si disponible, sinon collecte
Desactiver les facts inutiles
# Desactiver completement la collecte
- hosts: all
gather_facts: false
tasks:
- name: Tache sans facts
ansible.builtin.debug:
msg: "Pas besoin de facts"
# Collecter uniquement certains facts
- hosts: all
gather_facts: true
gather_subset:
- network
- hardware
- "!facter"
Optimisations supplementaires
# ansible.cfg
[defaults]
# Desactiver la verification des cles hotes (env de dev)
host_key_checking = False
# Compresser les transferts
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -C
# Limiter le nombre de facts collectes
[defaults]
gather_subset = min
Comparaison de performance
# Benchmark typique (100 hotes, role moyen) :
# Standard SSH : ~180 secondes
# SSH + Pipelining : ~120 secondes
# Mitogen : ~45 secondes
# Mitogen + Fact Cache : ~30 secondes
Impact : Combiner Mitogen, fact caching et pipelining peut diviser le temps d'execution par 5 ou plus.