SaltStack多环境配置异常:base与dev minion模块重复
我是SaltStack新手,已创建base环境且运行正常。现尝试配置dev和prod环境,期望dev环境既有自定义模块,也能继承base环境的部分模块。但即使在master配置中设置了dev环境,base和dev的minion仍获取到相同的模块。
已做配置修改
Master文件服务器设置
file_roots: base: - /opt/base/ dev: - /opt/dev/ - /opt/base/ prod: - /opt/prod/ top_file_merging_strategy: same
Master节点组配置
nodegroups: dev: 'L@rnd301.com,rnd302.com,rnd304.com,rnd305.com'
Master Pillar设置
pillar_roots: base: - /opt/pillar dev: - /opt/dev/pillar
dev环境top.sls
dev: '*': - pw_new base: '*': - sudo - sshkeys
base环境top.sls
base: '*': - common - sudo - dns - ntp - repos - history - rootpw
当前现象
执行salt-call后,dev minion和base minion都获取到了所有base环境的文件,示例执行结果:
ID: pw_new Function: user.present Result: True Comment: User rootpw_new is present and up to date Started: 12:39:09.350877 Duration: 4.361 ms Changes:
本地执行总结:成功:49
调整top文件合并策略
你设置的top_file_merging_strategy: same会强制所有环境使用相同的top文件合并规则,导致base环境的模块被全量继承。若要实现dev环境选择性继承base模块,建议将该参数改为merge,或直接删除(默认值即为merge)。修正dev环境top.sls写法
当前dev的top.sls中直接定义了base环境的全局匹配规则,会让所有minion都加载base下的sudo和sshkeys。正确做法是仅让dev节点组加载指定模块:dev: 'G@nodegroup:dev': - pw_new - sudo - sshkeys这样只有dev节点组的minion会加载自定义模块
pw_new,以及需要继承的base模块sudo和sshkeys,base环境的minion仅加载自身top文件中的内容。确认minion环境配置
确保dev节点组的minion已指定使用dev环境:- 在minion配置文件
/etc/salt/minion中添加environment: dev - 执行
salt 'rnd301.com' grains.get saltmaster.environment验证minion当前环境
- 在minion配置文件
刷新缓存生效配置
修改配置后,先刷新master文件服务器缓存:salt-run fileserver.update再让dev节点组的minion同步所有资源:
salt 'G@nodegroup:dev' saltutil.sync_all配置Pillar环境继承
若需要dev环境继承base的pillar内容,需修改pillar_roots配置:pillar_roots: base: - /opt/pillar dev: - /opt/dev/pillar - /opt/pillar这样dev环境会优先加载自身pillar目录内容,再继承base的pillar内容。
内容的提问来源于stack exchange,提问作者fndogonza

