puppet - seguimiento - Títere-prueba si un paquete ya está definido?
fedex (4)
La forma más limpia de hacer esto es usar la función puppetlabs-stdlib de puppetlabs-stdlib :
ensure_resource(''package'', ''gnome-session-fallback'', {''ensure'' => ''present''})
Estoy escribiendo algunos módulos Puppet y tengo un paquete definido en dos módulos, por lo tanto, obtenga el siguiente error:
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate definition: Package[gnome-session-fallback] is already defined in file /etc/puppet/modules/vnc4server/manifests/init.pp at line 3; cannot redefine at /etc/puppet/modules/vino/manifests/init.pp:7 on node l
Por lo tanto, asegúrese de que el paquete no se haya definido, pero lo siguiente no funciona:
if ! defined (''gnome-session-fallback'') {
package { ''gnome-session-fallback'':
ensure => installed,
}
}
¿Alguien puede sugerir cómo solucionar esto, y en una escala más amplia, cuál es el enfoque "adecuado" para evitar choques como este en los módulos?
Para responder a mi propia pregunta sobre cuál es el enfoque "adecuado": este problema se trata en https://groups.google.com/forum/?fromgroups=#!topic/puppet-users/julAujaVsVk y jcbollenger ofrece lo que parece un Solución de "mejores prácticas": los recursos que se definen varias veces deben moverse a su propio módulo e incluirse en las clases de las que dependen. Apliqué esto y resolví mi problema.
Sin embargo, esto no responde por qué "si! Definido" falla ...
Te falta el paquete [] dentro de definido (). La forma correcta de hacerlo:
if ! defined(Package[''gnome-session-fallback'']) {
package { ''gnome-session-fallback'':
ensure => installed,
}
}
Una forma más limpia (entre varias formas) es crear un recurso de paquete virtual y luego realizarlo. Puede realizar el mismo paquete virtual varias veces sin error.
@package { ''gnome-session-fallback'':
ensure => installed,
}
Y luego donde lo necesites:
realize( Package[ ''gnome-session-fallback'' ] )