Puppet中的多变量循环
在Puppet中,我制作了自己的模块,将管理员帐户添加到我们的管理服务器中Puppet中的多变量循环,puppet,Puppet,在Puppet中,我制作了自己的模块,将管理员帐户添加到我们的管理服务器中 class admins::add_admin($username, $userkey) { $username.each |String $username| { file { "/home/${username}": ensure => directory, mode => '0750', owner => $username, } user { $user
class admins::add_admin($username, $userkey) {
$username.each |String $username| {
file { "/home/${username}":
ensure => directory,
mode => '0750',
owner => $username,
}
user { $username:
ensure => present,
shell => '/bin/bash',
}
ssh_authorized_key { $username:
ensure => present,
user => $username,
type => 'ssh-rsa',
key => $userkey,
}
}
}
$username是所需用户名的数组,$userkeys是ssh密钥的数组
当运行each循环时,会相应地创建用户,但是每个用户的键都是相同的(这是合乎逻辑的,因为我还没有迭代userkey的功能)
我想要的是这个Puppet模块在两个数组上迭代,但我不知道怎么做。您可以这样做:
class admins::add_admin (
Array[Hash[String, String]] $users_data = [], # declare data type and defaults
) {
$users_data.each |Hash $user| {
$username = $user['username']
$userkey = $user['userkey']
file { "/home/${username}":
ensure => directory,
mode => '0750',
owner => $username,
}
user { $username:
ensure => present,
shell => '/bin/bash',
}
ssh_authorized_key { $username:
ensure => present,
user => $username,
type => 'ssh-rsa',
key => $userkey,
}
}
}
然后您将传入如下所示的数据:
class { 'admins::add_admin':
users_data => [
{
'username' => 'bill',
'userkey' => 'keydata1',
},
{
'username' => 'ted',
'userkey' => 'keydata2',
},
]
}
我认为在这里重构输入数据比处理两个数组要好得多。不幸的是,使用提供的类传递数据似乎无法填充字段。但是,当我在admin::add_admin类定义中声明它们时,它确实起作用。我错过了什么?我应该如何准确地向管理员提供数据:从init.pp添加_admin类?这是一个比我在这里的注释中可以回答的更大的问题,我需要查看您的代码。欢迎您提出新问题。@user10075632 Hash肯定是这种情况下的数据类型。我们也不要忘记第三个重要的用户
rufus
。同意你的评论是一个新问题。@Alexarvey我认为如果$users\u data
是一个散列,以用户名
作为键,以用户键
作为值,那么它可能更干净。你可以$users\u data.each | String$username,String$userkey |
,我认为数据结构也会更精简。@MattSchuchard我认为你是对的,作为用户名的键可能是更自然的结构。如果OP以后想添加其他字段怎么办?