Я пытался найти способ проверить, определен ли ресурс в другом файле, а если не создать его? Быстрый пример:
if File[$local_container] {
alert("Testing - It existed $local_container")
} else {
file{ "$local_container":
ensure => directory,
}
}
Тем не мение - File[$local_container]
всегда кажется истинным. Есть ли способ сделать это?
Вы имеете в виду "проверить, есть ли ресурс уже определены"? Если вы определяете ресурс (т. Е. 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()
является зависит от порядка синтаксического анализа.
Лучший способ сделать это - использовать функцию sure_resource из puppetlabs. stdlib
Он принимает тип ресурса, заголовок и список атрибутов, которые описывают ресурс как параметры.
скажем, у вас есть тестовый пример для создания ресурса, только если он еще не существует -
ensure_resource('package', 'test-pkg', {'ensure' => 'present'})
Или....
unless File["${local_container}"] {
file{ "${local_container}":
ensure => directory,
}
}
И следите за этими цитатами и фигурными скобками ...
просто,
file{ "$local_container":
ensure => directory,
replace => false,
}