这个问题与How can I use the output of a command in cfengine3非常相似,但我认为答案不适用于我的情况。
我想通过“git pull”更新 git 存储库,并根据这是否会导致更改触发一些后续操作。
简化,如果通过某些主体有类似“匹配输出和设置类”if_output_matches
的东西,我会想使用这样的东西:
bundle agent updateRepo {
commands:
"/usr/bin/git pull"
contain => setuidgiddir_sh("$(globals.user)","$(globals.group)","$(target)"),
classes => if_output_matches("Already up-to-date.","no_update");
reports:
no_update::
"nothing updated";
}
body contain setuidgiddir_sh(owner,group,folder) {
exec_owner => "$(owner)";
exec_group => "$(group)";
useshell => "true";
chdir => "$(folder)";
}
那么,是否可以使用一个可能很昂贵的命令的输出并以此为基础做出一些决定?
该execresult
功能对我来说不是一个好的选择,因为 a) 拉动有时可能会变得昂贵(不推荐遵循 cfengine3 参考)和 b) 不允许指定用户、组、工作目录——这对我来说很重要。存储库位于用户空间中,不属于 root。