从嵌入式循环返回唯一值
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| {
# ...
}
我正在使用 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| {
# ...
}