
Während dieses Puppet-Laufs (mit ) passiert etwas höchst Merkwürdiges, Puppet Apply
und das macht mich ratlos. Ich habe meine üblichen Kanäle ausprobiert, um Lösungen zu finden, aber ich kann nichts zu diesem Thema finden. Ich entschuldige mich für meine Ausführlichkeit, ich möchte einfach nichts auslassen :\
-
Meine Klasse
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'],
}
}
.. und meinPuppet Run überspringt dielogio_plugin_file
Anweisung (oder kopiert die Datei aus irgendeinem Grund nicht).
-
Protokolle usw.
Das Debug-Protokoll ist ziemlich groß und ich wollte nicht alles einfügen, daher hier jede Zeile im Puppet-Lauf, in der „logio_plugin_file“ erwähnt wird, aber ich stelle bei Bedarf gerne mehr zur Verfügung.
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
Der Begriff „logio_plugin_file“ wird nur als Teil von zwei Puppet::Util::Log
Einträgen erwähnt und es File[logio_plugin_file]
existiert kein Eintrag.
Nachfolgend ein kurzer Ausschnitt dieser beiden Einträge:
- !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]"
-
Fremdheit
Diese Datei ist in einem großen Katalog mit Dutzenden oder Hunderten anderer Klassen enthalten. Das Seltsame ist jedoch, dass diese Klasse puppet apply
wie am Schnürchen läuft, wenn ich sie direkt mithilfe eines schnellen Testmanifests (ebenfalls mithilfe von ) einbinde. (Obwohl ich die Serviceanforderung entfernen musste.)
node default {
class { 'c2c::profile::app::logio::stage_support': }
}
.. und ich bekomme dies in meiner Ausgabe ..
Notice: /File[logio_plugin_file]/ensure: defined content as '{md5}41d00952843b8159b95ce4fcd8015cda'
.. und das in 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
...
-
Zusätzliche Punkte, Informationen und Tests
- Ich habe das gerade erst hinzugefügt
Notify => Service['logstash']
und dieses Verhalten trat bereits vorher auf. - Es werden keine Fehler ausgegeben
notify{}
Ich habe meiner Klasse einige Anrufe hinzugefügt,stage_support
um sicherzustellen, dass sie ordnungsgemäß in den Katalog aufgenommen werden, und das ist der Fall.Exec['create_codec_dir']
erstellt mein Verzeichnis- Ich habe versucht, den
path
Parameter zu ändern, umlogio2.rb
zu sehen, ob die Klasse - Ich habe versucht,
File['logio_plugin_file']
eine andere Ressource anzufordern. Die anfordernde Ressource wurde ausgeführt, aber die Datei wurde nicht erstellt. - Aktualisieren:Ich habe versucht, meinen Dateitypaufruf so zu reduzieren, dass er nur die
title
Pluszeichenensure
,path
, und enthältsource
, was jedoch keine Wirkung hatte. Aktualisieren:Ich habe versucht, die Ressource umzubenennen (z. B.
logio_plugin_file_x
), aber das hat nicht geholfen.[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)
-
Wichtiger Hinweis
Dieses Problem tritt auf, nachdem ich eine Umstrukturierung des Codes durchgeführt habe. Es ist also mit ziemlicher Sicherheit darauf zurückzuführen, aber ich kann das Problem nicht beheben.
Jede Hilfe wird sehr geschätzt!
Antwort1
Wie erwartet war die Ursache des Problems einfach, auch wenn ich immer noch nicht verstehe, warum Puppet diesbezüglich keinen Fehler ausgegeben hat:
Profil/logstash.pp:(anderswo)
file { 'logstash_plugin_sub':
path => '/etc/logstash/plugins/logstash',
ensure => 'directory',
owner => 'root',
group => 'root',
mode => '0775',
require => [ File['logstash_plugin_sub'] ]
}
Beachten Sie den zirkulären Verweis in der Anforderung:File['logstash_plugin_sub'] -> File['logstash_plugin_sub']
Das daraus resultierende Verhalten ist sehr seltsam und ich habe das Problem mit diesem Test gefunden:
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',
}
Die Idee besteht hauptsächlich darin, meine Datei an immer tieferen Stellen im Baum hinzuzufügen. Auf diese Idee bin ich gekommen, weil ich path
in meinem ursprünglichen Beispiel erfolgreich Änderungen vornehmen konnte.
So wurde folgendes erstellt:
/etc/logstash/logio.rb
/etc/logstash/plugins/logio.rb
Aber die beiden tieferen Ressourcen wurden übersprungen, also wusste ich, dass mein Problem im Mittelpunkt stand /etc/logstash/plugins/logstash
. Bei genauerem Hinsehen fand ich den Zirkelverweis.
Ich hoffe, das hilft jemandem, und danke an Shane Madden für seine Zeit.