Créer un module personnalisé avec Ansible-Python
Modules Ansible
Ansible est livré avec un certain nombre de modules (appelés « bibliothèque de modules ») qui peuvent être exécutés directement sur des hôtes distants ou par le biais de Playbooks.
Les utilisateurs peuvent également écrire leurs propres modules. Ces modules peuvent contrôler les ressources du système, comme les services, les paquets ou les fichiers (n’importe quoi en réalité), ou gérer l’exécution des commandes du système.
Pourquoi créer votre propre module ?
Comme dit précédemment, ansible a beaucoup de modules pour effectuer diverses tâches. Mais un environnement différent peut avoir des exigences différentes dans lesquelles vous préféreriez avoir un module personnalisé pour gérer le système ou l’environnement ou le projet à votre façon.
Comprenons comment nous pouvons créer un module personnalisé d’une manière facile.
Structure des dossiers
Il est important de connaître la structure des dossiers et des fichiers avant de commencer à créer un module personnalisé. Vérifiez l’image ci-dessous pour référence. Ce sur quoi nous devons travailler est main.yaml et testing.py sous le dossier library.
root@ubuntu:~/ANSIBLEtesting# tree
.
└── playbooks
├─── library
│ └─── testing.py
└── main.yaml
2 répertoires, 2 fichiers
Ecrire votre premier programme python
Pour écrire ansible de manière pragmatique, nous devons comprendre les utilitaires de module. Ansible fournit un certain nombre d’utilitaires de module qui fournissent des fonctions d’aide que vous pouvez utiliser lors du développement de vos propres modules. L’utilitaire de module testing.py fournit le principal point d’entrée pour accéder à la bibliothèque Ansible, et tous les modules Ansible doivent, au minimum, importer de testing.py.
from ansible.module_utils.basic import *
Cela importera tous les fichiers module_utils pour créer un module personnalisé. Le format de sortie du fichier python est uniquement JSON. Ainsi, lorsque vous imprimez la sortie d’un fichier python, elle devra être en JSON.
Les parties clés incluent toujours l’importation du code boilerplate de ansible.module_utils.basic comme ceci :
from ansible.module_utils.basic import AnsibleModule
if __name__ == '__main__':
main()
Maintenant instanciez la classe principale ou vous pouvez écrire directement dans la classe principale.
if __name__ == '__main__':
fields = {
"yourName": {"required": True, "type": "str"}
}
module = AnsibleModule(argument_spec=fields)
yourName = os.path.expanduser(module.params)
newName = firstProg(yourName)
module.exit_json(msg=newName)
Le AnsibleModule fournit beaucoup de code commun pour gérer les retours, analyse vos arguments pour vous, et vous permet de vérifier les entrées. Ici votreNom est l’entrée donnée au fichier python. Cette entrée sera prise dans le playbook ansible.
Les retours réussis se font comme ceci :
module.exit_json(changed=True, something_else=12345)
Et les échecs sont tout aussi simples (où msg est un paramètre requis pour expliquer l’erreur) :
module.fail_json(msg="Something fatal happened")
Le programme python final ressemble à ceci
#!/bin/env python
from ansible.module_utils.basic import *
import os, json
import re, sysdef firstProg(text):
text1 = "Hello " + text
return text1if __name__ == '__main__':
fields = {
"yourName": {"required": True, "type": "str"}
}
module = AnsibleModule(argument_spec=fields)
yourName = os.path.expanduser(module.params)
newName = firstProg(yourName)
module.exit_json(msg=newName)
Préparez votre playbook
Sachez que nous utiliserons le nom du module personnalisé identique au nom du fichier python.
- hosts: all
remote_user: root
gather_facts: yes vars_prompt:
- name: giveName
prompt: "Please provide your name"
private: no
failed_when: giveName is undefined tasks:
- name: Python Execution
testing: yourName={{ giveName }}
register: result
- debug: var=result
Ici, vars_prompt vous demandera un nom et le module de test sous tâche passera ce nom au script python. Pouvez-vous deviner ce que sera la sortie ? Vérifions.
ansible-playbook main.yaml
Conclusions
Vous pouvez vérifier plus en détail les modules personnalisés dans la documentation Ansible. Il y a beaucoup plus qui peut être fait avec les modules personnalisés.
Cet article a été pris directement à partir de www.9tocloud.com
.