如何让 Puppet exec 在失败时清理目录?

How to get Puppet exec to cleanup directory on failure?

如果另一个 exec 失败,我正在尝试找到 运行 一个 exec 的方法(这样我就可以清理第一个 exec 创建的目录)。

我的场景是:

  1. exec 创建目录但未完全完成设置(因网络错误而失败)。
  2. exec 使用 creates => $target_dir 参数,因此后续 运行 将不会再次尝试设置文件夹。
  3. 失败后再次应用 Puppet 清单,exec 被跳过。

如果之前的 exec 失败,我很乐意删除该目录(可能使用 file 类型)。我知道这类似于 http://ask.puppetlabs.com/question/14726/run-exec-only-if-another-exec-ran/ and run Exec only if another Exec ran。但我只想在失败时通知(可能不是 0 退出)。

有什么办法可以做到这一点吗?

我认为您无法从 exec 调用中捕获退出代码,但您可以做的是使用测试来查看 运行第一个 exec 成功存在。

例如,

exec { 'first-exec': cmd => 'foo', creates => '/var/www/foo/bar', path => '/var/www/foo', } -> exec { 'second-exec': cmd => 'rm -rf /var/www/foo', unless => 'test -d /var/www/foo/bar', }

这会运行 first-exec,除非存在 /var/www/foo/bar,否则它会运行 second-exec

您可以在 exec 中轻松执行的操作是:

Exec { 'exec_name':
    cmd     => "${some_command} || rm -rf ${directory}",
    creates => $directory,
}

其中 ${some_command} 是您的实际命令。