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

在Puppet中,我制作了自己的模块,将管理员帐户添加到我们的管理服务器中

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以后想添加其他字段怎么办?