我正在尝试重建 nwaller 的sssd puppet 模块,使其完全基于 LDAP 并且更简洁。在其中,我们为表单的每个身份验证域定义了一个资源
define sssd::domain (
$domain = $name,
$domain_description = '',
$domain_type,
$ldap_uri = 'ldap://example.com',
$ldap_search_base = 'dc=example,dc=com',
$simple_allow_groups,
....
)
然后,此定义作为 a 传递,concat::fragment
它填写了用于构建 final 的模板sssd.conf
。
如果我在每个节点中定义 LDAP 服务器,这一切都很好,如下所示:
节点.pp
node "node1.systems.private" {
include "puppet::client"
class {
'sssd':
domains => [ 'LDAP' ],
make_home_dir => true;
}
sssd::domain { 'LDAP':
domain_type => 'ldap',
ldap_uri => 'ldaps://ldap.site.com:636',
ldap_search_base => 'DC=site,DC=com',
ldap_user_search_base => 'OU=People,DC=site,DC=com',
ldap_group_search_base => 'OU=Groups,DC=site,DC=com',
ldap_default_bind_dn => 'CN=bindaccount,OU=Service Accounts,OU=People,DC=site,DC=com',
ldap_default_authtok => 'soopersekretbindpw',
simple_allow_groups => ['SysAdmins','AppAdmins'],
}
}
我宁愿做的是一个更有层次的设置。使sssd::domain
定义尽可能通用,这样我就可以将其作为一个独立于我们的组织配置的模块来维护。在全局配置中定义 LDAP 服务器,然后在每个节点中定义需要访问的特定组。所以更像是:
模块/org/manifests/default.pp
class org::default {
include "puppet::client"
class {
'sssd':
domains => [ 'LDAP' ],
make_home_dir => true;
}
sssd::domain { 'LDAP':
domain_type => 'ldap',
ldap_uri => 'ldaps://ldap.site.com:636',
ldap_search_base => 'DC=site,DC=com',
ldap_user_search_base => 'OU=People,DC=site,DC=com',
ldap_group_search_base => 'OU=Groups,DC=site,DC=com',
ldap_default_bind_dn => 'CN=bindaccount,OU=Service Accounts,OU=People,DC=site,DC=com',
ldap_default_authtok => 'soopersekretbindpw',
}
}
节点.pp
node "node1.systems.private" {
include "org::default"
sssd::domain { 'LDAP':
simple_allow_groups => ['SysAdmins','AppAdmins'],
}
}
正如预期的那样,这会在尝试应用定义时导致重复声明错误。有没有办法做到这一点,选择性地覆盖参数,还是我坚持在原始定义中定义身份验证域,然后在每个节点中覆盖授权参数?