Ansible Runner
Ansible Runner est un outil permettant d’éxécuter des playbook en CLI ou comme module python afin de récupérer les résutats, pas mal pour un portail ansible par exemple.
Installation
Ansible Runner n’étant qu’un outil d’utilisation ansible-playbook, vous devez avoir ansible d’installer, cela va de soi.
Ansible Runner, à l’instar de Ansible, est facilement installable via pip. Vous serez plus à même d’avoir une version up-to-date qu’en passant par les dépôts de votre distribution.
Pensez aux venv ;)
# Installation de ansible
pip install ansible
# Installation de ansible-runner
pip install ansible-runner
Utilisation en CLI
ansible-runner -p playbook.yml run ~/scripts/ansible/playbook
- -p playbook.yml correspond au playbook à éxécuter
- run indique que l’on veut éxécuter le playbook
- ~/scripts/ansible/playbook correspond au répertoire dans le lequel sera éxécuté le playbook
Utilisation comme module python
Exécution
Voici le code le plus simple, permettant d’éxécuter un playbook.
# run_ansible.py
import ansible_runner
r = ansible_runner.run(private_data_dir='~/scripts/ansible/playbook', playbook='playbook.yml')
Dans une console, il suffit de l’éxécuter.
python3 run_ansible.py
Le stdout de la commande sera exactement le même que si vous aviez exécuter le playbook avec ansible-playbook.
Récupération de données
Ce qui est interressant avec Ansible Runner c’est de pouvoir l’utiliser comme une API, ansible n’en proposant pas de vraie puisqu’ils vendent leur solution Ansible Tower plutôt.
Ansible Runner stocke en fichier tout ce qu’il fait dans artifacts qui se trouve dans le répertoire défini dans l’argument private_data_dir (exemple: ~/scripts/ansible/playbook/artifacts)
Dans ce répertoire, à chaque éxécution de ansible-runner, il créé un répertoire qui a pour nom un UUID généré aléatoirement.
Voici l’arborescence :
├── artifacts
│ └── 37f639a3-1f4f-4acb-abee-ea1898013a25
│ ├── fact_cache
│ │ └── localhost
│ ├── job_events
│ │ ├── 1-34437b34-addd-45ae-819a-4d8c9711e191.json
│ │ ├── 2-8c164553-8573-b1e0-76e1-000000000006.json
│ │ ├── 3-8c164553-8573-b1e0-76e1-00000000000d.json
│ │ ├── 4-f16be0cd-99e1-4568-a599-546ab80b2799.json
│ │ ├── 5-8c164553-8573-b1e0-76e1-000000000008.json
│ │ ├── 6-981fd563-ec25-45cb-84f6-e9dc4e6449cb.json
│ │ └── 7-01c7090a-e202-4fb4-9ac7-079965729c86.json
│ ├── rc
│ ├── status
│ └── stdout
- Le fichier rc contient le code retour du process ansible.
- Le fichier status contient un des 3 états suivant :
- success
- failed
- timeout
Le fichier stdout contient le stdout comme on aurait avec ansible-playbook.