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}