我需要把双引号键作为JSON查询中的变量。如果我把关键字串直接用反斜杠,它工作得很好,但是当我把它用作变量
时就不行了---
- hosts: localhost
gather_facts: no
vars:
cert: |
{
"apiVersion": "v1",
"data": {
"ca.crt": "xxxx",
"tls.crt": "yyyyy",
"tls.key": "zzzzz"
}
}
cert_type: "ca.crt"
tasks:
- debug:
#msg: "{{cert|from_json|json_query('data.`{{cert_type}}`')}}" ## Does not work
msg: "{{cert|from_json|json_query('data."ca.crt"')}}" ## works
不要嵌套Jinja{{...}}
模板标记。当你这样写:
msg: "{{cert|from_json|json_query('data.`{{cert_type}}`')}}" ## Does not work
您正在寻找字面值字符串{{cert_type}}
。您想要执行变量插值,它可能看起来像这样(使用Jinja的字符串连接操作符):
- debug:
msg: >-
{{cert|from_json|json_query('data."' ~ cert_type ~ '"') }}
或者这样(使用python风格的format
方法):
- debug:
msg: >-
{{cert|from_json|json_query('data."{}"'.format(cert_type)) }}
给定您的示例剧本,上述两个任务的结果是:
TASK [debug] ********************************************************************************************
ok: [localhost] => {
"msg": "xxxx"
}