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

使用Jinja读取包含字典结构数组的Salt Pillar失败求助

问题根因

SaltStack要求SLS文件内所有状态ID全局唯一,你在for循环中硬编码了固定状态IDprint my data,遍历pillar中2个package元素时会重复生成同一个ID,直接触发编译冲突。

修复方案

将状态ID改为动态生成即可,两种常用实现方式:

方式1:用pillar唯一字段拼接ID

适合repo_name无特殊字符的场景:

{% for package in salt.pillar.get('deploy2:packages', []) %}

print_{{ package.repo_name }}_data:
  cmd.run:
    - name: "echo {{ package.repo_name }}"

{% endfor %}

方式2:用循环序号生成ID

无需依赖pillar字段,通用性更强:

{% for package in salt.pillar.get('deploy2:packages', []) %}

print_my_data_{{ loop.index }}:
  cmd.run:
    - name: "echo {{ package.repo_name }}"

{% endfor %}

以上两种写法都额外补充了salt.pillar.get的默认空数组参数,避免pillar不存在deploy2:packages配置时循环报错。

验证步骤

修改前可先确认minion侧pillar数据是否正常同步:

salt <目标minion ID> pillar.get deploy2:packages

命令返回对应字典数组即说明pillar配置无误,修改后的state可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:03