如何在单个客户端上暂时禁用 cfengine 承诺

如何在单个客户端上暂时禁用 cfengine 承诺

我想知道在紧急情况下,暂时停止单个 cfengine 客户端执行某个承诺的最好、最快、最简单的方法是什么,而无需在 cfengine 服务器(集线器)上进行任何更改。

到目前为止,我的解决方案是编辑/var/cfengine/inputs/promises.cf并注释掉我想要停止的服务(在本例中,我希望 cfengine 停止尝试重新启动 mysqld)。然后我重新启动了 cfengine。但我不确定这是否是最好的方法(或者即使它不会破坏任何东西)。到目前为止,它似乎没有引起任何问题,但我只是想知道是否有更“可接受”的方法。

答案1

我认为您使用的方法是最好的,尽管重启 CFEngine 应该不是必需的。请注意,这只是一个临时措施。一旦策略服务器上的某些策略发生变化,它将触发策略的重新下载,这将覆盖您在 中所做的更改/var/cfengine/inputs

因此,请确保在两端都进行了更改。在客户端内部进行更改/var/cfengine/inputs可使更改立即生效,在服务器内部进行更改/var/cfengine/masterfiles可使更改永久生效。这是我自己多次使用过的方法。

答案2

下次 cf-agent 运行 update.cf(从策略服务器获取新的主文件并覆盖您的编辑)时,对输入/的任何更改都将被阻止。所以我认为您的快速破解可能只会暂时起作用。这也意味着(除非我弄错了,我很可能弄错了)任何非暂时性的修复都必须涉及在其服务器(集线器)上编辑策略。

然后,对(一般)策略的编辑将使相关承诺以仅在特定主机上设置的某些类的否定为条件,例如,如果主机是 10.20.30.40,则向承诺添加 ifvarclass => "!ipv4_10_20_30_40" 属性。(请注意,您也可以对承诺的 class:: 条件执行相同操作,但这可能会影响后续承诺或与已适用于它的任何 class:: 条件纠缠在一起。)

相关内容