使用uri
模块(虽然此问题不仅限于此),您可以查询网络端点并获得结果,并且我尝试验证(使用{{ 1}}条件)JSON响应中的对象。不幸的是,实际值(大致)在:
when
问题是测试registered_variable_name.json.result.my_key
似乎我需要先验证:
my_key
定义的吗?registered_variable_name
定义的吗?registered_variable_name.json
定义的吗?然后
registered_variable_name.json.result
是我想要的价值吗?这似乎过于复杂,所以我希望有一种更简单的方法来测试registered_variable_name.json.result.my_key
的价值,因为如果my_key
的任何级别缺失,似乎抛出错误或者没有正确验证(例如,由于错误没有JSON响应,或者存在JSON响应但没有dict
元素,等等)。
答案 0 :(得分:1)
这似乎工作得很好(使用ansible 2.1.1.0):
这是一个完整的例子:
- hosts: localhost
name: Key exists and matches
gather_facts: false
vars:
varname:
json:
result:
my_key: target value
tasks:
- debug:
msg: "The key exists."
when: varname.json.result.my_key is defined
and varname.json.result.my_key == "target value"
- hosts: localhost
name: Key exists but no match
gather_facts: false
vars:
varname:
json:
result:
my_key: "these are not the droids you're looking for"
tasks:
- debug:
msg: "The key exists."
when: varname.json.result.my_key is defined
and varname.json.result.my_key == "target value"
- hosts: localhost
name: Key does not exist
gather_facts: false
vars:
varname: nothing to see here
tasks:
- debug:
msg: "The key exists."
when: varname.json.result.my_key is defined
and varname.json.result.my_key == "target value"