cfengine3 输出目录

cfengine3 输出目录

我已经开始运行 cfengine3,使用 cf-execd 以每 5 分钟的默认间隔安排 cf-agent 的运行。

cf-execd 捕获 cf-agent(使用 --inform 选项运行)的输出,将输出存储在 $WORKDIR/outputs 目录中,并通过电子邮件发送结果(但前提是结果与上次运行不同)。您可以想象,每 5 分钟输出一个文件,这个目录很快就会被大量文件填满,因此希望用户清理这个目录。

我创建了一条规则,该规则将删除超过 3 天的输出文件,但是这会产生一个问题,即每次输出都会与前一个不同(因为每次都会删除一个新文件),因此会发送一封电子邮件。因此,我从输出目录中的大量文件转到收件箱中的大量电子邮件!

我真正想要的是,当某些承诺得到修复时,抑制消息,特别是删除输出目录中的文件的承诺。这实际上只会否定该承诺的 -I 选项。或者,如果我可以将时间界限从“现在”更改为固定点(例如每周三),我至少可以将电子邮件数量限制为每周一封。

答案1

看起来你还没有得到问题的答案,所以我本着“迟做总比不做好”的精神现在发布此帖。

你问:

我真正想要的是,当某些承诺得到修复时,抑制消息,尤其是删除输出目录中的文件的承诺。它本质上只会否定该承诺的 -I 选项。

据我所知,不可能否定单个承诺的 --inform 开关。

或者,如果我可以将时间边界从“现在”更改为固定点(比如说每周三),我至少可以将电子邮件数量限制为每周一封。

这可以使用“ifelapsed”参数来实现 - 它给出了运行承诺的最低频率。考虑这个例子:

bundle agent garbage_collection {     
    files:
        "$(sys.workdir)/outputs" 
            delete => tidy,
            file_select => days_old("3"),
            depth_search => recurse("inf"),
            action => weekly;
}

body action weekly {
    ifelapsed => 10080; # one week, ie (60*24*7) minutes
}

或者,您可以使用特殊类在星期三运行此承诺。我更喜欢这种ifelapsed方法,它不依赖于工作日(您永远不知道该主机是否可能在星期三不运行...),如下所示:

bundle agent garbage_collection {     
    files:
        Wednesday::
            "$(sys.workdir)/outputs" 
                delete => tidy,
                file_select => days_old("3"),
                depth_search => recurse("inf");
}

答案2

实际上我得出了一个更简单的答案——不要使用--inform运行cf-agent。

只需让 cf-engine 做它的事情,不要试图跟踪正在进行的修复,主要关注的是系统是否已经到达期望状态,而不是它如何到达那里。

对于想要详细追踪系统每个变化的变更管理机制来说,这似乎是一件令人厌恶的事情,然而我发现这是唯一允许人们使用 cf-engine 同时保持理智的思维方式。

当然,您的回答对于我提出的问题是完全正确的,这就是我勾选它的原因。

答案3

在我的“继承”部署中,我发现garbage_collection中已经有一个包site.cf,但它没有从任何地方调用。我需要将它添加到 中的包序列中promises.cf

不确定在新的部署中是否会出现这种情况;如果是这样,你可能需要更新你的承诺(我知道我需要)

希望这对你有帮助,卡梅伦

相关内容