如何从单个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
相关产品推荐
相关产品推荐

