如何将Exec配置为仅在另一个Exec运行时运行?
我有一个这样的清单:
file { $target:
ensure => directory
}
exec { "unzip foobar.zip -C ${target}":
unless => "file ${target}/some-file-form-archive"
}
exec { "chown -R $user ${target}":
onlyif => ???
}
我希望chown
仅在unzip foobar.zip
运行时运行。当然,我可以开始检查some-file-from-archive
是否已归$user
所有,但不知怎的,这似乎不对。
答案 0 :(得分:3)
这里已有答案:http://ask.puppetlabs.com/question/14726/run-exec-only-if-another-exec-ran/
像这样更改清单修复了我的问题:
exec { 'unpack file':
command => "unzip foobar.zip -C ${target}",
path => '/usr/bin',
creates => "${target}/some-file-form-archive",
require => File[$target, '<archive>'],
notify => Exec[fix archive],
}
exec { 'fix archive':
command => "chown -R ${user} ${target}",
path => '/bin',
refreshonly => true,
}
更新28.11.2014
由Felix Frank's comment推动我尝试了别的东西。而不是notify / refreshonly,您可以确保文件树中的所有资源都由用户拥有,如下所示:
exec { 'fix archive':
command => "chown -R ${user} ${target}",
path => '/bin',
unless => "test 0 -eq $(find ${target} \\! -user ${user} | wc -l)"
}
这样,即使在$user
运行后更改了所有者,也确保其为unpack file
。