Comment inspecter une réponse json à partir d'Ansible URI appel
J'ai un appel de service qui retourne l'état du système dans json
format. Je veux utiliser le ansible URI module pour faire l'appel, puis inspectez la réponse pour savoir si le système est en haut ou en bas
{"id":"20161024140306","version":"5.6.1","status":"UP"}
Ce serait le json
qui est retourné
C'est l'ansible tâche, qui fait un appel:
- name: check sonar web is up
uri:
url: http://sonarhost:9000/sonar/api/system/status
method: GET
return_content: yes
status_code: 200
body_format: json
register: data
Question est de savoir comment puis-je accéder à data
et l'inspecter, comme par ansible la documentation c'est comment nous stockons les résultats d'un appel. Je ne suis pas sûr de l'étape finale qui consiste à vérifier l'état.
Vous pouvez commencer avec de simples
Grâce à ce qui a contribué à briser le problème pour moi. 🙂
Remarquez comment
debug: var=data
comme tâche suivante pour voir ce qui est inscrit à l'intérieur de la variable. Cela vous aidera à avancer.Grâce à ce qui a contribué à briser le problème pour moi. 🙂
Remarquez comment
register
est en retrait ce qui a entraîné data is undefined
erreur à résoudre cette question, vous devez unindent de même espacement que uri
OriginalL'auteur Hafiz | 2016-10-25
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi.
Avis que
result
est un ansible dictionnaire et lorsque vous définissezreturn_content=yes
la réponse est ajouté à ce dictionnaire et est accessible en utilisantjson
cléÉgalement vous assurer d'avoir en retrait de la tâche correctement, comme indiqué ci-dessus.
OriginalL'auteur Hafiz
Vous avez fait un bon premier pas d'enregistrer la sortie dans une variable.
L'étape suivante consiste à utiliser
when:
oufailed_when:
rapport dans votre prochaine tâche, qui va alors basculer sur la base du contenu de la variable. Il y a tout un puissant ensemble d'instructions pour l'utilisation, la Jinja2 builtin filtres, mais ils ne sont pas vraiment liées bien dans l'Ansible de la documentation, ou résumées bien.- Je utiliser super de nommer explicitement les variables de sortie, de sorte qu'ils font sens pour moi plus tard dans la playbook 🙂 je serais probablement écrire la vôtre quelque chose comme:
Qui est, le texte "PLACE" n'est pas trouvé dans la variable de sortie standard (stdout).
Autres Jinja2 builtin filtres j'ai utilisé sont:
changed_when: "'<some text>' not in your_variable_name.stderr"
when: some_number_of_files_changed.stdout|int > 0
La Ansible "Conditionnelles" docs page a certaines de ces informations. Ce blog a également été très instructif.
Hehe ok 🙂 Désolé j'ai pris un peu d'écrire que.
OriginalL'auteur ocean