Puppet:访问动态变量路径中的哈希键

问题描述

我有一个像这样的 puppet 哈希类型数据结构来存储 ssh 密钥:

class users::sshkeys {
  $user1 = {
      user1 => {
          key => 'AAAAAA',type => 'ssh-rsa'
       }
  }
  $user2 = {
      user2 => {
          key => 'BBBBBB',type => 'ed25519'
      }
  }
}

我可以像这样访问密钥:

$users::sshkeys::user1['user1']['key']

我想动态访问密钥(例如在循环中),如下所示:

$users = ['user1','user2']

$users.each |$user| {
  $users::sshkeys::$user[$user]['key']
}

我找到了一个访问动态类/变量的解决方案:

$mydynamicvar = getvar("users::sshkeys::${user1}")
notify{"$mydynamicvar":}

这似乎返回了一个字符串,所以我无法访问里面的哈希键:

notify{"$mydynamicuser[$user]['key']":}

有什么想法吗?

解决方法

啊,明白了:) 将所有散列放入一个变量(此处:$all_users)并将它们汇总到组中的工作方式如下:

$sysadmins = { 
  user1 => $all_users['user1'],user2 => $all_users['user2']
} 

感谢您为我指明正确的方向@MattSchuchard

即使在循环中接收 ssh 密钥和密钥类型也可以使用大哈希:

 $users = ['user1','user2']

  $users.each |$user| {
    profiles::users::sshkeys { $user:
      user                    => $user,group                   => 'sftpusers',ssh_authorized_key      => $users::sshkeys::all_keys::all_users[$user]['key'],ssh_authorized_key_type => $users::sshkeys::all_keys::all_users[$user]['type'],shell                   => $shell,}
    }