我想做的很简单:
1
将/source/file
复制到/target/file
。我使用以下方法实现了这一目标:
file { 'my_file_copy':
ensure => file,
source => 'file:/source/file',
path => "/target/file",
}
2
但是,如果文件/source/file
不存在,我不希望它执行此任务。
我真的很难接受这种逻辑。我尝试了下面的解决方案,但它在木偶运行期间抛出异常。
puppet: if one file exists then copy another file over
有没有更好的方法来完成这项任务? 理想情况下,我只想使用“文件”并避免使用“exec”。但在这一点上,我会寻求解决方案!
答案 0 :(得分:4)
因为Puppet是一种只声明结束状态的声明性语言,所以你所描述的命令性逻辑 - 如果A,做X - 通常很难表达。
就个人而言,我会尽量避免在文件A存在的情况下复制文件B的要求。通常有更好的方法。
如果要求需要保留,那么在这里使用Exec对我来说听起来是个不错的选择。
exec { 'my_file_copy':
command => 'cp /source/file /target/file',
onlyif => 'test -e /source/file',
creates => '/target/file',
path => '/bin',
}
答案 1 :(得分:0)
你可以使用这个逻辑:
$file = "/source/file"
exec { "chk_${file}_exist":
command => "true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => "test -f ${file}"
}
file {"/target/file":
ensure => file,
source => 'file:/source/file',
owner => 'root',
group => 'root',
mode => '0750',
require => Exec["chk_${file}_exist"],
}