Puppet:将多个广告用户添加到本地组

Puppet:将多个广告用户添加到本地组,puppet,Puppet,我试图将Windows Server 2012上的多个广告用户添加到Administrators组,但它抛出了一个错误。如果我在params.pp文件中只指定一个用户,那么它可以正常工作 参数pp $user\u to\u add=[ “ad8\iisuser”, “ad8\dbuser”, ], $group_name='Administrators', 将用户添加到本地组。pp class common::将用户添加到本地组( $user_to_add=$common::params::u

我试图将Windows Server 2012上的多个广告用户添加到
Administrators
组,但它抛出了一个错误。如果我在
params.pp
文件中只指定一个用户,那么它可以正常工作

参数pp

$user\u to\u add=[
“ad8\iisuser”,
“ad8\dbuser”,
],
$group_name='Administrators',
将用户添加到本地组。pp

class common::将用户添加到本地组(
$user_to_add=$common::params::user_to_add,
$group\u name=$common::params::group\u name,
)继承common::params{
$user_to_add.each |$user_name |{
组{“将$user\u name添加到本地组”:
确保=>存在,
name=>$group\u name,
成员=>[$user\u name],
}
}
}
错误:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while eval
uating a Resource Statement, Cannot alias Group[Add ad8\\dbuser to local group] to [\"Administrators\"] at /etc/puppetlabs/code/en
vironments/automation/modules/common/manifests/add_user_to_local_group.pp:6; resource [\"Group\", \"Administrators\"] already declared
at /etc/puppetlabs/code/environments/automation/modules/common/manifests/add_user_to_local_group.pp:6 at /etc/puppetlabs/code/environme
nts/automation/modules/common/manifests/add_user_to_local_group.pp:6:9 on node lab.ad8.com","issue_kind":"RUNTIME_ERROR","stacktrace
":["Warning: The 'stacktrace' property is deprecated and will be removed in a future version of Puppet. For security reasons, stacktrac
es are not returned with Puppet HTTP Error responses."]}

您试图通过为两个资源提供不同的标题来规避资源唯一性/多个声明,但资源也必须具有唯一的名称变量。
资源的namevar是
名称
,如果属性中未指定,则会从标题中使用别名(因此错误消息输出就是它)

因此,当您为

group { "Add $user_name to local group":
  ensure  => present,
  name    => $group_name,
  members => [ $user_name ],
}
使用相同的
name
属性,就像您在遍历散列时所做的那样(因为
$group\u name
对两者都是相同的),那么您将抛出一个多声明错误。这也是为什么当您只指定一个用户时它对您有效,因为这样您就具有了
namevar
唯一性

要解决这个问题,您只需要有一个
资源同时添加两个用户,而不是按顺序添加

class common::add_user_to_local_group (
  $user_to_add = $common::params::user_to_add,
  $group_name  = $common::params::group_name,
) inherits common::params {
  group { $group_name:
    ensure  => present,
    members => $user_to_add,
  }
}

我还建议将“用户”一词的用法多元化以便于澄清(
$user\u to\u add
-->
$users\u to\u add
)。另一个改进可能是允许传入多个组,并使用关联的成员哈希对这些组进行迭代,但您可以自己决定。

看起来很不错。您确定没有在清单的前面错误地声明用户吗?我再次检查了,但我的节点块只有以下内容:
include common::add\u user\u to\u local\u group
。此外,我上面粘贴的清单是完整的清单。我还检查了变量
$user\u to\u add
,但它没有在其他任何地方声明。尝试手动添加两个用户,效果良好。非常感谢您的帮助。:)我知道
namevar
,但在这种情况下,我没有正确理解它,真是太愚蠢了。我还觉得,尽管这个错误提到了重复声明,但它并不是很清楚。也许只是我。无论如何。当我读到将“user”改为“users”时,我笑了,因为我本来打算这么做的,但在解决了这个问题之后。这绝对是提供清晰性的正确做法。谢谢你的多人聚会。我也这么想,但是用了一种不同的方式(不是很好的方式)。你的建议很有道理