问题描述
我有一个像这样的 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,}
}