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