Ключ поиска содержит определенную пару ключ-значение в Puppet Hash - PullRequest
0 голосов
/ 30 ноября 2018

Я все еще новичок в 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]

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вопрос состоит в том, как сделать это в Puppet, хотя, как ни странно, Hash - это Ruby Hash, и вопрос также имеет тег Ruby.

$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]
0 голосов
/ 30 ноября 2018

Другой вариант, использующий Enumerable#each_with_object:

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

Допустимые ключи и значения: String.

0 голосов
/ 30 ноября 2018

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

account.select {|key, value| value['owner'] == 'john'}.keys
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...