SaltStack版本控制与回滚实践指南
SaltStack的状态文件(.sls)、Pillar数据和环境配置是版本控制的核心对象,通过Git可实现配置的追踪、对比与回退。
/srv/salt/目录下(如/srv/salt/base/webserver.sls)。/srv/pillar/目录下(如/srv/pillar/database.sls)。/etc/salt/master中的file_roots(定义状态文件目录)、pillar_roots(定义Pillar目录)等,需纳入版本控制以管理环境结构。git init初始化Git仓库。git remote add origin <远程仓库URL>。git add .添加变更,git commit -m "描述信息"提交,git push origin main推送到远程仓库。main分支用于生产、dev分支用于开发)和标签(如v1.0.0标记发布版本),可实现配置的版本隔离与快速切换。SaltStack的回滚需结合版本控制恢复配置与备份还原数据,确保系统快速回到健康状态。
git checkout v1.0.0),然后同步到Salt Master的对应目录(/srv/salt/、/srv/pillar/)。同步完成后,执行salt '*' state.apply让所有Minion应用旧版本配置;若仅需部分Minion回滚,可通过目标选择器(如web*)指定:salt 'web*' state.apply。backup_ssl状态模块将证书备份到/opt/backup/ssl/<域名>/<年份>/目录(按年份分类);回滚时,通过rollback.sls读取备份年份(优先从Pillar获取,若未指定则取前一年),将备份目录中的证书复制到目标目录(如/usr/local/nginx/ssl/<域名>/),并重启Nginx服务使变更生效。rollback.sls片段:{% set domain = 'example.com' %}
{% set ssl_dir = '/usr/local/nginx/ssl/' + domain %}
{% set bak_dir = '/opt/backup/ssl/' + domain %}
{% set year = salt['pillar.get']('year', default=salt['cmd.run']('echo $(date +%Y - 1 | bc)')) %}
rollback:
cmd.run:
- name: "cp {{ bak_dir }}/{{ year }}/* {{ ssl_dir }}/"
restart_nginx:
cmd.run:
- name: "/usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload"
- require:
- cmd: rollback
执行回滚时,只需运行salt 'nginx*' state.apply rollback,即可完成证书还原与服务重启。git tag v1.0.0),便于快速定位版本。salt-lint检查语法),确保配置的正确性;通过Pull Request机制审核配置变更,避免错误配置进入生产环境。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。