gpt4 book ai didi

puppet - 在 Puppet 中合并两个哈希

转载 作者:行者123 更新时间:2023-12-01 12:28:11 28 4
gpt4 key购买 nike

我有 2 个哈希,需要“组合”它们以创建一个新的 ssh_authorized_key 资源:

第一个哈希包含所有 ssh key

$ssh_keys = {
'user1@192.168.14.47' => {
type => 'ssh-rsa',
key => 'Key1',
},
'user2@192.168.18.10' => {
type => 'ssh-rsa',
key => 'Key2',
}
}

第二个哈希包含 key 和用户的“部署”
$deploys = {
'user1@192.168.14.47' => { user => ["user3","user4"]},
'user2@192.168.18.10' => { user => ["user3"]}
}

我想“合并”这个哈希,所以我可以使用 create_resources
$newhash ={
'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"]
}
}

create_resources('ssh_authorized_key',$newhash)

我怎样才能创建新哈希? puppet 没有迭代,这使得这种方式变得困难

哈希的数据最终来自工头智能类/变量

编辑:
这是在 ubuntu 14.04 中使用 puppet 3.8.7 的工头 1.11.1

最佳答案

我不知道用于合并 puppet 语言中内置的哈希的功能,但您始终可以使用 custom parser function取而代之的是——这将允许您使用纯 ruby​​ 组合两个或多个散列值,但它并不像听起来那么可怕。

幸运的是,其中之一已经存在于 puppetlabs/stdlib 中。模块。不幸的是,这种特殊情况所需的函数是 not documented在自述文件中。调用 deep_merge ,它将合并嵌套哈希,您可以在 source 中找到文档函数本身。

我不使用工头,所以我不清楚您是否需要安装 puppetlabs/stdlib 模块,或者是否可以通过默认安装访问它。它是大量 forge 模块的常见依赖项,因此您可能已经拥有它。如果没有,foreman docs解释如何安装 puppet 模块并将其添加到节点(我假设您只需将 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"]}}

关于puppet - 在 Puppet 中合并两个哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com