为什么Puppet中的exec资源始终具有notrun的previous_value?

时间:2018-07-23 16:44:10

标签: puppet

我有几个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

1 个答案:

答案 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处理该资源更好。我希望仅在一个或多个文件实际更改其属性时报告更改。