Erro HTTP 400 do Puppet com Configuração do Ambiente

1

Eu reconfigurei meu servidor de fantoches (v3.6.2) (RHEL 7.1) em ambientes de suporte, conforme mostrado abaixo.

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

os arquivos environment.conf consistem em

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

o arquivo site.pp para cada ambiente consiste em

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

em um agente quando eu executo o comando

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

Eu recebo o erro

Error: Could not retrieve catalog from remote server: Error 400 on server: Could not find class nodes for <'SERVER'> on <'SERVER'>

em /var/log/puppet/masterhttp.log eu recebo o erro

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

Cada agente tem a mesma configuração de quando o puppet tinha um único ambiente com a adição de 'environment =' PROJECT_A '

Se eu alterar nodes.pp no site.pp de incluir para importar import 'nodes.pp' o erro muda para

Error: Could not retrieve catalog from remote server: Error 400 on server: Could not find class selinux.pp for <'SERVER'> on <'SERVER'>

Esta mesma estrutura funciona corretamente quando o fantoche foi configurado para um único ambiente. No ambiente único, tudo foi configurado como tal:

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

Eu suspeito que eu possa precisar modificar meu arquivo auth.conf, mas não sei quais mudanças são necessárias. Atualmente, o arquivo é a configuração padrão.

Eu tentei adicionar

path /environments
allow *

sem alegria

e adicionados ao fileserver.conf

path /etc/puppet/environments 
allow *

novamente sem alegria.

para o registro, o arquivo master 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

Os agentes usam o mesmo arquivo de configuração sem o [master]

Alguém pode ver onde eu cometi um erro na minha configuração.

ATUALIZAÇÃO: Eu comecei o puppetmaster no modo de depuração e de um agente tentou se conectar ao servidor. Na saída de depuração, isso me fez suspeitar que é o 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 /.*/

UPDATE:
Eu meio que consegui isso funcionar.
Depois de reler os documentos dos puppetlabs nos ambientes, afirma que deve haver um ambiente chamado produção. Eu criei assim

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

Isso é configurado da mesma forma que os outros ambientes, embora os dirs não possuam arquivos dentro deles.

O agente permanece o mesmo.

Agora, quando executo o agente, ele é executado sem erros. A única coisa é que está coletando informações da raiz do fantoche / etc / puppet / modules & / etc / puppet / manifestos e enquanto o agente for executado, não fará nada se o host não estiver definido em /etc/puppet/manifests/site.pp.

Na saída de depuração do puppetmaster, todas as referências ao host são definidas como Project_A e há a entrada de log

Notice: Compiled catalog for <'SERVER_A'> in environment Project_A in 0.00 seconds

Do agente

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}

Então, em resumo.

O cliente está sendo reconhecido como pertencente ao ambiente 'Project_A' no mestre. Apesar de estar configurado para usar o caminho /etc/puppet/environments/$environment/{modules|manifests/site.pp} no arquivo environment.conf 'Project_A'.
Está realmente usando o /etc/puppet/{modules|manifests/site.pp}

    
por Barry 09.09.2015 / 08:19

2 respostas

0

Obrigado por todos que responderam.

Isso foi resolvido.

Ao implementar ambientes, aplica-se o seguinte

  • Um ambiente padrão de produção é necessário (conforme os documentos)
  • mesmo que ele possa ser configurado no puppet.conf ao testar por meio da linha de comando, inclua "--server < 'SERVER' > e --environment < 'MEIO AMBIENTE' >"
  • Limpe o cache localizado em / var / opt / lib / puppet / client_data / catalog / < 'NOME DO SERVIDOR' > .json

Durante todo o tempo, eu estava observando um comportamento estranho que desaparecia quando o cache era removido.

    
por 11.09.2015 / 05:17
0

Você verificou suas permissões de diretório. O servidor da web pode não ter acesso aos diretórios.

    
por 09.09.2015 / 09:24