我已将我的 puppet (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
每个代理都具有与 puppet 具有单个环境时相同的配置,并添加了 'environment = 'PROJECT_A'
如果我将 site.pp 中的 node.pp 从 include 更改为 import import 'nodes.pp',则错误更改为
错误:无法从远程服务器检索目录:服务器上的错误 400:在 <'SERVER'> 上找不到 <'SERVER'> 的类 selinux.pp
当为单个环境配置 puppet 时,相同的结构可以正常工作。在单一环境下,一切都是这样配置的:
/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 文档后,它指出必须有一个称为生产的环境。我就这样创造了
/etc/puppet/environments/production
| modules
| manifests
| environment.conf
这与其他环境的配置相同,尽管目录中当前没有文件。
代理保持不变。
现在,当我运行代理时,它运行时没有错误。唯一的事情是它正在从 puppet 根 /etc/puppet/modules 和 /etc/puppet/manifests 收集信息,如果 /etc/puppet/manifests 中未定义主机,则代理运行时不会执行任何操作/site.pp.
在 puppetmaster 调试输出中,对主机的所有引用都定义为 Project_A 并且有日志条目
注意:环境 Project_A 中 <'SERVER_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”。尽管配置为使用“Project_A”environment.conf 文件中的路径 /etc/puppet/environments/$environment/{modules|manifests/site.pp}。
实际上是在使用 /etc/puppet/{modules|manifests/site.pp}
您是否检查了您的目录权限。Web 服务器可能无权访问目录。
感谢所有回答的人。
这已解决。
在实施环境时,以下内容适用
在整个过程中,我一直在观察移除缓存后消失的奇怪行为。