Puppet エージェントがテスト モジュールを見つけられない

Puppet エージェントがテスト モジュールを見つけられない

私は Puppet マスターとエージェントを設定しています。このホストも Puppet で管理したいので、これらは同じホスト上で実行されています。エージェントは、パッケージが提供する便利なテスト モジュールを見つけることができません。

私は Ubuntu Trusty (14.04 LTS) を実行しており、開始するために puppetmaster-passenger および puppet パッケージをインストールしました。これまでのところすべて順調です。

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# 

私のは/etc/puppet/puppet.confむしろ普通に思えます:

[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

パッケージには簡単なテストが用意されており、エージェントを起動すると HelloWorld が /tmp/hello に書き込まれることになると思います。

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# 

しかし、実際にはそうはなりません。(エージェントとマスターは同じホスト (mangosteen.example.com、エイリアス puppetmaster.example.com) 上にあることを思い出してください)

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# 

サーバー ログ ( /var/log/puppet/masterhttp.log) は、この操作を通じてかなり普通になります。

[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

エージェントからのデバッグ出力は、私にとっては面白くなく、ほとんどが証明書の検索に関するものでした。これらのコマンドは、その退屈さをうまくまとめています。

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# 

私が何を間違っているのか、何か指摘はありますか?

答え1

パペットマスターと同じホストでパペットエージェントを使用している場合は、@FelixFrank提案されている ようにパペット適用を使用できます。

とにかく、問題は、ノードが定義されていないことです"mangosteen.example.com"。この問題は、を定義することでも解決できますdefault node。Puppetはノード定義を探し、何も見つからない場合はを使用します。default node.

答え2

@FelixFrank が、ファイルにmodules/test/manifests/init.ppタイプミスがあったという答えの主な手がかりを提供しました。奇妙なことに、これはパペット マスターによってログに報告されず、パペット エージェントは単にテスト クラスが見つからないと表示しました。(私の知る限り、解析されなかったために見つからなかったようです。)

私は Puppet を使い始めたばかりなので、何らかの理由でログ記録を失敗した可能性があります。いずれにせよ、ノード ディレクティブがまったくなかったため、このホストにノード ディレクティブが存在しないことは問題ではありませんでした。実際、これはかなり巧妙なテストであることが判明しました。エージェントが動作すると (タイプミスを修正すると)、エージェントは にファイルを作成したからです/tmp/hello

関連情報