Ansible и JMESPath, экранируйте косую черту в json_query

Существует простой файл JSON, sample.json со следующим содержанием:

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

С Ansible я хочу запросить через test ключ, который работает со следующим Ansible playbook.

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

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

Игра

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

Тем не менее, когда они вводят в файл JSON изменяется, из test в test/something и ответная json_query из test в test/something также Ansible/JMESPath выдает ошибку.

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

Я изучил документацию по JMESpath, но для меня это не имеет смысла.

Как я могу убедиться, что JMESpath работает с косой чертой в запросе Ansible.

1 ответ

Решение

JMESPath определяет identifier как unquoted-string / quoted-string,

unquoted-string является A-Za-z_, Все остальное должно быть указано.

В твоем случае:

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

Здесь мы спасаемся \" потому что мы внутри двойных кавычек YAML msg: "...",

Другие вопросы по тегам