Ansible и JMESPath, экранируйте косую черту в json_query - PullRequest
0 голосов
/ 07 февраля 2019

Существует простой 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 Ответ

0 голосов
/ 07 февраля 2019

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

unquoted-string равно A-Za-z_.Все остальное должно быть заключено в кавычки.

В вашем случае:

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

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

...