Несколько проблем в вашем выражении:
- В jmespath идентификаторы заключаются в двойные кавычки. Одинарные кавычки используются для строк. См. спецификацию jmespath .
- Все выражение jmespath, которое вы передаете
json_query
, должно быть строкой yaml / jinja2. Как вы написали, .link
будет интерпретироваться как идентификатор переменной jinja2 / yaml. - Запрещается использовать маркеры шаблонов jinja2 (
{{ X }}
). Более того, в вашем текущем выражении '{{ target }}'
буквально интерпретируется как строка, а не переменная для расширения до ее значения.
В следующем списке воспроизведения демонстрируется один из способов исправить ваш текущий список воспроизведения и выполнить ваши требования. :
---
- hosts: localhost
gather_facts: false
vars:
input:
json: {
"a goo": {
"link": "google.com"
},
"b ms": {
"link": "microsoft.com"
},
"c amz": {
"link": "amazon.com"
}
}
tasks:
- name: Debug the var we want to show
vars:
target: "c amz"
debug:
msg: "{{ input.json | json_query('\"' + target + '\".link') }}"
Что дает:
$ ansible-playbook play.yml
PLAY [localhost] ***************************************************************************************************************************************************************
TASK [Debug the var we want to show] *******************************************************************************************************************************************
ok: [localhost] => {
"msg": "amazon.com"
}
PLAY RECAP *********************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0