
Recibo de forma regular pero aleatoria el siguiente mensaje de error cuando ejecuto el cliente Puppet en máquinas (no demonizadas):
err: No se pudo crear: Error en la ruta del parámetro: las rutas de archivo deben estar completas Advertencia: no usar caché en un catálogo fallido Advertencia: No se pudo crear una instancia de la configuración: Error en la ruta del parámetro: Las rutas de archivo deben estar completas
Parece moderadamente claro lo que significa: que no tengo una ruta completamente calificada en un parámetro. Sin embargo no me dicedóndePuedo encontrar esto para solucionarlo, o incluso qué parámetro es incorrecto :(
(Si uso la opción de depuración, funciona constantemente, por lo que parece un problema con el almacenamiento en caché de los manifiestos... Aún así, sería bueno deshacernos de esto para uso en producción)
Nota: no puedo hacer que esto suceda de manera consistente :/
Respuesta1
[Respondiendo a mi propia pregunta después de insistir en la configuración por un tiempo]
Me las arreglé para rastrear esto hasta uno de los módulos que escribí (por supuesto), pero se debió al uso de una variable que no funcionó como esperaba.
Lo que paso fue:
$variable_dir = "/etc/puppet/bar"
class foo {
file { $variable_dir:
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File[$variable_dir],
}
}
..lo que básicamente causó cierta confusión con el Archivo [] usando una variable. Los reemplacé con el valor explícito de la variable por ahora y todo funciona bien, ¡pero fue una sorpresa! Supongo que mi comprensión del alcance y de cuándo se pueden definir/usar las variables está algo fuera de control con Puppet, así que voy a aprender que unlotemejor...
Parece haber causado el mismo comportamiento que el uso de rutas no completamente calificadas en cadenas de archivos, al no encontrar la variable o no obtener el valor. Bastante extraño, de todos modos.
Editar: Es muy posible que la variable no se haya encontrado en el alcance, por lo que estaba vacía y definitivamente no era una ruta completamente calificada. Sin embargo, no explica por qué esto no fue consistente...
Respuesta2
Cuando pruebes la configuración de tu marioneta, puedes hacerlo ejecutando
puppetd --test
lo que le dará un resultado mucho más detallado y debería mostrarle dónde falla. Si está realmente desesperado, puede continuar --debug
para obtener aún más resultados.
Si desea buscar en sus .pp
archivos, debe buscar un
file { "path/to/file":
...
}
que falta /
(es decir, debería leerse /path/to/file
en su lugar)
Respuesta3
Puede poner la ruta real a la propiedad de ruta, luego funciona. Esto funciona para mí:
$variable_dir = "/etc/puppet/bar"
class foo {
file { 'variable_dir':
path => ${variable_dir},
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File['variable_dir'],
}
}
Respuesta4
La ruta completa debe colocarse en el nombre de la clave, a menos que esté utilizando path
el parámetro.
Por ejemplo:
file { '/full/path':
ensure => directory,
recurse => true,
}
o:
file { 'my name':
path => "/full/path",
ensure => directory,
recurse => true,
}
Si está utilizando una variable, asegúrese de que esté definida. Si está en una clase diferente, use $class::variable
la sintaxis estándar. Para obtener más información, ejecute Puppet con -vd
el parámetro (detallado+depuración).