Puppet打破了多个节点的继承

时间:2013-05-03 09:36:37

标签: puppet

使用时,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服务器添加多行包含。

1 个答案:

答案 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'