在 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',
},
]
}
我认为在这里重构输入数据比尝试处理两个数组要好得多。
在 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',
},
]
}
我认为在这里重构输入数据比尝试处理两个数组要好得多。