Puppet: проверьте, определен ли Resource, или создайте его


14

Я пытался найти способ проверить, определен ли ресурс в другом файле, и если нет, то создать его? Быстрый пример:

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

Тем не менее - File[$local_container]всегда кажется, чтобы оценить истину. Есть ли способ сделать это?

Ответы:


10

Лучший способ сделать это - использовать функцию sure_resource из puppetlabs stdlib

Он принимает тип ресурса, заголовок и список атрибутов, которые описывают ресурс как параметры.

скажем, у вас есть тестовый случай, чтобы создать ресурс, только если он еще не существует

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

Это кажется намного чище, если поставить галочку таким образом. Спасибо за чаевые!
Gnarf

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

2

Или....

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

И следите за этими цитатами и фигурными скобками ....


-2

просто,

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

Нет, если "$local_container"файл уже был определен где-то еще (например, чем-то, кто хотел управлять разрешениями / владельцем), вы не можете определить один и тот же ресурс дважды.
gnarf
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.