在 Chef 里,“回滚配置”并不是像数据库事务那样的一键式回滚,而是通过重新应用旧版本的 Cookbook / Recipe / 属性来实现。下面按常见场景说明做法。
前提
1.2.0 → 1.3.0)# Policyfile.rb
cookbook 'myapp', '1.2.0'
然后:
chef install
chef push prod
节点下次 chef-client 就会回到 1.2.0
{
"cookbook_versions": {
"myapp": "= 1.2.0"
}
}
或:
knife environment set_attribute prod cookbook_versions.myapp "= 1.2.0"
如果是本地或 CI 管理 Cookbook:
git log
git checkout <old_commit>
git push
然后重新上传:
berks upload
# 或
knife cookbook upload myapp
适合“配置参数错误”而不是代码错误。
# attributes/default.rb(旧值)
default['myapp']['port'] = 8080
回滚:
{
"myapp": {
"port": 8080
}
}
knife node delete node1
knife client delete node1
然后重新 bootstrap(会丢失历史)
chef-client -o 'recipe[myapp@1.2.0]'
Chef 是声明式系统,回滚本质就是:
让系统状态回到你想要的旧声明
建议做法:
❌ Chef 没有自动 undo
❌ 不推荐靠 execute 手动删文件回滚
❌ 不要把回滚逻辑写进 recipe(会越写越乱)
Chef 回滚 = 重新应用旧版本 Cookbook / 属性 / Policy
如果你愿意,我可以:
你是用的 Chef Server / Policyfile / Berkshelf / Habitat 哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。