我有2个哈希值,需要"结合"他们要创建一个新的ssh_authorized_key资源:
第一个哈希包含所有ssh密钥
$site_meta['Facebook'];
第二个哈希包含"部署"密钥和用户
$ssh_keys = {
'user1@192.168.14.47' => {
type => 'ssh-rsa',
key => 'Key1',
},
'user2@192.168.18.10' => {
type => 'ssh-rsa',
key => 'Key2',
}
}
我想"合并"这个哈希所以我可以使用create_resources
$deploys = {
'user1@192.168.14.47' => { user => ["user3","user4"]},
'user2@192.168.18.10' => { user => ["user3"]}
}
我该如何创建newhash?木偶没有迭代,这使得这种方式变得困难
哈希的数据最终来自工头智能类/变量
修改 这是关于工头1.11.1,在ubuntu 14.04中使用puppet 3.8.7
答案 0 :(得分:4)
我不知道用于合并内置于木偶语言中的哈希的函数,但您可以始终使用custom parser function代替 - 这将允许您根据自己的喜好组合两个或更多个哈希值,使用纯红宝石 - 它真的不像听起来那么可怕。
幸运的是,puppetlabs/stdlib模块中已存在其中一个。不幸的是,这个特定情况所需的功能是自述文件中的not documented。称为deep_merge
,它将合并嵌套的哈希值,您可以在函数本身的source中找到文档。
我不使用工头,所以如果您需要安装puppetlabs / stdlib模块,或者使用默认安装可以访问它,我就不清楚了。它是大量伪造模块的常见依赖,因此您可能已经拥有它。如果没有,foreman docs解释如何安装和添加一个木偶模块到节点(我假设你只是用引用的saz/ntp
替换puppetlabs/stdlib
。
然后,您可以deep_merge
查看您心中的内容,例如......
$ssh_keys = {
'user1@192.168.14.47' => {
type => 'ssh-rsa',
key => 'Key1',
},
'user2@192.168.18.10' => {
type => 'ssh-rsa',
key => 'Key2',
}
}
$deploys = {
'user1@192.168.14.47' => { user => ["user3","user4"]},
'user2@192.168.18.10' => { user => ["user3"]}
}
$merged = deep_merge($ssh_keys, $deploys)
notify { $merged: }
...导致......
Notice: { \
"user1@192.168.14.47"=>{"type"=>"ssh-rsa","key"=>"Key1", "user"=>["user3", "user4"]}, \
"user2@192.168.18.10"=>{"type"=>"ssh-rsa", "key"=>"Key2","user"=>["user3"]}}