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

如何从单个YAML文件提取多个Minion的部分Pillar配置?

解决方案

核心思路

通过YAML锚点维护统一的用户角色数据源,结合SaltStack的Grains和Pillar Top文件的精准匹配,让不同系统的Minion仅加载对应系统的Pillar片段,无需Jinja提取、Python生成或数据库方案。

步骤实现

1. 配置Minion自定义Grains

给每个Minion添加标识所属系统的自定义Grain,比如在Minion的/etc/salt/grains文件中添加:

# systemA的Minion
system: systemA
# systemB的Minion
system: systemB

添加后重启Minion服务,或执行salt 'minion-id' grains.setval system systemA生效。

2. 创建统一数据源文件

在Pillar目录下创建_shared_roles.sls(下划线开头表示不会被直接加载),维护所有系统的用户角色:

# /srv/pillar/_shared_roles.sls
# 定义各系统角色的锚点
systemA_roles: &systemA_roles
  - roleA
  - roleB

systemB_roles: &systemB_roles
  - roleC

# 可选:维护完整映射用于核对
username_map:
  systemA: *systemA_roles
  systemB: *systemB_roles

3. 分系统创建Pillar文件

为每个系统单独创建对应的Pillar文件,通过YAML锚点引用统一数据源:

  • systemA_pillar.sls:
# /srv/pillar/systemA_pillar.sls
username: *systemA_roles
  • systemB_pillar.sls:
# /srv/pillar/systemB_pillar.sls
username: *systemB_roles

4. 配置Pillar Top文件

修改/srv/pillar/top.sls,通过Grains匹配指定Minion加载对应Pillar:

# /srv/pillar/top.sls
base:
  # 匹配所有system为systemA的Minion
  'G@system:systemA':
    - match: grain
    - systemA_pillar
  # 匹配所有system为systemB的Minion
  'G@system:systemB':
    - match: grain
    - systemB_pillar

验证效果

执行salt 'systemA-minion' pillar.get username,返回结果如下:

- roleA
- roleB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:27:27