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

cwd evaluated before onlyif in exec - puppet 5.5.12

在 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 现在以某种方式在 onlyif 之前进行评估,使后者徒劳无功。知道从 5.5.0 到 5.5.12 的次要版本中这是从哪里来的吗? 是否存在错误或预期行为?到目前为止我找不到任何东西。

欢迎任何意见:)

这恐怕是有意为之的行为。来自 https://puppet.com/docs/puppet/5.5/types/exec.html#exec-attribute-cwd:

cwd

The directory from which to run the command. If this directory does not exist, the command will fail.

你能重新编码成这样吗?

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

So somehow cwd is now getting evaluated before the onlyif making the latter futile. Any idea where this comes from in this minor release from 5.5.0 to 5.5.12?

这是 Puppet 问题 PUP-9194,他们声称这是对回归的修复。据报道,它针对 Puppet 6,并记录在 Puppet 6.0.2 的发行说明中。票证上的评论线程报告说,该修复程序也适用于 Puppet 5 代码库。 Puppet 5 系列中似乎没有添加发行说明,但 Puppet 5.5.7 的发布时间恰到好处。

Is there a bug or intended behavior? I could not find anything so far.

显然行为改变是有意的;这是被认为有问题的旧行为。我在这里注意到,该结论似乎是基于历史实践,而不是文档(因此您所依赖的行为与更早的行为不同)。 onlyif 的文档指定了几个 Exec 属性,这些属性既适用于主要的 command 也适用于 onlyif 命令,cwd 不在其中。