如何通过SaltStack编排器SLS文件向其他SLS文件传递参数?
在SaltStack编排器中通过SLS文件动态修改回滚时的version变量
我来帮你搞定这个问题!其实不用Python模块也能解决,SaltStack的编排器本身就支持在调用state的时候传递临时pillar数据,正好能用来覆盖回滚时的version变量。
核心思路
在Plan B的salt.state调用里,通过pillar参数给目标minion(my-server)传递一个临时的旧版本号,这样service-a SLS里的version变量就会使用这个回滚版本,而不是和Plan A相同的版本。
修改后的编排器SLS文件
Plan A: salt.state: - tgt: my-server - sls: service-a # 可选:如果需要明确指定Plan A的版本,也可以在这里传递pillar # - pillar: # version: "v1.0.0" Plan B: salt.state: - tgt: my-server - sls: service-a - onfail: - Plan A # 重点:传递临时pillar,指定回滚用的旧版本 - pillar: version: "v0.9.0" # 替换成你的实际旧版本号
关键说明
- 临时pillar的优先级:通过
salt.state传递的pillar参数是临时注入到minion的,优先级高于minion本地配置的pillar值,所以service-aSLS里的{% set version = pillar["version"] %}会优先读取这个临时值。 - 回滚逻辑生效:当Plan A执行失败触发Plan B时,
service-a会使用你指定的旧版本执行docker-compose up,从而完成回滚操作。 - 可选优化:如果想让Plan A的版本也可控,同样可以给Plan A加上
pillar参数,这样整个部署-回滚流程的版本都能在编排器里统一管理。
额外注意
确保你的旧版本对应的docker-compose.yml文件存在于my-server的v0.9.0/目录下,否则回滚还是会失败哦。
内容的提问来源于stack exchange,提问作者mortymacs
相关产品推荐
相关产品推荐

