Marioneta: prueba si el recurso está definido o créalo


14

He estado tratando de encontrar una manera de probar si un recurso ya está definido en otro archivo y, si no, ¿crearlo? Un ejemplo rápido:

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

Sin embargo, File[$local_container]siempre parece evaluar como verdadero. ¿Hay alguna forma de hacer esto?

Respuestas:


10

La mejor manera de hacerlo es haciendo uso de la función sure_resource de puppetlabs stdlib

Toma un tipo de recurso, título y una lista de atributos que describen un recurso como parámetros.

Supongamos que tiene un caso de prueba para crear solo el recurso si aún no existe.

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

Esto parece mucho más limpio, pasando la marca de verificación de esta manera. ¡Gracias por el consejo!
— Gnarf

15

¿Quiere decir "probar si un recurso ya está definido "? Si define un recurso (es decir, file {}etc.) Puppet creará lo que está describiendo si aún no existe (suponiendo que lo apruebe ensure => present, por supuesto).

Para verificar si un recurso ya está definido en el catálogo o no:

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

Nota: defined()es dependiente de fin de análisis .


55
Esa parte "depende del orden de análisis" hace que sea casi inútil.
— joerx 01 de

2

O....

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

Y vigile esas citas y llaves ...


-2

simplemente,

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

No, si el "$local_container"archivo ya estaba definido en otro lugar (por ejemplo, por algo que quería controlar los permisos / propietario), no puede definir el mismo recurso dos veces.
— Gnarf
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.