我有几个Puppet exec
资源,其中一个具有onlyif
节。在报告和Puppetboard中,它们两个都始终显示为更改,因为它们的previous_value
始终为notrun
。这没有任何意义,尤其是对于没有onlyif
(每次都运行)的用户。
这是一个错误吗?我该怎么做才能解决此问题?
编辑:按照Ina的建议添加代码
exec { 'make-plugins-executable':
command => "/usr/bin/chmod a+x ${pluginsdir}/check*",
require => File['plugins']
}
exec { 'nagios-permissions':
command => "/usr/bin/chown -R nagios:nagios ${confdir}",
onlyif => "/usr/bin/test ! -z \"/usr/bin/find ${confdir} ! -user nagios -o ! -group nagios\""
}
此外,这是日志中的输出:
2018-07-23 11:40:48 +0100 /Stage[main]/Bcc_nagios/Exec[make-plugins-executable]/returns (notice): executed successfully
2018-07-23 11:40:48 +0100 /Stage[main]/Bcc_nagios::Master/Exec[nagios-permissions]/returns (notice): executed successfully
2018-07-23 11:40:58 +0100 Puppet (notice): Applied catalog in 10.09 seconds
它们开始运行,但在notrun
中显示为last_run_summary.yaml
答案 0 :(得分:0)
您写道,以下Exec
始终被报告为已更改对您没有任何意义,这显然是因为您希望onlyif
会防止这种情况发生:
exec { 'nagios-permissions': command => "/usr/bin/chown -R nagios:nagios ${confdir}", onlyif => "/usr/bin/test ! -z \"/usr/bin/find ${confdir} ! -user nagios -o ! -group nagios\"" }
但是确实有意义。您在onlyif
中给出的命令没有按照您认为的那样执行。没有Puppet级引号和转义符时,它的显示方式如下:
/usr/bin/test ! -z "/usr/bin/find /some/directory ! -user nagios -o ! -group nagios"
该命令将始终返回0(true):它仅测试给定的字符串是否为非空。没有运行find
命令;检验只是通过对论证的检验。结果,主chown
中的command
始终运行,并得到报告。
您似乎想要更多类似的东西:
exec { 'nagios-permissions':
command => "/usr/bin/chown -R nagios:nagios ${confdir}",
onlyif => "/bin/sh -c \"'!' -z `/usr/bin/find /some/directory '!' -user nagios -o '!' -group nagios`\""
}
请注意三种不同的引号(如果包括\
,则使用四种引号)。还要注意,您还需要确保如图所示调用了shell以运行命令,因为它依赖于命令替换。
但是,正如对该问题的评论所建议的那样,对于此类工作,使用递归File
资源可能比通过Exec
处理该资源更好。我希望仅在一个或多个文件实际更改其属性时报告更改。