Ansible:在一个语句中验证多维数组/ dict中的变量

时间:2016-08-05 00:02:25

标签: python dictionary ansible

使用uri模块(虽然此问题不仅限于此),您可以查询网络端点并获得结果,并且我尝试验证(使用{{ 1}}条件)JSON响应中的对象。不幸的是,实际值(大致)在:

when

问题是测试registered_variable_name.json.result.my_key 似乎我需要先验证:

  1. my_key定义的吗?
  2. registered_variable_name定义的吗?
  3. registered_variable_name.json定义的吗?
  4. 然后

    1. registered_variable_name.json.result是我想要的价值吗?
    2. 这似乎过于复杂,所以我希望有一种更简单的方法来测试registered_variable_name.json.result.my_key的价值,因为如果my_key的任何级别缺失,似乎抛出错误或者没有正确验证(例如,由于错误没有JSON响应,或者存在JSON响应但没有dict元素,等等)。

1 个答案:

答案 0 :(得分:1)

这似乎工作得很好(使用ansible 2.1.1.0):

  • 调试: msg:"密钥已定义" when:registered_variable_name.json.result.my_key已定义     和registered_variable_name.json.result.my_key =='目标价值'

这是一个完整的例子:

- 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"