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

Ansible循环列表生成动态字典:键未正确替换变量问题

问题原因分析

你的Playbook存在两个核心问题:

  1. 循环变量未被解析:直接写{'SUB..item': true}时,item会被当作字符串字面量,而非循环中的变量值,导致键名固定为SUB..item。
  2. 字典被重复覆盖:每次循环执行set_fact时,都是直接给FACTS_VAR赋值新字典,而非往已有字典中追加键值对,最终只会保留最后一次循环的结果。
修正后的Playbook
hosts: all
gather_facts: true

vars:
  Argument:
    - value1
    - value2                      

tasks:
- name: 构建FACTS_VAR字典
  set_fact:
    FACTS_VAR: "{{ FACTS_VAR | default({}) | combine({ 'SUB.' ~ item: true }) }}"
  loop: "{{ Argument }}"

- debug:
    var: FACTS_VAR
关键说明
  • default({}):确保第一次循环时FACTS_VAR初始化为空字典,避免变量未定义报错。
  • combine({ 'SUB.' ~ item: true }):用~拼接字符串生成动态键名(SUB.value1、SUB.value2),再通过combine过滤器将新键值对合并到已有字典中,实现累加效果。
  • 遍历Argument列表时,每次迭代都会把新键值对添加到FACTS_VAR,最终得到预期的完整字典。
执行结果验证

修正后执行Playbook,debug模块会输出:

FACTS_VAR:
   SUB.value1: true
   SUB.value2: true

内容的提问来源于stack exchange,提问作者medisamm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:45:36