Al hacer una puppet agent
llamada desde una nueva imagen, recibo un err: Could not find class custommod
error. El módulo en sí es el /etc/puppet/modules/custommod
mismo que todos los otros módulos que estamos llamando, pero este es obstinante.
[site.pp]
node /clunod-wk\d+\.sub\.example\.local/ {
include base
include curl
include custommod
class{ "custommod::apps": frontend => "false}
[...]
}
Cuando el puppetmaster se ejecuta con salida de depuración, encuentra claramente la información para base y curl:
debug: importing '/etc/puppet/modules/base/manifests/init.pp' in environment production
debug: Automatically imported base from base into production
debug: importing '/etc/puppet/modules/curl/manifests/init.pp' in environment production
debug: Automatically imported curl from curl into production
err: Could not find class custommod for clunod-wk0130.sub.example.local at /etc/puppet/manifests/site.pp:84 on node clunod-wk0130.sub.example.local
La línea 84 es include custommod
Un directorio abreviado y estructura de archivos:
/etc/puppet
|- manifests
| |- site.pp
|
|- modules
|- base
| |- manifests
| |- init.pp
|
|- curl
| |- manifests
| |- init.pp
|
|- custommod
|- files
| |- apps
| |- [...]
|
|- manifests
|- init.pp
|- apps.pp
Verifiqué la ortografía:}
El contenido del init.pp
directorio custommod es completamente irrelevante:
class custommod {
}
La intención es crear una clase vacía para el archivo apps.pp, que es donde está la carne.
class custommod::apps {
[lots of stuff]
}
Solo que nunca llega al archivo de aplicaciones. Si comento el include custommod
, el error anterior se genera en la class{ "custommod::apps": frontend => "false}
línea en su lugar.
¿Qué me falta en mi búsqueda para averiguar cómo se genera este error? Tengo que tener en cuenta que este repositorio funciona bien si se ejecuta localmente a través de puppet apply
.
fuente
could not retrieve catalog from remote server:
error, lo que probablemente sea la razón.custommod
, tal vez incluso intente eliminarlo porinit.pp
completo, ya que no debería ser necesario.strace
e intentar averiguar qué archivos está intentando leer de esa manera.Respuestas:
Entonces ... esto es un poco embarazoso, pero ...
Ambientes
Justo en mi
/etc/puppet.conf
archivo está esto:Después de lanzarlo
strace
para descubrir dónde estaba buscando archivos, noté algo. Estaba buscando custommod debajo/etc/puppet/environments/production/modules
, y como había un directorio allí (vacío), no fue a verificar/etc/puppet/modules
. Aparentemente, al importar un módulo, verifica la presencia de directorio, en lugar de la presencia de archivo (init.pp).Elimine ese directorio vacío, las cosas comienzan a funcionar.
Ejecute el agente de marionetas utilizando un entorno diferente, las cosas comienzan a funcionar.
Moraleja de la historia:
fuente
puppet config print modulepath
.Me encontré con este mismo problema, pero tuve una solución diferente
Si genera un módulo de títeres así:
Creará un módulo
example_module
con elfoo
nombre del espacio. Todos los manifiestos estarán dentro de un directorio llamadofoo-example_module
El nombre de la clase definida en init.pp debe ser el mismo que el nombre de la carpeta.
Solución simple:
Si ejecuta puppet-lint, le avisará con el siguiente mensaje:
Si usa un Puppetfile con r10k o librarian-puppet, es posible que también necesite eliminar el espacio de nombre para que los archivos se coloquen sin el prefijo 'foo' en el directorio de módulos.
antes de:
después:
fuente
Otro problema que puede ocurrir es cuando su módulo tiene un
metadata.json
archivo no válido .Asegúrese de que el
metadata.json
archivo tenga todos los campos obligatorios (consulte https://docs.puppet.com/puppet/latest/reference/modules_metadata.html#allowed-keys-in-metadatajson )fuente
Se encontró con un problema similar con Puppet 3.7.1 para Fedora: no se pudo encontrar la clase Puppet para my.server
Solución:
Entonces funciona.
fuente
Tuve un problema similar. En mi caso, el nombre de la clase era "onehost :: change_IoT_password_reminder". Después de usar strace, descubrí que Puppet estaba buscando un archivo de módulos / onehost / manifiestos / change_iot_password_reminder.pp. Parece que usar letras mayúsculas en los nombres de clase no es una buena idea, incluso si no es la primera letra de la clase.
fuente