首页 > 解决方案 > json_query 上的 Ansible 断言

问题描述

我正在尝试在 ansible 中对从json_query. 然而,即使返回的值看起来像我的断言,断言还是失败了。这是断言:

- name: Assert environment variables
  assert:
    that:
      - Job | json_query(jmesquery) == "00"
  vars:
    jmesquery: "resources[0].spec.template.spec.containers[0].env[?name=='MY_VARIABLE'].value"

在同一查询上运行的调试返回:

- name: Test1
  debug: msg="{{ Job | json_query(jmesquery) }}"
  vars:
    jmesquery: "resources[0].spec.template.spec.containers[0].env[?name=='MY_VARIABLE'].value"

TASK [Test1] *******************************************************************
    ok: [localhost] => {
        "msg": [
            "00"
        ]
    }

那么到底为什么这个断言会失败呢?

标签: jsontestingansible

解决方案


您的调试消息显示:您的结果是一个包含一个元素的列表"00",因此您的断言应该是:

- name: Assert environment variables
  assert:
    that:
      - Job | json_query(jmesquery) == ["00"]
  vars:
    jmesquery: "resources[0].spec.template.spec.containers[0].env[?name=='MY_VARIABLE'].value"

作为记录,这里是像你这样的列表的调试:

- hosts: localhost
  gather_facts: no

  tasks:
    - debug: 
        msg: ["00"]

给出:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "00"
    ]
}

这是一个简单字符串的调试assert,就像你写的那样,期待:

- hosts: localhost
  gather_facts: no

  tasks:
    - debug: 
        msg: "00"

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "00"
}

推荐阅读