Ansible 和 JMESPath,在 json_query 中转义正斜杠

Ansible and JMESPath, escape forward slash in a json_query

有一个简单的 JSON 文件,sample.json 包含以下内容:

{
  "test": {
    "domain": [
      {
        "name": "cluster1"
      }
    ]
  }
}

使用 Ansible,我想查询 test 键,它适用于以下 Ansible 剧本。

---
- hosts: localhost
  vars:
    tmpdata: "{{ lookup('file','sample.json') | from_json }}"

    - debug:
        msg: "{{ tmpdata | json_query('test') }}"

该剧

ok: [localhost] => {
    "msg": {
        "domain": [
            {
                "name": "cluster1"
            }
        ]
    }
}

然而,当他们输入 JSON 文件时,从 testtest/something,而 ansible json_query 从 testtest/something,Ansible/JMESPath 也会产生错误。

fatal: [localhost]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\nBad jmespath expression: Unknown token /:\ntest/something\n    ^"}

我查看了 JMESpath documentation,但它对我来说没有意义。

如何确保 JMESpath 在 Ansible 查询中使用正斜杠。

JMESPath 将 identifier 定义为 unquoted-string / quoted-string

unquoted-stringA-Za-z_。其他任何内容都应引用。

你的情况:

- debug:
    msg: "{{ tmpdata | json_query('\"test/something\"') }}"

这里我们转义 \" 因为我们在 YAML 双引号里面 msg: "...".