总的来说(据我所知),主要的基础设施/configurationpipe理系统(Puppet,Chef,Ansible和SaltStack)是基于你的服务器是“牛”而不是“宠物”的理念。看起来他们可能会与您将configuration直接更改到服务器的想法相悖。
虽然我曾经和Chef,Puppet和Salt一起工作过,但从一个开发者和Vagrant合作开发个人盒子的angular度来看,我的经验总是无法回答这个问题。
问题是:这些系统中的任何一个都支持直接向服务器进行更改的用例,并且不用担心本地守护进程会用官方configuration覆盖它呢? 您应该能够做出改变(并且理想地设定在其期间被覆盖保护的时间窗口),而不对厨师食谱或盐状态进行任何显着改变。 这个用例的全部目的是为了避免让公司的摩擦和寻找合适的(例如)盐状态并确保没有任何副作用并且经历释放/部署循环和testing,以确保你在这个过程中没有任何东西。
如果你想要一个更具体的例子,假设你想调整多个日志的logrotate设置,来平衡保存驱动器空间和访问历史数据。 您可以了解在任何特定环境下您将保存多less数据,以及您认为需要保留多less数据,但是您不能100%确定。 (1)任何人抱怨说,他们需要更多的历史数据来进行一些debugging任务,或者(2)您没有像预期的那样节省更多的驱动器空间,并且需要保存。
如果你的configurationpipe理系统允许它变成一个,那么五分钟的变化实际上可能是一个五分钟的变化,然后一旦你确定你希望所有的变化满足特定的angular色,你可以让厨师/木偶/盐/ Ansiblepipe理你的。
注意:我不是在询问configurationpipe理系统尚未pipe理某种types的configuration文件的用例,而是一个已经在pipe理某种types的configuration文件的情况,但是您想进行本地更改并且让他们在给定的机器上优先,而不会被覆盖。
有没有这些系统支持我的使用情况? (不要求我与系统作斗争或做后空翻使其工作。)
configurationpipe理系统通过在更改期间在目标主机上禁用它们来支持此用例。 以厨师为例,您可以在节点上禁用厨师客户端。 这会导致节点在Chef服务器中显示为“stale”,但是这有助于提醒节点不符合规定,并且应该向前滚或回滚该更改。
对于单个文件,你可以做一个chattr +我,我没有看到任何工具知道如何绕过。
一个额外的想法厨师 – 对于文件模板,在原始的厨师运行之前文件不存在,你可以告诉厨师:create_if_missing,使它只会触摸一次文件。
你没有提到PowerShell DSC,但是我会引用一些方法 – 特别是当PowerShell进入到Windows以外的其他系统。 这些方法中的一些可能在其他选项中具有等同物。
我可以想象用DSC处理你的情况的四种方法:
以下select有一个优势,使您的变化“配方的一部分”,recreatable。
无论您是使用DSC push还是pull模式,都可以为单台或多台进行这些更改。
目前忽略了从CM系统pipe理系统configuration的概念和评论者已经注意到的同时没有这样做的概念的不协调的可能性。
应该提到的是,对于这种用例,通常可以利用已经成为现代服务器软件的约定 – .dconfiguration目录,其允许在正确的位置插入额外的configuration片段。
这样你可以通过例如/etc/logrotate.d/local-whatever让你的CMpipe理你的configuration,同时你还可以通过添加/etc/logrotate.d/local-aaa-whatever特定的机器/etc/logrotate.d/local-aaa-whatever或者类似的,然后这会导致软件处理你的覆盖设置。
很显然,如果CM的目标是控制整个/etc/logrotate.d/配方,除了在CM内部做事情之外,你还没有其他办法。