Ecrire des plugins de filtres Ansible
Parfois, manipuler des données directement dans les playbooks Ansible peut être fastidieux. C’est là que les filtres Ansible interviennent.
Les plugins de filtres vont vous permettre de gérer vos données directement avec du code Python. Une fois que vous saurez comment le faire, vous ne pourrez plus vous en passer.
Passons au code pour transformer une string SnakeCaze à une CamelCaze
Nous voulons transformer une string formatée en snake_case à une autre en CamelCase. Écrivons une simple boucle qui va itérer sur chaque élément d’un split avec le caractère ’_’, les passer en majuscule et concaténer le tout.
Écriture du plugin de filtre Ansible
Il suffit d’ajouter à la fin de votre programme python la définition de la classe FilterModule.
Ensuite enregistrer vos programmes dans le répertoire filter_plugins
. Si vous
voulez utiliser un autre répertoire, il faudra l’indiquer dans votre fichier
ansible.cfg
Utilisation de votre filtre dans un playbook
Rien de plus simple. Écrivez ceci dans un fichier que vous nommerez test.yml
Vous pouvez le lancer avec la commande :
Ce qui vous donnera :
Passer plusieurs variables à un filtre personnalisé
Nous allons ajouter un suffixe à notre filtre. La fonction devient :
Et le playbook :
Ce qui donne comme résultat :
Lever une exception Ansible dans votre filtre
En général, les erreurs rencontrées lors de l’exécution doivent être renvoyées en levant une AnsibleError() ou une classe similaire contenant un message décrivant l’erreur. Lorsque vous encapsulez d’autres exceptions dans des messages d’erreur, vous devez toujours utiliser la fonction Ansible to_text pour garantir la compatibilité des chaînes entre les différentes versions de Python.
Un exemple : Tester qu’une librairie est bien installé : ici la lib six.
On désinstalle six
et on lance le playbook :
Ce qui donne :
Conclusion
Voila je vous laisse pour que vous puissiez développer vos propres filtres et l’intégrer dans vos playbooks.
Pour tester vos développements sur différentes versions d’Ansible et Python, je vous propose de lire ce billet.