Puppet HTTP 400错误使用环境configuration

我已经将我的木偶(v3.6.2)服务器(RHEL 7.1)重新configuration到支持的环境中,如下所示。

/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:无法find<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

每个代理具有与puppet具有单个环境时相同的configuration,并添加“environment ='PROJECT_A'

如果我将site.pp中的nodes.pp从include更改为导入导入“nodes.pp”,则错误将更改为

错误:无法从远程服务器检索目录:服务器上出现错误400:在<'SERVER'>上找不到<SERVER>类的selinux.pp

当木偶被configuration为单个环境时,相同的结构正确工作。 在单一的环境下,所有的configuration都是这样的:

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

我怀疑我可能需要修改我的auth.conf文件,但是不知道需要什么修改。 目前该文件是默认configuration。

我曾尝试添加

 path /environments allow * 

没有喜乐

并添加到fileserver.conf

 path /etc/puppet/environments allow * 

再次没有喜乐。

用于loggingmaster 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 

代理使用相同的configuration文件,而不使用[master]

任何人都可以看到我在configuration中犯了一个错误。

更新:我已经启动puppetmaster在debugging模式,并从代理试图连接到服务器。 在debugging输出中,这让我怀疑它是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文档后,它指出必须有一个称为生产的环境。 我已经这样创造了

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

这与其他环境configuration相同,尽pipe目录中目前没有文件。

代理保持不变。

现在,当我运行代理程序,它运行没有错误。 唯一的一点就是从puppet root / etc / puppet / modules&/ etc / puppet / manifests收集信息,如果主机没有在/ etc / puppet / manifest中定义,代理运行不起作用/site.pp。

在puppetmasterdebugging输出中,对主机的所有引用都定义为Project_A,并且有日志条目

注意:在0.00秒内编译环境Project_A中的<'SERVER_A'>的目录

从代理

 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”。 尽pipe被configuration为在“Project_A”environment.conf文件中使用path/etc/puppet/environments/$environment/{modules|manifests/site.pp}。
实际上是使用/etc/puppet/{modules|manifests/site.pp}

你有没有检查你的目录权限。 Web服务器可能无法访问目录。

感谢所有回答的人。

这已经解决了。

实施环境时适用以下情况

  • 生产的默认环境是必需的(按照文档)
  • 即使在通过命令行testing时可以在puppet.conf中configuration,也包括“–server <'SERVER'>和–environment <'ENVIRONMENT'>”
  • 清除位于/ var / opt / lib / puppet / client_data / catalog / <'SERVER NAME'>中的caching。

我一直在观察当caching被移除时消失的怪异行为。