Les filtres Ansible - 2ème partie
Json est le format de données utiliser par les Api Rest. Nous allons voir comment utiliser le filtre json_query pour rechercher des éléments dans une variable JSON. json_query utilise jmespath, un langage de requête pour analyser des contenu au format JSON.
Par exemple si vous utilisez Ansible pour manager des clusters kubernetes vous serez obligé de parser des données au format JSON.
Transformer des variables au format json
Avant de voir comment récupérer des données d’une API. Voyons comment transformer une variable en json.
Vous avez deux filtres votre disposition to_json
et to_nice_json
.
Ici une astuce permettant à app1 et app2 de partager les mêmes valeurs pour opts et port. On utilise l’ancre &jvm_opts
et l’alias *jvm_opts
. La valeur du chemin est fusionnée par <<
.
Exemples de données au format JSON
Nous allons utiliser comme exemple les données du site jsonplaceholder. Nous prendrons les données du schéma users:
Pour récupérer les données nous allons utiliser le bon vieux module uri
Extraire un champ particulier d’un json
Nous aimerions par exemple obtenir la liste de tous users de la liste. Pour cela nous allons utiliser une requete jmespath. Il faut dans un premier temps installer le module pip correspondant :
Maintenant transformons notre playbook en intégrant un vars à notre debug:
Retrouver une donnée particulière
Cette fois nous aimerions retrouver un user en particulier, par exemple celui avec l’id 1. Faites bien attention au format des quotes `
Il est possible d’ajouter des ou et et pour sélectionner d’autres users. Ici nous allons demander à afficher seulement le nom de leur company:
Utiliser combine pour créer ses propres données extraites du json
Plus tot nous avions vu l’utilisation de combine permettant de combiner des données. Nous allons ici extraire le nom et l’associer à son email :
Si vous voulez plus de tutorials Ansible je vous renvoie sur le billet de l’introduction à ansible