在 Puppet 中循环多个变量

Loop over multiple variables in Puppet

在 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 循环为 运行 时,相应地创建了用户,但是每个用户的密钥都是相同的(这是合乎逻辑的,因为我还没有迭代用户密钥的功能) .

我想要的是这个 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',
    },
  ]
}

我认为在这里重构输入数据比尝试处理两个数组要好得多。