Puppet:以通用方式处理多个资源属性

Puppet:以通用方式处理多个资源属性,puppet,Puppet,对于仅更改一个或两个属性的资源,我可以分别使用数组和哈希。例如,如果我必须在不同的目录中创建文件,我可以将文件名和各自的路径存储在散列中,并通过迭代散列来应用它们。如果我有两个以上不同的属性,如何存储和迭代这些属性 例如,我正在尝试创建Active Directory组,我有五个属性,每个组的属性都不同,如下所示: Group_Name Display Name Path Description

对于仅更改一个或两个属性的资源,我可以分别使用数组和哈希。例如,如果我必须在不同的目录中创建文件,我可以将文件名和各自的路径存储在散列中,并通过迭代散列来应用它们。如果我有两个以上不同的属性,如何存储和迭代这些属性

例如,我正在尝试创建Active Directory组,我有五个属性,每个组的属性都不同,如下所示:

 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