Puppet:以通用方式处理多个资源属性
对于仅更改一个或两个属性的资源,我可以分别使用数组和哈希。例如,如果我必须在不同的目录中创建文件,我可以将文件名和各自的路径存储在散列中,并通过迭代散列来应用它们。如果我有两个以上不同的属性,如何存储和迭代这些属性 例如,我正在尝试创建Active Directory组,我有五个属性,每个组的属性都不同,如下所示:Puppet:以通用方式处理多个资源属性,puppet,Puppet,对于仅更改一个或两个属性的资源,我可以分别使用数组和哈希。例如,如果我必须在不同的目录中创建文件,我可以将文件名和各自的路径存储在散列中,并通过迭代散列来应用它们。如果我有两个以上不同的属性,如何存储和迭代这些属性 例如,我正在尝试创建Active Directory组,我有五个属性,每个组的属性都不同,如下所示: Group_Name Display Name Path Description
Group_Name Display Name Path Description GroupCategory
"My Support" "Support" "OU=Groups,OU=DEF,DC=xyz,DC=Com" "Some decription" Security
"Prod DBA" "DBA" "OU=Groups,OU=XYZ,DC=xyz,DC=Com" "Different description" Distribution
...
...
更新:根据建议,代码如下:
[root@myhost] cat params.pp
$ad_groups = {
'Group_Prod' => {
path => 'OU=Groups,OU=PROD,DC=TEST,DC=COM',
displayname => 'Prod Support',
description => 'Prod Support',
},
'Group_App' => {
path => 'OU=Groups,OU=APP,DC=TEST,DC=COM',
displayname => 'App Support',
description => 'App Support',
},
}
$ad_groups_defaults = {
'ensure' => present,
'groupscope' => 'Global',
'groupcategory' => 'Security',
},
[root@myhost] cat create_groups.pp
class infra::ad::create_groups (
$ad_groups = $infra::params::ad_groups,
$ad_groups_defaults = $infra::params::ad_groups_defaults,
) inherits infra::params {
create_resources(windows_ad::group,$ad_groups,$ad_groups_defaults)
}
现在,当我尝试运行它时,出现以下错误:
Could not retrieve catalog from remote server: Error 500 on SERVER: "message":"Server Error: Evaluation Error: Error while evaluating a Resource Statement, Windows_ad::Group[Group_Prod]: default expression for $groupname tries to illegally access not yet evaluated $groupname at /etc/puppetlabs/code/environments/production/modules/infra/manifests/ad/create_groups.pp:5 on node puppet.test.com","issue_kind":"RUNTIME_ERROR"}
现在,如果我还在每个哈希块中添加
groupname
属性,那么错误就被解决了。我想知道的是,如果我的组名与散列键相同(在本例中,group\u Prod
和group\u App
),那么,我是否可以在不在每个哈希块中添加groupname
属性的情况下,将这些哈希键本身用作groupname
,但是您可能更感兴趣的是使用create\u resources
函数实现这一点的简单方法:谢谢@MattSchuchard。请检查我的更新部分。windows\u ad::group
是一种已定义的资源类型,对吗?您可以通过类似于windows\u ad::group(…,$groupname=$title,…)
的方式为定义的资源定义中的参数/属性设置默认值,因此$groupname
默认设置为资源标题,在这种情况下,它将是散列键。否。这是一个来自Puppet forge的模块。在本例中,我使用的是来自Puppet forge的模块,有没有办法使用标题为$groupname
?