Estoy trabajando en un proyecto de refactorización para un gran repositorio de módulos de marionetas personalizados. Esto incluye una actualización de Puppet 2.x a 3.2.4. Cuando finalmente alcancé la masa crítica y comencé a probar algunos de los cambios, rápidamente me encontré con el siguiente error:
Info: Retrieving plugin
Info: Loading facts in /etc/puppet/modules/base/lib/facter/elversion.rb
Info: Loading facts in /etc/puppet/modules/base/lib/facter/site.rb
Info: Loading facts in /var/lib/puppet/lib/facter/elversion.rb
Info: Loading facts in /var/lib/puppet/lib/facter/site.rb
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
Después de revisar varios informes de errores de títeres, decidí intentar simplificar el problema. Reduje el problema a dos clases, definidas como tales:
class base::includes { }
y
class prod_secure::base::includes inherits base::includes { }
Un nodo que no incluye nada más que prod_secure::base::includes produce el resultado de error mencionado anteriormente. La única advertencia posiblemente relacionada que veo puppet-lint
es:
WARNING: class inherits across module namespaces on line 1
...pero eso es sólo una advertencia, y no creo que debería estrellar al títere en una carrera de agente. ¿Algunas ideas? ¿Es posible que el esquema de espacio de nombres que he configurado no sea compatible con Puppet?
ACTUALIZAR
Decidí llevar las pruebas un paso más allá y cambiar el nombre de la clase heredera. La nueva definición es:
class prod_secure::base2::includes2 inherits base::includes { }
El resultado es el mismo... stack level too deep
. Me parece que este problema no tiene nada que ver con el espacio de nombres.
ACTUALIZACIÓN 2
Durante la ronda anterior de depuración me perdí un detalle destacado:
Wed Sep 11 11:25:09 -0400 2013 Puppet (info): Caching node for puppet
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/nodes.pp' in environment production
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/config_file.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base2/includes2.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base2::includes2 from prod_secure/base2/includes2 into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base/includes.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base::includes from prod_secure/base/includes into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (err): stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Wrapped exception:
stack level too deep
No puedo decir que estoy seguro de por qué, pero todavía estaba intentando cargar prod_secure::base::includes, y esa era la entrada ofensiva. Después de eliminar ese archivo por completo, la prueba pasó. Vuelvo a la teoría del espacio de nombres...
Respuesta1
Quizás quieras probar Puppet 3.2.3.
3.2.2 tenía#21376problema similar, pero se solucionó en 3.2.3, podría ser una regresión