用Chef / Puppet为什么不应该逐行更改配置文件?

9
为什么在Chef或Puppet中更改配置文件中的行被认为是反模式? 据我理解,这有点像一种不良习惯。我假设这种文件编辑是以幂等的方式和使用高级工具(例如augeas)完成的。
为什么将整个文件部署,包括ERB模板,被认为是首选方法?
你可以找到很多例子,其中dev-ops建议使用模板而不是文件编辑。例如here, here, here, 等等。

FYI,Chef 支持逐行编辑。http://rubydoc.info/gems/chef/Chef/Util/FileEdit - KCD
2个回答

13

事实上,DevOps社区中有很大一部分人认为接受系统/软件包默认的配置文件,并仅通过 augeas 修改需要修改的内容是首选方法,Github的devops就是其中之一(如果你碰巧在 Puppet Conf 2012 上遇到过他们)。

我认为始终使用模板的默认模式会产生太高的维护负担,并且几乎总是需要锁定整个堆栈中每个资源的特定版本,否则您可能会面临与较新版本的该资源不兼容的模板问题。

两种选项都有用例,但总体而言,我更喜欢“尽可能少地拥有”做法,而不是“即使您不必拥有也要拥有一切”的做法。


这是一个很好的答案。只是有一个小问题 - 是否有像 Chef 这样的工具,其开发者来自“根据需要修改”的阵营? - gorn

5
在设置系统状态时,整体部署文件比编辑更好,因为在完成后,您可以确保该文件完全符合预期。
如果您正在尝试找到问题的潜在解决方案并手动编辑某些配置文件,则无需担心手动编辑会留在环境中成为不受控制的部分。下次运行chef-client时,您知道状态将与Chef配方中指定的完全相同,并且不包含您的编辑内容。
此外,通常情况下,对文件进行强大而复杂的编辑比生成文件要困难得多。您可能编写了一些在基本情况下是幂等的内容,但如果文件包含语法错误或其他无效内容,则您的编辑将不再起作用。
总之,有时您无法选择,编辑是唯一的办法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接