You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:45:02