Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Puppet哈希中查找包含特定键值对的键_Puppet - Fatal编程技术网

在Puppet哈希中查找包含特定键值对的键

在Puppet哈希中查找包含特定键值对的键,puppet,Puppet,我还是个木偶初学者。所以请容忍我。假设我通过某个模块在Puppet中创建了这个散列 account = { user@desktop1 => { owner => john, type => ssh-rsa, public => SomePublicKey }, user@desktop2 => { owner => mary, type => ssh-rsa, publ

我还是个木偶初学者。所以请容忍我。假设我通过某个模块在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中实现这一点,尽管令人困惑的是,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"]