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?

Gnarf
fuente

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'})
Utkarsh
fuente
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 .

Markdrayton
fuente
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 ...

nzidol
fuente
-2

simplemente,

file{ "$local_container":
  ensure => directory,
  replace => false,
}
invitado_002
fuente
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