仅当目录存在时才创建文件?

仅当目录存在时才创建文件?

我正在尝试编写一个模块,如果目录存在则创建文件,否则它不应该执行任何操作。

class puppetmodule{
  exec { 'chk_dir_exists':
    command => 'test -d /usr/dir1',
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
  } ->

  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}

以下是它抛出的错误。请给我一些建议。

错误:test -d /usr/dir1 返回 1,而不是 [0] 之一

答案1

类似这样的事情会起作用:

  $dir = "/usr/dir1"

  exec { "chk_${dir}_exist":
    command => "true",
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
    onlyif  => "test -d ${dir}"
  }

  file {"${dir}/test.txt":
    ensure => file,
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
    require => Exec["chk_${dir}_exist"],
  }

解释:

onlyif => "test -d ${dir}"

test -d意味着只有 的输出为真时,才会创建 Exec 资源。

require => Exec["chk_${dir}_exist"]

表示仅当 Exec 资源存在时才会创建 File 资源。

如果目录不存在,puppet 运行将生成错误,表明无法创建文件资源,因为 Exec 资源不存在。这是预料之中的,可以放心忽略,因为 puppet 目录的其余部分仍会应用。

如果目录存在,则创建并应用文件资源。

答案2

Puppet 是关于最终状态的。您可以确保文件存在且处于您指定的状态或不存在。如果您需要进行一些分支(如果) 逻辑,Puppet 也支持该逻辑。​​请参阅文档中的条件语句 -https://puppet.com/docs/puppet/latest/lang_conditional.html

$directory_exists = <insert logic here> 
   
if $directory_exists {
  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}

相关内容