0

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
}

我计划通过对机器(例如 RH5 和 RH6 机器)进行分组,而不是为所有 RH5 和 RH6 服务器添加多行包含内容,从而在 nodes.pp 中带来更多的组织(阅读:避免配置重复)。

4

1 回答 1

1

您遇到了变量范围问题。官方文档讨论了这个问题。

简而言之,redhat6server无权访问 netgroup 变量。

我用来解决这个问题的方法是使用hiera。有了这个,ldap_auth 模块可以这样定义,它会从 hiera 配置文件(通常是 /etc/puppet/hiera 中的 yaml 文件)中提取值。

您将像这样定义 ldap_auth:

ldap_auth/manifests/init.pp:

class ldap_auth($netgroup=hiera('netgroup')) {
...
}

或者,如果您在 puppet 3.x 上,您可以使用自动参数查找:

class ldap_auth($netgroup) {
...
}

并有一个 yaml 文件:

ldap_auth::netgroup = 'netgroup'
于 2013-12-06T00:42:00.460 回答