在一个特定的项目中,我有许多带管道的Puppet exec
资源。这似乎工作得很好。
exec { 'foobar':
command => 'foo | bar',
}
但是,有时候foo
会失败。默认行为是仅为管道中的最后一个命令报告退出代码。我可以手动解决这个问题。
exec { 'foobar':
command => 'set -o pipefail; foo | bar',
provider => shell,
}
但是,我想确保在所有这些情况下自动发生这种情况。我想避免手动查找/替换和审核exec
的所有用途。
答案 0 :(得分:1)
- 我错过了一些有用的属性吗?
不,Exec
没有可自动在命令中添加其他代码的属性。
- 我可以使用包装吗?
我不相信我理解你的“包装”是什么意思,但请看下面的内容。
- 不幸的是,我在查看自定义资源吗?
如果您在询问是否需要实现本机自定义类型,那么肯定不会。毫无疑问,您可以使用(DSL级别)定义的类型解决此问题,但您需要将所有Exec
声明调整为已定义类型的声明。这可能就是你所说的“包装” - 我很确定你的特定用途没有现成的,但创建一个并不难:
define mymodule::exec (
command => $title,
creates => 'NOT SET',
cwd => 'NOT SET',
# ... all other regular parameters ...
) {
$real_provider = $provider ? { 'NOT SET' => 'shell', default => $provider }
if $real_provider == 'shell' {
$real_command = "set -o pipefail; $command"
} else {
warning('Non-shell command declared via mymodule::exec')
$real_command = $command
}
exec { $title:
command => $real_command,
provider => $real_provider,
creates => $creates ? { 'NOT SET' => undef, default => $creates },
cwd => $cwd ? { 'NOT SET' => undef, default => $cwd },
# ... all remaining regular parameters ...
}
}