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.