查找键包含Puppet Hash中的特定键值对

问题描述 投票:0回答:3

我还是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]

提前致谢

puppet
3个回答
2
投票

这个问题询问如何在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)

傀儡应用导致:

Notice: Scope(Class[main]): [user@desktop1, user@desktop3]

2
投票

https://ruby-doc.org/core-2.5.1/Hash.html#method-i-select

account.select {|key, value| value['owner'] == 'john'}.keys

1
投票

使用Enumerable#each_with_object的另一个选择:

account.each_with_object([]) { |(k, v), a| a << k if v['owner'] == 'john'}
#=> ["user@desktop1", "user@desktop3"]

假设键和值为String

© www.soinside.com 2019 - 2024. All rights reserved.