Я настраиваю puppet master и агента. Они работают на одном хосте, так как я хочу, чтобы 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
Если вы используете puppet agent на том же хосте, где у вас есть puppet master, вы можете использовать puppet apply, как @FelixFrank
предлагается.
В любом случае, проблема в том, что у вас нет определенного узла "mangosteen.example.com"
, вы также можете решить эту проблему, определив default node
, Puppet ищет узел, определяющий , и если ничего не найдено, используетdefault node.
решение2
@FelixFrank предоставил основную подсказку к ответу, что в файле modules/test/manifests/init.pp
была опечатка. Как ни странно, об этом не сообщил в журнале мастер марионеток, а агент марионеток просто сказал, что тестовый класс не может быть найден. (Он не может быть найден, потому что он не анализировал, насколько я могу судить.)
Я достаточно новичок в puppet, так что я мог как-то напортачить с ведением журнала. В любом случае, поскольку директивы node не было вообще, отсутствие директивы node для этого хоста не было проблемой. Действительно, это оказалось довольно умным тестом, потому что как только агент заработал (как только я исправил опечатку), агент создал файл в /tmp/hello
.