Puppet:仅在文件存在时才提供文件资源

时间:2017-11-12 16:39:05

标签: puppet

我想做的很简单:

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”。但在这一点上,我会寻求解决方案!

2 个答案:

答案 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"],
  }