Puppet 从嵌入循环返回唯一值

Puppet 从嵌入循环返回唯一值,puppet,Puppet,我正在使用puppet 5并编写一个模块,该模块引用了一些hiera,其中有一些重复(下面的示例-参见gpgkey): 我已经成功地检索到了repo名称(本例中为repo1、repo2和repo3)。接下来我要做的是运行exec来导入gpgkey,但是由于重复声明错误而失败(我假设是因为gpgkey在hiera中是重复的)。关于如何做到这一点,有什么想法或帮助吗?以下是查找: $repo_name = lookup('profile::example1', Hash, 'deep')

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

我已经成功地检索到了repo名称(本例中为repo1、repo2和repo3)。接下来我要做的是运行exec来导入gpgkey,但是由于重复声明错误而失败(我假设是因为gpgkey在hiera中是重复的)。关于如何做到这一点,有什么想法或帮助吗?以下是查找:

  $repo_name = lookup('profile::example1', Hash, 'deep')
        $repo_name.each | $name, Hash $config_hash | {
        notify { "${name}": }
  }
我已经考虑过嵌入另一个循环来从$config_散列中提取值,但不管怎样,我通常都会得到相同的结果。

Puppet的内置函数似乎很适合这项工作。例如:

$repos = lookup('profile::example1', Hash, 'deep')
$unique_keys = $repos.map |$_name, $props| { $props['gpgkey'] } .unique
$unique_keys.each |$key| {
  # ...
}
木偶的内置功能对于这项工作来说似乎很自然。例如:

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

谢谢你的意见!但是,我现在收到一个空字符串错误:“服务器错误:评估错误:0处的空字符串标题。标题字符串的长度必须大于零。”任何即时想法。@user3229731,首先猜测:您的一个repo在数据中没有为其声明gpgkey。如果这些方面存在问题,那么您可以使用
filter
函数将生成的空字符串排除在外。非常感谢-实际上我已经找到了另一条路线,但上面的代码很有用。感谢您的输入!但是,我现在收到一个空字符串错误:“服务器错误:评估错误:0处的空字符串标题。标题字符串的长度必须大于零。”任何即时想法。@user3229731,首先猜测:您的一个repo在数据中没有为其声明gpgkey。如果这些方面存在问题,那么您可以使用
filter
函数将生成的空字符串排除在外。非常感谢-实际上我已经找到了另一条路线,但上面的代码很有用。