从嵌入式循环返回唯一值

Returning unique values from embedded loop

我正在使用 puppet 5 并编写一个模块,该模块引用其中有一些重复的 hiera(下面的示例 - 参见 gpgkey):

profile::example1:
  repo1:
    descr: Centos repo 
    gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  repo2:
    descr: Centos repo
    gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  repo3:
    descr: puppet repo
    gpgkey: http://puppet.repo/GPG-KEY

我已成功检索到存储库名称(本例中为 repo1、repo2 和 repo3)。接下来我想做的是 运行 导入 gpgkey 的执行程序,但是这失败了,出现重复声明错误(我假设是因为 gpgkey 在 hiera 中重复)。关于如何做到这一点的任何想法或帮助?这是查找:

  $repo_name = lookup('profile::example1', Hash, 'deep')
        $repo_name.each | $name, Hash $config_hash | {
        notify { "${name}": }
  }

我考虑过嵌入另一个循环以从 $config_hash 中提取值,但无论如何我通常都会得到相同的结果。

Puppet 的内置 unique() 功能似乎很适合这项工作。例如:

$repos = lookup('profile::example1', Hash, 'deep')
$unique_keys = $repos.map |$_name, $props| { $props['gpgkey'] } .unique
$unique_keys.each |$key| {
  # ...
}