Назад | Перейти на главную страницу

Ошибка Puppet HTTP 400 с конфигурацией среды

Я перенастроил свой марионеточный (v3.6.2) сервер (RHEL 7.1) для поддержки сред, как показано ниже.

/etc/puppet
           puppet.conf
           auth.conf
           environments
                       Project_A
                                modules
                                manifests/site.pp
                                environment.conf
                       Project_B
                                modules
                                manifests/site.pp
                                environment.conf

файлы environment.conf состоят из

modulepath=/etc/puppet/environments/$environment/modules
manifest=/etc/puppet/environments/$environment/manifests/site.pp

файл site.pp для каждой среды состоит из

include 'nodes.pp'
include 'selinux.pp'
include 'check_mode.pp'
$puppetserver=<SERVER>
Package {
        allow_virtual=>true,
}

на агенте, когда я запускаю команду

puppet agent --no-daemonize --trace --debug --noop --verbose

Я получаю ошибку

Ошибка: не удалось получить каталог с удаленного сервера: ошибка 400 на сервере: не удалось найти узлы классов для <'SERVER'> на <'SERVER'>

в /var/log/puppet/masterhttp.log я получаю сообщение об ошибке

[2015-09-09 15:43:12] <'IP'> - - [2015/09/09: 15: 43: 12 AEST] «POST / Project_A / catalog / <'SERVER'> HTTP / 1.1 400 21

Каждый агент имеет ту же конфигурацию, что и в марионетке с одной средой с добавлением 'environment =' PROJECT_A '

Если я изменю nodes.pp в site.pp с include на import import 'nodes.pp', ошибка изменится на

Ошибка: не удалось получить каталог с удаленного сервера: ошибка 400 на сервере: не удалось найти класс selinux.pp для <'SERVER'> на <'SERVER'>

Та же самая структура работает правильно, когда марионетка была настроена для одной среды. В единой среде все было настроено так:

/etc/puppet
           puppet.conf
           auth.conf
           environments
           modules
           manifests/site.pp

Я подозреваю, что мне может потребоваться изменить мой файл auth.conf, но я не понимаю, какие изменения требуются. В настоящее время это файл конфигурации по умолчанию.

Я пробовал добавить

path /environments
allow *

без радости

и добавили в fileserver.conf

path /etc/puppet/environments 
allow *

снова без радости.

для записи главный файл puppet.conf

[main]
      logdir = /var/log/puppet
      rundir = /var/run/puppet
      ssldir = $vardir/ssl
      always_cache_features = true
      server = <'PUPPET SERVER'>
      environmentpath = $confdir/environments

[master]
      ca = true
      dns_alt_names = <'SAN DNS ENTRIES'>
      certname = <'PUPPET MASTER'>
      ssl_client_header = SSL_CLIENT_S_DN
      ssl_client_verify_header = SSL_CLIENT_VERIFY
      environment = master
[agent]
      classfile = $vardir/classes.txt
      localconfig = $vardir/localconfig
      environment = Project_A

Агенты используют один и тот же файл конфигурации без [master]

Может ли кто-нибудь увидеть, где я сделал ошибку в своей конфигурации.

ОБНОВЛЕНИЕ: я запустил puppetmaster в режиме отладки, и агент попытался подключиться к серверу. В выводе отладки это то, что заставило меня подозревать, что это auth.conf

Notice: Starting Pppet master version 3.6.2
Debug: Routes Registered
Debug: Route /^\/v2\.0/
Debug: Route /.*/
Debug: Evaluating match for Route /^\/v2\.0/
Debug: Did not match path ("/Project_A/node/<SERVER A>")
Debug: Evaluating match for Route /.*/
Info: access[^/catalog/([^/]+)$]: allowing 'method' find
Info: access[^/catalog/([^/]+)$]: allowing $1 access
Info: access[^/node/([^/]+)$]: allowing 'method' find
Info: access[^/node/([^/]+)$]: allowing $1 access
Info: access[/certificate_revocation_list/ca]: allowing 'method' find
Info: access[/certificate_revocation_list/ca]: allowing * access
Info: access[/^/report/([^/]+)$]: allowing 'method' save
Info: access[/^/report/([^/]+)$]: allowing $1 access
Info: access[/file]: allowing * access
Info: access[/certificate/ca]: adding authentication any
Info: access[/certificate/ca]: adding 'method' find
Info: access[/certificate/ca]: adding * access
Info: access[/certificate/]: adding authentication any
Info: access[/certificate/]: adding 'method' find
Info: access[/certificate/]: adding * access
Info: access[/certificate_request]: adding authentication any
Info: access[/certificate_request]: adding 'method' find
Info: access[/certificate_request]: adding 'method' save
Info: access[/certificate_request]: adding * access
Info: access[/v2.0/environments]: adding 'method' find
Info: access[/v2.0/environments]: adding * access
Info: access[/]: adding authentication any
Info: Inserting dfault '/status' (auth true) ACL
Info: Caching node for <SERVER A>
Debug: Failed to load library 'msgpack' for feature 'msgpack'
Debug: Puppet::Network::Format [msgpack]: feature msgpack is missing
Debug: node supports formats: pson b64_zlib_yaml yaml raw
Debug: Routes Register:
Debug: Routes /^\/v2\.0/
Debug: Route /.*/
Debug: Evaluating match for Route /^\/v2\.0/
Debug: Did not match path ("/Project_A/file_metadatas/plugins")
Debug: Evaluating match for Route /.*/

ОБНОВИТЬ:
У меня вроде как работает.
После перечитывания документации puppetlabs по средам он заявляет, что должна быть среда под названием production. Я таким образом создал

/etc/puppet/environments/production
                              | modules
                              | manifests
                              | environment.conf

Это настроено так же, как и другие среды, хотя в настоящее время в каталогах нет файлов.

Агент остается прежним.

Теперь, когда я запускаю агент, он работает без ошибок. Единственное, что он собирает информацию из корня марионетки / etc / puppet / modules & / etc / puppet / manifestests, и во время работы агента ничего не делает, если хост не определен в / etc / puppet / manifest /site.pp.

В выходных данных отладки puppetmaster все ссылки на хост определены как Project_A, и есть запись журнала

Примечание: Скомпилированный каталог для <'SERVER_A'> в среде Project_A за 0,00 секунды

От агента

Notice: /Stage/[main]/ntp::Config/File[/etc/ntp.conf]/content: content changed '{md5}<md5sum>' to '{md5}<md5sum>'
Info: /Stage/[main]/ntp::Config/File[/etc/ntp.conf]: Scheduling refresh of Service{ntpd}

Итак, в заключение.

Клиент распознается как принадлежащий к среде Project_A на мастере. Несмотря на то, что он настроен на использование пути /etc/puppet/environments/$environment/{modules|manifests/site.pp} в файле environment.conf Project_A.
Фактически использует /etc/puppet/{modules|manifests/site.pp}

Спасибо всем, кто ответил.

Это было решено.

При реализации сред применяется следующее

  • Требуется производственная среда по умолчанию (согласно документации)
  • даже если это может быть настроено в puppet.conf при тестировании через командную строку, включают «--server <'SERVER'> и --environment <'ENVIRONMENT'>»
  • Очистите кеш, расположенный в / var / opt / lib / puppet / client_data / catalog / <'SERVER NAME'>. Json

Все это время я наблюдал странное поведение, которое исчезало при удалении кеша.

Вы проверили права доступа к каталогу? Веб-сервер может не иметь доступа к каталогам.