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