Ansible:JSON值等于时注册变量

时间:2019-05-26 23:59:11

标签: json ansible

我正在调用Web服务并返回一些JSON。我想根据是否找到特定的name值来有条件地运行后续任务。

例如,仅当nameExists数组包含values的{​​{1}}字段时,才设置值name。因此,在这种情况下,将定义myDemo

nameExists

这是我当前正在尝试的:

...
"failed": false,
"json": {
  "values": [{
    "id": "1234",
    "name": "myDemo"
  },
  {
    "id": "6789",
    "name": "myDemo2"
  }]
},
"msg": "OK (100 bytes)"
...

这在某种程度上可行,但是它给了我完整的JSON输出,我所需要的只是一个true / false。

我是在正确的轨道上吗,还是有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您通常不会使用debug任务来设置变量。您可能要使用set_fact。如果我正确理解了您的问题,那么如果API响应的tagExists列表中的项目之一包含true {{,则想为values设置布尔值name 1}}。可能看起来像这样:

myDemo

“但是等等!”,您说,“这不是布尔值!”。正确无误后,您可以像对待一样处理。例如,在使用该任务设置- set_fact: tagExists: "{{ apiCheckResult.json|json_query('values[?name == `myDemo`]') }}" 之后,您可以执行以下操作:

tagExists

之所以可行,是因为在布尔上下文中非空列表的值为- debug: msg: "The tag exists!" when: tagExists (空列表的值为true)。上面的false表达式在存在匹配项时返回一个非空列表,否则返回一个空列表。

如果您确实想要布尔值,则可以改为:

json_query