Лялька: Перевірте, чи визначений ресурс, або створіть його


14

Я намагався знайти спосіб перевірити, чи ресурс вже визначений в іншому файлі, а якщо не створити його? Швидкий приклад:

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

Однак - File[$local_container]завжди, здається, оцінюють як правду. Чи є спосіб це зробити?

Відповіді:


10

Кращий спосіб зробити це, використовуючи функцію secure_resource від puppetlabs stdlib

Він приймає тип ресурсу, заголовок та список атрибутів, які описують ресурс як параметри.

скажімо, у вас є тестовий випадок, щоб створити ресурс лише тоді, коли він ще не існує-

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

Це здається набагато чистішим, таким чином передаючи галочку. Дякую за пораду!
gnarf

15

Ви маєте на увазі "тест, якщо ресурс уже визначений "? Якщо ви визначите ресурс (тобто, file {}тощо), Лялька створить те, що ви описуєте, якщо його ще немає (якщо 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.