在Puppet哈希中查找包含特定键值对的键
我还是个木偶初学者。所以请容忍我。假设我通过某个模块在Puppet中创建了这个散列在Puppet哈希中查找包含特定键值对的键,puppet,Puppet,我还是个木偶初学者。所以请容忍我。假设我通过某个模块在Puppet中创建了这个散列 account = { user@desktop1 => { owner => john, type => ssh-rsa, public => SomePublicKey }, user@desktop2 => { owner => mary, type => ssh-rsa, publ
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]
提前感谢
问题是关于如何在Puppet中实现这一点,尽管令人困惑的是,Hash是一个Ruby Hash,并且问题还有一个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)
这将导致:
注意:范围(类[main]):[user@desktop1, user@desktop3]
这个问题询问如何在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)
这将导致:
注意:范围(类[main]):[user@desktop1, user@desktop3]
另一个选项使用:
account.每个_都有_对象([]){|(k,v),a | a[”user@desktop1", "user@desktop3"]
假设键和值是字符串
另一个选项,使用:
account.每个_都有_对象([]){|(k,v),a | a[”user@desktop1", "user@desktop3"]
假设键和值是
String
你的意思是键和值是字符串吗?如果是,请编辑以添加引号;如果不是,请解释。我怀疑是否应该提到Puppet或应该包括Puppet标记,因为这只是一个关于散列的问题。这个问题主要是针对散列的Puppet语法,带有例外情况是,account
变量需要用$
表示变量。就我所知,该语法目前对Puppet或Ruby无效。与其他人一样,我要求澄清这是Puppet还是Ruby。您的意思是键和值是字符串吗?如果是,请回答编辑以添加引号;如果不是,请解释。我怀疑是否应该提及Puppet或是否应该包含Puppet标记,因为这只是一个关于哈希的问题。这个问题主要是哈希的Puppet语法,除了帐户
变量需要用$
表示变量外。s就我所知,yntax目前对Puppet或Ruby无效。与这里的其他人一样,我要求澄清这是Puppet还是Ruby。谢谢@alex harvey。效果非常好。很抱歉在Ruby标签中添加了混淆,因为我认为它可以使用一些Ruby函数来解决此问题。谢谢@alex harvey、 非常好用。很抱歉把ruby标签放进去,因为我认为它可以使用一些ruby函数来解决这个问题。
account.each_with_object([]) { |(k, v), a| a << k if v['owner'] == 'john'}
#=> ["user@desktop1", "user@desktop3"]