如何让 Puppet exec 在失败时清理目录?
How to get Puppet exec to cleanup directory on failure?
如果另一个 exec
失败,我正在尝试找到 运行 一个 exec
的方法(这样我就可以清理第一个 exec 创建的目录)。
我的场景是:
exec
创建目录但未完全完成设置(因网络错误而失败)。
exec
使用 creates => $target_dir
参数,因此后续 运行 将不会再次尝试设置文件夹。
- 失败后再次应用 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} 是您的实际命令。
如果另一个 exec
失败,我正在尝试找到 运行 一个 exec
的方法(这样我就可以清理第一个 exec 创建的目录)。
我的场景是:
exec
创建目录但未完全完成设置(因网络错误而失败)。exec
使用creates => $target_dir
参数,因此后续 运行 将不会再次尝试设置文件夹。- 失败后再次应用 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} 是您的实际命令。