使用时,tst-01上的Puppet工作正常:
node "tst-01" inherits basenode {
但是当我尝试使用此配置将服务器组织到组中时,它会中断:
node "tst-01" inherits redhat6server {
“继承redhat6server”的错误是:
err: Could not retrieve catalog; skipping run
[root@tst-01 ~]# puppet agent --test
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template ldap/access.conf: Could not find value for 'netgroup' at 124:/etc/puppet/modules/ldap/templates/access.conf at /etc/puppet/modules/ldap/manifests/init.pp:82 on node tst-01.tst.it.test.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
这是access.conf文件,如果将inherits设置为“inherits basenode”,则该文件可以正常工作。
[root@puppet]# grep -v "#" /etc/puppet/modules/ldap/templates/access.conf
+ : root : LOCAL
+ : @<%= netgroup %> : ALL
- : ALL : ALL
[root@puppet]#
这是/etc/puppet/manifests/nodes.pp中的配置。
# Basenode configuration
node "basenode" {
include resolv_conf
include sshd
include ntpd
include motd
}
# Groups
node "redhat6server" inherits basenode {
include ldap_auth
}
# Testservers
node "tst-01" inherits redhat6server {
$netgroup = tst-01
}
我计划通过对机器进行分组,例如在nodes.pp中引入更多的组织(读取:避免配置重复)。 RH5和RH6机器,而不是为所有RH5和RH6服务器添加多行包含。
答案 0 :(得分:1)
您遇到了变量范围问题。官方documentation讨论了这个问题。
简而言之,redhat6server
无法访问netgroup变量。
我用来解决这个问题的方法是使用hiera。有了这个,就可以用这种方式定义ldap_auth模块,它将从hiera配置文件(通常是/ etc / puppet / hiera中的yaml文件)中提取值。
您可以像这样定义ldap_auth:
了ldap_auth /舱单/ init.pp:
class ldap_auth($netgroup=hiera('netgroup')) {
...
}
或者如果您的on puppet 3.x,您可以使用自动参数查找:
class ldap_auth($netgroup) {
...
}
并有一个yaml文件:
ldap_auth::netgroup = 'netgroup'