Ecrire des plugins de filtres Ansible
Parfois manipuler des données directement dans les playbooks Ansible peut être fastidieux ! C’est là qu’interviennent les filtres Ansible. Mais parfois pas de solutions simples.
C’est là qu’il faut utiliser les plugins de filtres. Les plugins de filtres vous 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. Mais attention à chaque nouvelle release d’Ansible de nouveaux filtres apparaissent.
Je vous ai écris plusieurs billets sur le sujet : 1, 2 et 3
Passons au code pour transformer une string SnakeCaze à une CamelCaze
Nous voulons transformer une string formatée en snake_case à une autre en CamelCaze. É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 suffix à 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 desinstalle six`et on lance le playbook :
Ce qui donne :
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.