cwd在exec中的onlyif之前评估-人偶5.5.12

时间:2019-07-04 08:12:33

标签: puppet

在Puppet 5.5.0中可以正常工作,但在Puppet 5.5.12中将不再起作用:

exec { 'example' :
    command     =>  "date",
    cwd     =>  "/fu",
    onlyif  =>  "ls /fu",
    path    => ['/usr/bin', '/usr/sbin', '/bin', ],
}

错误消息: 无法评估:工作目录/ fu不存在!

因此,现在,以某种方式使cwd得到评估,然后才使后者徒劳无功。知道从5.5.0到5.5.12的此次发行版中它来自哪里吗? 是否有错误或预期行为?到目前为止我什么都找不到。

感谢任何输入:)

2 个答案:

答案 0 :(得分:2)

  

因此,现在cwd现在必须在   后者徒劳。这个次要发行版本的任何来源   从5.5.0到5.5.12?

这是Puppet问题PUP-9194,他们声称这是回归的解决方法。它是根据Puppet 6进行报告的,并记录在Puppet 6.0.2的发行说明中。票证上的注释线程报告该修复程序也已应用于Puppet 5代码库。 Puppet 5系列中似乎没有添加发行说明,但是Puppet 5.5.7的时机恰到好处。

  

是否存在错误或预期的行为?我不能   到目前为止找到任何东西。

显然,行为改变是故意的;这是被认为是越野车的旧行为。我在这里注意到,该结论似乎是基于历史惯例,而不是文档(因此,您所依赖的行为甚至与以前的行为都不同)。 onlyif的文档指定了多个Exec属性,这些属性同时适用于主要commandonlyif命令,而cwd不在其中。

答案 1 :(得分:1)

我担心这是故意的行为。来自https://puppet.com/docs/puppet/5.5/types/exec.html#exec-attribute-cwd

  

cwd

     

从中运行命令的目录。如果此目录不存在,该命令将失败。

您可以重新编码为这样吗?

exec { 'example' :
    command     =>  "cd /fu && date",
    onlyif  =>  "[ -d /fu ]",
    path    => ['/usr/bin', '/usr/sbin', '/bin', ],
}