Je suis nouveau chez ansible et j'ai un problème de lecture d'une valeur du fichier json dans le rôle ansible. ma variable a une valeur comme celle-ci:
{
"queue": {
"first": {
"car": "bmw",
"year": "1990",
"model": "x3",
"color": "blue"
},
"second": {
"car": "bmw",
"year": "2000",
"model": "318",
"color": "red"
}
}
}
J'essaie d'imprimer la valeur de la couleur uniquement pour la comparer avec une autre variable. J'ai utilisé with_dict
pour itérer sur l'objet json (stocké dans une variable appelée jsonVar) comme suit:
- name: test loop
with_dict: "{{jsonVar}}"
Shell: |
if echo "blue" | grep -q "${{item.value.color}}" ; then
echo "success"
jusqu'à présent, il n'y a aucune chance d'obtenir la comparaison de la valeur de la couleur de json au "bleu" à partir de l'instruction if. Je me demandais si je fais quelque chose de mal? Merci d'avance!
Vous pouvez lire un fichier json à l'aide d'un plug-in de recherche appelé file
et le transmettre au from_json
filtre jinja2. Vous avez également commis une erreur dans le with_dict
boucle, car vous devez faire une boucle sur jsonVar['queue']
, pas seulement jsonVar
. Voici un code complet qui fonctionne:
---
- hosts: your_Host
vars:
jsonVar: "{{ lookup('file', 'var.json') | from_json }}"
tasks:
- name: test loop
with_dict: "{{ jsonVar['queue'] }}"
Shell: |
if echo "blue" | grep -q "{{ item.value.color }}" ; then
echo "success"
fi
Vous pouvez utiliser le | filtre json_query.
http://docs.ansible.com/ansible/playbooks_filters.html#json-query-filter
Mais assurez-vous que le fichier que vous saisissez est également au format approprié, sinon vous pouvez utiliser deux filtres, le premier pour convertir en filtre approprié et le second pour effectuer une requête json.
ex: - {{ variable_name | from_json | json_query('')}}
Dans votre cas, je pense que cela aiderait:
tasks: print the color
set_fact:
color1 : "{{ jsonVar | from_json | json_query('queue.[0].['color']')}}"
color2 : "{{ jsonVar | from_json | json_query('queue.[1].['color']')}}"
Mais notez les exigences comme la version Ansible