木偶:测试是否定义了资源或创建了它


14

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

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

但是- File[$local_container]似乎总是评估为真。有没有办法做到这一点?

Answers:


10

更好的方法是利用puppetlabs stdlib中的sure_resource函数

它具有资源类型,标题和将资源描述为参数的属性列表。

说您有测试用例,仅在不存在资源的情况下才能创建该资源-

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

这样看起来更干净,通过了复选标记。谢谢你的提示!
gnarf 2015年

15

您的意思是“测试是否已定义资源”吗?如果您定义资源(例如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()依赖解析顺序


5
“取决于解析顺序”部分使它几乎无用。
joerx 2014年

2

要么....

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

并请注意那些引号和花括号。


-2

只是,

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

是的,如果"$local_container"文件已经在其他位置定义(例如,要控制权限/所有者的内容),则不能两次定义相同的资源。
gnarf 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.