Ich richte einen Puppet-Master und einen Puppet-Agenten ein. Sie laufen auf demselben Host, da ich möchte, dass Puppet auch diesen Host verwaltet. Der Agent kann das praktische Testmodul, das das Paket bereitstellt, nicht finden.
Ich verwende Ubuntu Trusty (14.04 LTS) und habe die Pakete Puppetmaster-Passenger und Puppet installiert, um loszulegen. Bis jetzt alles gut.
root@mangosteen:/etc/puppet# dpkg -l | grep puppet
ii puppet 3.4.3-1ubuntu1.1 [...]
ii puppet-common 3.4.3-1ubuntu1.1 [...]
ii puppetmaster 3.4.3-1ubuntu1.1 [...]
ii puppetmaster-common 3.4.3-1ubuntu1.1 [...]
ii puppetmaster-passenger 3.4.3-1ubuntu1.1 [...]
root@mangosteen:/etc/puppet#
Meins /etc/puppet/puppet.conf
scheint ziemlich gewöhnlich:
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
prerun_command=/etc/puppet/etckeeper-commit-pre
postrun_command=/etc/puppet/etckeeper-commit-post
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
dns_alt_names = mangosteen.example.com,puppetmaster.example.com
Das Paket stellt einen Schnelltest bereit, der meiner Ansicht nach bedeuten sollte, dass das Aufrufen eines Agenten dazu führt, dass HelloWorld in /tmp/hello geschrieben wird:
root@mangosteen:/etc/puppet# pwd
/etc/puppet
root@mangosteen:/etc/puppet# find manifests/ -type f
manifests/site.pp
root@mangosteen:/etc/puppet# find modules/ -type f
modules/test/manifests/init.pp
root@mangosteen:/etc/puppet# cat manifests/site.pp
include test
root@mangosteen:/etc/puppet# cat modules/test/manifests/init.pp
class test { file { \/tmp/hello\: content => \HelloWorld\ } }
root@mangosteen:/etc/puppet#
Aber das passiert nicht. (Denken Sie daran, dass sich Agent und Master auf demselben Host befinden, der mangosteen.example.com heißt und den Alias puppetmaster.example.com hat.)
root@mangosteen:/etc/puppet# puppet agent --test
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class test for mangosteen.example.com on node mangosteen.example.com
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
root@mangosteen:/etc/puppet#
Das Server-Log ( /var/log/puppet/masterhttp.log
) ist bei dieser Operation recht gewöhnlich:
[2015-10-02 12:54:08] 139.162.x.y - - [02/Oct/2015:12:54:08 UTC] "GET /production/node/mangosteen.example.com? HTTP/1.1" 200 4487
[2015-10-02 12:54:08] - -> /production/node/mangosteen.example.com?
[2015-10-02 12:54:08] 139.162.x.y - - [02/Oct/2015:12:54:08 UTC] "GET /production/file_metadatas/plugins?links=manage&recurse=true&ignore=.svn&ignore=CVS&ignore=.git&checksum_type=md5 HTTP/1.1" 200 278
[2015-10-02 12:54:08] - -> /production/file_metadatas/plugins?links=manage&recurse=true&ignore=.svn&ignore=CVS&ignore=.git&checksum_type=md5
[2015-10-02 12:54:09] 139.162.x.y - - [02/Oct/2015:12:54:09 UTC] "POST /production/catalog/mangosteen.example.com HTTP/1.1" 400 89
[2015-10-02 12:54:09] - -> /production/catalog/mangosteen.example.com
[2015-10-02 12:54:09] 139.162.x.y - - [02/Oct/2015:12:54:09 UTC] "PUT /production/report/mangosteen.example.com HTTP/1.1" 200 9
[2015-10-02 12:54:09] - -> /production/report/mangosteen.example.com
Und die Debug-Ausgabe des Agenten ist für mich uninteressant, sie befasst sich hauptsächlich mit der Suche nach seinen Zertifikaten. Diese Befehle bieten eine gute Zusammenfassung dieser Langeweile:
root@mangosteen:/etc/puppet# puppet agent --test --debug --trace 2>&1 | grep -i module
root@mangosteen:/etc/puppet# puppet agent --test --debug --trace 2>&1 | grep -i test
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class test for mangosteen.example.com on node mangosteen.example.com
root@mangosteen:/etc/puppet#
Irgendwelche Hinweise, was ich falsch mache?
Antwort1
Wenn Sie Puppet Agent auf demselben Host verwenden, auf dem sich auch der Puppet Master befindet, können Sie wie @FelixFrank
vorgeschlagen Puppet Apply verwenden.
Wie auch immer, das Problem ist, dass Sie den Knoten nicht definiert haben "mangosteen.example.com"
. Sie können dieses Problem auch lösen, indem Sie den definieren default node
. Puppet sucht nach dem Knoten, der den definiert, und wenn nichts gefunden wird, verwendet es dendefault node.
Antwort2
@FelixFrank lieferte den Haupthinweis auf die Antwort, nämlich dass die Datei modules/test/manifests/init.pp
einen Tippfehler enthielt. Seltsamerweise wurde dies vom Puppet-Master nicht im Protokoll gemeldet, und der Puppet-Agent sagte lediglich, dass die Testklasse nicht gefunden werden konnte. (Sie konnte nicht gefunden werden, weil sie nicht analysiert wurde, soweit ich das beurteilen kann.)
Ich bin neu genug bei Puppet, dass ich das Logging vielleicht irgendwie vermasselt habe. Da es überhaupt keine Knotendirektive gab, war das Fehlen einer Knotendirektive für diesen Host ohnehin kein Problem. Tatsächlich erwies es sich als ziemlich cleverer Test, denn sobald der Agent funktionierte (nachdem ich den Tippfehler behoben hatte), erstellte der Agent eine Datei unter /tmp/hello
.