代码之家  ›  专栏  ›  技术社区  ›  ilvidel

为什么Puppet中的exec resources总是具有以前的notrun值?

  •  0
  • ilvidel  · 技术社区  · 6 年前

    我有几个木偶 exec 资源,其中一个具有 onlyif 诗节。在报告和木偶板中,他们两个总是以 改变 ,因为他们 previous_value 总是 notrun . 这没有任何意义,尤其是对于没有 仅当 (每次运行)。

    这是虫子吗?我能做些什么来解决这个问题?

    编辑:按照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
    

    他们跑了,但他们表现得像 诺特伦 在里面 last_run_summary.yaml

    1 回复  |  直到 6 年前
        1
  •  0
  •   John Bollinger    6 年前

    你在信中写道,以下这些对你来说毫无意义 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\""
    }
    

    但它 有道理。你下达的命令 仅当 不像你想象的那样。以下是没有木偶级别引用和逃脱的情况:

    /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 这类作业的资源,而不是通过 执行程序 . 我希望只有当一个或多个文件的属性发生更改时才报告更改。