【问题标题】:Loop over multiple variables in Puppet在 Puppet 中循环多个变量
【发布时间】:2018-07-13 11:09:01
【问题描述】:

在 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 模块迭代两个数组,但我不知道该怎么做。

【问题讨论】:

    标签: puppet


    【解决方案1】:

    你可以这样做:

    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 向 admins:add_admin 类提供数据?
    • 这是一个比我可以在评论中回答的更大的问题,我需要查看您的代码。欢迎您提出新问题。
    • @user10075632 Hash 绝对是这种情况的数据类型。也让我们不要忘记必不可少的第三个用户rufus。同意您的评论是一个新问题。
    • @AlexHarvey 我认为如果$users_data 是一个以username 为键、userkey 为值的散列,它可能会更清晰。你可以$users_data.each |String $username, String $userkey|,我认为数据结构也会更精简。
    • @MattSchuchard 我认为你是对的,作为用户名的键可能是一个更自然的结构。如果 OP 以后要添加其他字段怎么办?
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多