Ansible解析含连字符key的JSON时set_fact赋值失败如何解决
核心错误原因
在已被{{ }}包裹的Jinja2表达式中,不允许嵌套使用{{ }}引用变量。你在debug: var中可以正常输出是因为Ansible的var参数会自动对传入的变量路径做模板渲染,属于特殊兼容场景,放到标准Jinja表达式场景(比如set_fact的赋值、debug的msg参数)下就会出现语法错误。
修复方法
把set_fact语句中引用config_name的部分去掉内层的{{ }},直接写变量名即可:
- name: 修复后的变量赋值语句 set_fact: new_config: "{{ access_auths.Clusters.desired_configs[config_name].tag }}"
如果需要在debug的msg参数中输出对应值,写法如下:
- name: 在msg中正常输出tag值 debug: msg: "配置项{{ config_name }}对应的tag值为:{{ new_config }}"
完整可运行Playbook示例
- name: Parsing Json hosts: localhost connection: local tags: setup_infra vars: - config_name: ams-env tasks: - name: 读取并解析JSON文件 set_fact: access_auths: "{{ lookup('file', 'ambari.json') | from_json }}" - name: 直接打印目标配置的tag值 debug: var: access_auths.Clusters.desired_configs[config_name].tag - name: 将tag值赋值给新变量 set_fact: new_config: "{{ access_auths.Clusters.desired_configs[config_name].tag }}" - name: 打印新变量验证结果 debug: var: new_config
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

