Back
Featured image of post Ansible Runner en python

Ansible Runner en python

Utilisation de Ansible Runner avec python.

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.

Resources

https://ansible-runner.readthedocs.io/en/latest/

Généré avec Hugo
Thème Stack conçu par Jimmy