我有一个以json
返回系统状态的服务调用。我想使用ansible URI模块进行调用,然后检查响应以确定系统是启动还是关闭
{"id":"20161024140306","version":"5.6.1","status":"UP"}
这将是返回的json
这是一个调用的ansible任务:
- 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
问题是我如何访问data
并按照ansible文档检查它,这就是我们如何存储调用结果。我不确定最后一步是检查状态。
4条答案
按热度按时间cxfofazt1#
这对我很有效。
请注意,
result
是一个ansible字典,当您设置return_content=yes
时,响应将添加到此字典中,并且可以使用json
键访问还要确保你已经正确地缩进了任务,如上所示。
flvlnr442#
通过将输出保存到变量中,您已经迈出了正确的第一步。
下一步是在下一个任务中使用
when:
或failed_when:
语句,然后它们将根据变量的内容进行切换。有一整套强大的语句可用于这些,Jinja2内置过滤器,但它们并没有很好地链接到Ansible文档中,或者很好地总结。我使用超级显式命名的输出变量,所以它们在剧本后面对我来说是有意义的:)我可能会写你的东西:
也就是说,在变量的标准输出中找不到文本“UP”。
我用过的其他Jinja2内置过滤器有:
changed_when: "'<some text>' not in your_variable_name.stderr"
when: some_number_of_files_changed.stdout|int > 0
Ansible "Conditionals" docs page有一些这样的信息。This blog post也是非常有用的。
kkbh8khc3#
根据https://docs.ansible.com/ansible/latest/modules/uri_module.html上的文档
是否返回响应的主体作为字典结果中的“内容”键。独立于此选项,如果报告的Content-type是“application/json”,则JSON总是被加载到字典结果中名为json的键中。
x3naxklr4#
这些类型的检查可以很容易地在要执行的同一任务中执行。例如