Puppet:测试资源是否已定义,或创建它

Puppet:测试资源是否已定义,或创建它

我一直在尝试找出一种方法来测试资源是否已在另一个文件中定义,如果没有,如何创建它?一个简单的例子:

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

但是 -File[$local_container]似乎总是评估为真。有办法吗?

答案1

更好的方法是利用 puppetlabs 的 Ensure_resource 函数标准库

它以资源类型、标题和描述资源的属性列表作为参数。

假设您有一个测试用例,仅当资源尚不存在时才创建资源-

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

答案2

你的意思是“测试资源是否已经定义“?如果您定义了一个资源(即 ,file {}等等),如果您所描述的资源尚不存在,Puppet 将创建它(当然ensure => present,假设您传递了 )。

要检查资源是否已在目录中定义:

mark-draytons-macbook:~ mark$ cat test.pp 
file { "/tmp/foo": ensure => present }

if defined(File["/tmp/foo"]) {
  alert("/tmp/foo is defined")
} else {
  alert("/tmp/foo is not defined")
}

if defined(File["/tmp/bar"]) {
  alert("/tmp/bar is defined")
} else {
  alert("/tmp/bar is not defined")
}

mark-draytons-macbook:~ mark$ puppet test.pp 
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created

注:defined()取决于解析顺序

答案3

或者....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

请留意那些引号和花括号......

答案4

简单地,

file{ "$local_container":
  ensure => directory,
  replace => false,
}

相关内容