
A coisa mais estranha está acontecendo durante a execução do Puppet (usando Puppet Apply
) e isso me deixou perplexo. Tentei meus canais habituais para encontrar soluções, mas não consigo encontrar nada sobre o assunto. Peço desculpas por ser tão prolixo, só não quero deixar nada de fora :\
-
Minha classe
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'],
}
}
.. e meuA corrida de marionetes é pular ologio_plugin_file
instrução (ou, por qualquer motivo, não está copiando o arquivo).
-
Registros, etc.
O log de depuração é bastante grande e não queria colar tudo, então aqui estão todas as linhas da execução do Puppet que mencionam 'logio_plugin_file', mas terei prazer em fornecer mais, se necessário.
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
O termo 'logio_plugin_file' é mencionado apenas como parte de duas Puppet::Util::Log
entradas e não File[logio_plugin_file]
existe nenhuma entrada.
Abaixo está um trecho rápido dessas duas 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]"
-
Estranheza
Esse arquivo está incluído em um grande catálogo, com dezenas ou centenas de outras classes, mas o estranho é que se eu incluir essa classe diretamente usando um manifesto de teste rápido (também usando puppet apply
), ele funciona perfeitamente. (Embora eu tenha que remover o requisito de serviço)
node default {
class { 'c2c::profile::app::logio::stage_support': }
}
.. e eu recebo isso na minha saída ..
Notice: /File[logio_plugin_file]/ensure: defined content as '{md5}41d00952843b8159b95ce4fcd8015cda'
.. e isso em 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
...
-
Pontos, informações e testes adicionais
- Acabei de adicionar o
Notify => Service['logstash']
, e esse comportamento estava ocorrendo antes de fazer isso. - Nenhum erro é emitido
- Adicionei algumas
notify{}
chamadas na minhastage_support
turma para garantir que ela estava sendo incluída corretamente no catálogo, e está. Exec['create_codec_dir']
está criando meu diretório- Tentei mudar o
path
parâmetro paralogio2.rb
para ver se a classe - Tentei exigir
File['logio_plugin_file']
de outro recurso. O recurso necessário foi executado, mas o arquivo não foi criado. - Atualizar:Tentei reduzir minha chamada de tipo de arquivo para incluir apenas
title
plusensure
,path
esource
, o que não teve efeito. Atualizar:Tentei renomear o recurso (por exemplo
logio_plugin_file_x
), o que não ajudou.[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
Esse problema surge depois de eu fazer uma reestruturação de código, então é quase certo que a culpa é disso, mas não consigo solucionar isso.
Qualquer ajuda é muito apreciada!
Responder1
Como esperado, a origem do problema acabou sendo simples, embora eu ainda não entenda por que o Puppet não disparou um erro sobre isso:
perfil/logstash.pp:(em outro lugar)
file { 'logstash_plugin_sub':
path => '/etc/logstash/plugins/logstash',
ensure => 'directory',
owner => 'root',
group => 'root',
mode => '0775',
require => [ File['logstash_plugin_sub'] ]
}
Observe a referência circular no requerimento:File['logstash_plugin_sub'] -> File['logstash_plugin_sub']
O comportamento resultante é muito estranho e descobri o problema usando este teste:
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',
}
A ideia é, principalmente, tentar adicionar meu arquivo em locais cada vez mais profundos da árvore. Essa ideia surgiu como resultado de poder mudar o path
meu exemplo original e alcançar o sucesso.
Assim, foi criado o seguinte:
/etc/logstash/logio.rb
/etc/logstash/plugins/logio.rb
Mas os dois recursos mais profundos foram ignorados, então eu sabia que meu problema estava centrado em /etc/logstash/plugins/logstash
. Após uma inspeção minuciosa, encontrei a referência circular.
Espero que isso ajude alguém e obrigado a Shane Madden pelo seu tempo.