在 Puppet Hash 中查找包含特定键值对的键
Find key contain specific key value pair in Puppet Hash
我还是 Puppet 的初学者。所以请多多包涵。假设我通过某个模块在 Puppet 中创建了这个哈希
account = {
user@desktop1 => {
owner => john,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop2 => {
owner => mary,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop3 => {
owner => john,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop4 => {
owner => matt,
type => ssh-rsa,
public => SomePublicKey
}
}
我如何找到散列中特定键和值对的键?在这种情况下,例如我想找到 john
拥有的所有密钥。所以预期的结果是这样的:
[user@desktop1, user@desktop3]
提前致谢
https://ruby-doc.org/core-2.5.1/Hash.html#method-i-select
account.select {|key, value| value['owner'] == 'john'}.keys
问题询问如何在 Puppet 中执行此操作,但令人困惑的是,哈希是 Ruby 哈希,问题也有一个 Ruby 标记。
无论如何,这就是你在 Puppet 中的做法:
$account = {
'user@desktop1' => {
'owner' => 'john',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop2' => {
'owner' => 'mary',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop3' => {
'owner' => 'john',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop4' => {
'owner' => 'matt',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
}
}
$users = $account.filter |$k, $v| { $v['owner'] == 'john' }.keys
notice($users)
Puppet 应用导致:
Notice: Scope(Class[main]): [user@desktop1, user@desktop3]
使用 Enumerable#each_with_object
的另一个选项:
account.each_with_object([]) { |(k, v), a| a << k if v['owner'] == 'john'}
#=> ["user@desktop1", "user@desktop3"]
假设键和值是 String
。
我还是 Puppet 的初学者。所以请多多包涵。假设我通过某个模块在 Puppet 中创建了这个哈希
account = {
user@desktop1 => {
owner => john,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop2 => {
owner => mary,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop3 => {
owner => john,
type => ssh-rsa,
public => SomePublicKey
},
user@desktop4 => {
owner => matt,
type => ssh-rsa,
public => SomePublicKey
}
}
我如何找到散列中特定键和值对的键?在这种情况下,例如我想找到 john
拥有的所有密钥。所以预期的结果是这样的:
[user@desktop1, user@desktop3]
提前致谢
https://ruby-doc.org/core-2.5.1/Hash.html#method-i-select
account.select {|key, value| value['owner'] == 'john'}.keys
问题询问如何在 Puppet 中执行此操作,但令人困惑的是,哈希是 Ruby 哈希,问题也有一个 Ruby 标记。
无论如何,这就是你在 Puppet 中的做法:
$account = {
'user@desktop1' => {
'owner' => 'john',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop2' => {
'owner' => 'mary',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop3' => {
'owner' => 'john',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
},
'user@desktop4' => {
'owner' => 'matt',
'type' => 'ssh-rsa',
'public' => 'SomePublicKey',
}
}
$users = $account.filter |$k, $v| { $v['owner'] == 'john' }.keys
notice($users)
Puppet 应用导致:
Notice: Scope(Class[main]): [user@desktop1, user@desktop3]
使用 Enumerable#each_with_object
的另一个选项:
account.each_with_object([]) { |(k, v), a| a << k if v['owner'] == 'john'}
#=> ["user@desktop1", "user@desktop3"]
假设键和值是 String
。