为什么在 Chef 或 Puppet 中更改配置文件中的行被视为反模式?据我了解,这有点像坏习惯。我假设这种文件编辑是以某种幂等方式和使用高级工具(例如 augeas)完成的。
为什么使用 ERB 模板部署整个文件被视为首选方法?
为什么在 Chef 或 Puppet 中更改配置文件中的行被视为反模式?据我了解,这有点像坏习惯。我假设这种文件编辑是以某种幂等方式和使用高级工具(例如 augeas)完成的。
为什么使用 ERB 模板部署整个文件被视为首选方法?
实际上,有很大一部分 DevOps 社区认为接受配置文件的系统/包默认值,并且只修改您需要augeas
的内容作为首选方法,Github devops 就是其中之一(如果您碰巧在 Puppet Conf 2012 上发现它们)。
我认为始终使用模板的默认模式会产生过高的维护负担,并且几乎总是需要您锁定堆栈中所有内容的特定版本,否则您可能会面临模板与该资源的较新版本不兼容的风险。
这两种选择都有用例,但总的来说,我更喜欢“尽可能少地拥有”实践而不是“即使你不必拥有一切”的实践。
就将系统设置为已知状态而言,部署整个文件比编辑要好,因为您确定完成后文件完全符合预期。
如果您正在修补寻找问题的潜在解决方案并手动编辑一些配置文件,您不必担心您所做的手动编辑会成为环境中不受控制的一部分。下次运行 chef-client 时,您知道状态将与 Chef 配方中指定的完全相同,并且不会包含您的编辑。
此外,一般而言,稳健地编辑文件比仅生成文件更难、更复杂。在基本情况下,您可能会编写一些幂等的东西,但如果文件包含语法错误或无效的东西,那么您的编辑将不再有效。
不过,与往常一样,有时您别无选择,而编辑是唯一的出路。