
Lo más extraño está sucediendo durante esta ejecución de Puppet (usando Puppet Apply
) y me tiene perplejo. He probado mis canales habituales para encontrar soluciones pero no encuentro nada sobre el tema. Pido disculpas por ser tan detallado, simplemente no quiero omitir nada :\
-
Mi clase
class c2c::profile::app::logio::stage_support {
# Log.io plugin
# Create plugin directories
exec { "create_codec_dir":
command => "/bin/mkdir --parents /etc/logstash/plugins/logstash/codecs --mode=0775",
creates => '/etc/logstash/plugins/logstash/codecs',
}
# Install plugin
file { "logio_plugin_file":
# update: added in response to a serverfault comment
ensure => file,
path => '/etc/logstash/plugins/logstash/codecs/logio.rb',
mode => '0775',
owner => 'root',
group => 'root',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
require => Exec['create_codec_dir'],
notify => Service['logstash'],
}
}
.. y miLa carrera de marionetas se está saltando ellogio_plugin_file
instrucción (o, por cualquier motivo, no está copiando el archivo).
-
Registros, etc.
El registro de depuración es bastante grande y no quería pegarlo completo, por lo que aquí están todas las líneas de la ejecución de Puppet que mencionan 'logio_plugin_file', pero con gusto proporcionaré más si es necesario.
Debug: /File[logio_plugin_file]/seluser: Found seluser default 'system_u' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/selrole: Found selrole default 'object_r' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/seltype: Found seltype default 'etc_t' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/selrange: Found selrange default 's0' for /etc/logstash/plugins/logstash/codecs/logio.rb
..
Debug: /File[logio_plugin_file]/require: requires Exec[create_codec_dir]
Debug: /File[logio_plugin_file]/notify: subscribes to Service[logstash]
..
Debug: /File[logio_plugin_file]: Autorequiring File[logstash_codec_plugins]
/var/lib/puppet/state/last_run_report.yaml
El término 'logio_plugin_file' solo se menciona como parte de dos Puppet::Util::Log
entradas y no File[logio_plugin_file]
existe ninguna entrada.
A continuación se muestra un breve fragmento de esas dos entradas:
- !ruby/object:Puppet::Util::Log
level: !ruby/sym debug
time: 2013-12-06 17:30:38.009095 +00:00
tags:
- debug
- file
- logio_plugin_file
- class
... (25 more ) ...
line: 41
source: /File[logio_plugin_file]/require
file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp
message: "requires Exec[create_codec_dir]"
.. further down, mostly the same except ..
message: "subscribes to Service[logstash]"
-
Extrañeza
Este archivo está incluido dentro de un catálogo grande, con docenas o cientos de otras clases, pero lo extraño es que si incluyo esta clase directamente usando un manifiesto de prueba rápida (también usando puppet apply
), funciona de maravilla. (Aunque tuve que eliminar el requisito de servicio)
node default {
class { 'c2c::profile::app::logio::stage_support': }
}
.. y obtengo esto en mi salida ..
Notice: /File[logio_plugin_file]/ensure: defined content as '{md5}41d00952843b8159b95ce4fcd8015cda'
.. y esto en last_run_report.yaml
..
File[logio_plugin_file]: !ruby/object:Puppet::Resource::Status
resource: File[logio_plugin_file]
file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp
line: 40
evaluation_time: 0.023071
change_count: 1
out_of_sync_count: 1
...
-
Puntos, información y pruebas adicionales
- Acabo de agregar el
Notify => Service['logstash']
y este comportamiento ocurría antes de hacerlo. - No se emiten errores
- Agregué algunas
notify{}
llamadas en mistage_support
clase para asegurarme de que se incluyeran correctamente en el catálogo, y así es. Exec['create_codec_dir']
está creando mi directorio- Intenté cambiar el
path
parámetro paralogio2.rb
ver si la clase - Intenté solicitarlo
File['logio_plugin_file']
de otro recurso. Se ejecutó el recurso requerido, pero no se creó el archivo. - Actualizar:Intenté reducir la llamada de mi tipo de archivo para incluir solo el
title
signo másensure
,path
ysource
, lo cual no tuvo ningún efecto. Actualizar:Intenté cambiar el nombre del recurso (por ejemplo
logio_plugin_file_x
), lo que no ayudó.[root@dev ~]# puppet --version 3.2.3 [root@dev ~]# facter --version 1.7.2 [root@dev ~]# cat /etc/redhat-release CentOS release 6.4 (Final)
-
Nota IMPORTANTE
Este problema surge al final de mi reestructuración del código, por lo que es casi seguro que sea el culpable, pero no puedo solucionarlo.
¡Cualquier ayuda es muy apreciada!
Respuesta1
Como era de esperar, el origen del problema resultó ser simple, aunque todavía no entiendo por qué Puppet no generó un error sobre esto:
perfil/logstash.pp:(en otra parte)
file { 'logstash_plugin_sub':
path => '/etc/logstash/plugins/logstash',
ensure => 'directory',
owner => 'root',
group => 'root',
mode => '0775',
require => [ File['logstash_plugin_sub'] ]
}
Tenga en cuenta la referencia circular en el requisito:File['logstash_plugin_sub'] -> File['logstash_plugin_sub']
El comportamiento resultante es muy extraño y encontré el problema usando esta prueba:
file { "logio_plugin_file_a":
path => '/etc/logstash/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_b":
path => '/etc/logstash/plugins/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_c":
path => '/etc/logstash/plugins/logstash/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_d":
path => '/etc/logstash/plugins/logstash/codecs/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
La idea es, principalmente, intentar agregar mi archivo en ubicaciones cada vez más profundas del árbol. Esta idea se me ocurrió como resultado de poder cambiar path
mi ejemplo original y lograr el éxito.
Así, se creó lo siguiente:
/etc/logstash/logio.rb
/etc/logstash/plugins/logio.rb
Pero se omitieron los dos recursos más profundos, por lo que supe que mi problema se centraba en /etc/logstash/plugins/logstash
. Tras una inspección minuciosa, encontré la referencia circular.
Espero que esto ayude a alguien y gracias a Shane Madden por su tiempo.