如何遍历 Puppet 3.8 中的哈希数组?
How do I iterate through an array of hashes in puppet 3.8?
我正在尝试设置一个简单的人偶 class 来循环遍历哈希数组,每个哈希数组都包含 yum 存储库的配置。我使用的是 Puppet 版本 3.8.2,这意味着无法使用 .each 函数。
目前我的木偶代码如下所示:
class ::yum_repos {
$repos = [
{
'name' => 'test_repo1',
'base_url' => 'example1.com',
'ensure' => 'present',
'gpgcheck' => 'true',
},
{
'name' => 'test_repo2',
'base_url' => 'example2.com',
'ensure' => 'present',
'gpgcheck' => 'true',
},
]
define add_repo {
yumrepo { $name:
ensure => $ensure,
name => $name,
baseurl => $base_url,
gpgcheck => $gpgcheck,
enabled => 'true',
}
}
add_repo { $repos: }
}
不幸的是,这引发了以下错误:
Error: Could not retrieve catalog from remote server: Could not intern from text/pson: Could not intern from data: Could not find relationship source "::yum_repos::Add_repo[nametest_repo2ensurepresentgpgchecktruebase_urlexample2.com]"
有人能解释一下正确的做法吗?
非常感谢!
要在 Puppet < 4 中迭代资源声明(或更大的代码块)而不使用 future 解析器,我们需要使用哈希、定义的资源类型(如果不迭代内部类型)和create_resources
函数。用法已记录 here.
对于您的具体情况,代码如下所示:
# hash of resources
$repos = {
'test_repo1' => { 'base_url' => 'example1.com',
'ensure' => present,
'gpgcheck' => true,
},
'test_repo2' => { 'base_url' => 'example2.com',
'ensure' => present,
'gpgcheck' => true,
},
}
# iterate over resource declarations
create_resources(yumrepo, $repos)
如果您想迭代更大的资源块,那么以您定义的资源类型为例,我们将相应地修改上面的内容:
# defined resource type encapsulating code to iterate over
define add_repo($ensure, $base_url, $gpgcheck) {
yumrepo { $title:
ensure => $ensure,
baseurl => $base_url,
gpgcheck => $gpgcheck,
enabled => true,
}
}
# iterate over resource declarations
create_resources(add_repo, $repos)
我正在尝试设置一个简单的人偶 class 来循环遍历哈希数组,每个哈希数组都包含 yum 存储库的配置。我使用的是 Puppet 版本 3.8.2,这意味着无法使用 .each 函数。
目前我的木偶代码如下所示:
class ::yum_repos {
$repos = [
{
'name' => 'test_repo1',
'base_url' => 'example1.com',
'ensure' => 'present',
'gpgcheck' => 'true',
},
{
'name' => 'test_repo2',
'base_url' => 'example2.com',
'ensure' => 'present',
'gpgcheck' => 'true',
},
]
define add_repo {
yumrepo { $name:
ensure => $ensure,
name => $name,
baseurl => $base_url,
gpgcheck => $gpgcheck,
enabled => 'true',
}
}
add_repo { $repos: }
}
不幸的是,这引发了以下错误:
Error: Could not retrieve catalog from remote server: Could not intern from text/pson: Could not intern from data: Could not find relationship source "::yum_repos::Add_repo[nametest_repo2ensurepresentgpgchecktruebase_urlexample2.com]"
有人能解释一下正确的做法吗?
非常感谢!
要在 Puppet < 4 中迭代资源声明(或更大的代码块)而不使用 future 解析器,我们需要使用哈希、定义的资源类型(如果不迭代内部类型)和create_resources
函数。用法已记录 here.
对于您的具体情况,代码如下所示:
# hash of resources
$repos = {
'test_repo1' => { 'base_url' => 'example1.com',
'ensure' => present,
'gpgcheck' => true,
},
'test_repo2' => { 'base_url' => 'example2.com',
'ensure' => present,
'gpgcheck' => true,
},
}
# iterate over resource declarations
create_resources(yumrepo, $repos)
如果您想迭代更大的资源块,那么以您定义的资源类型为例,我们将相应地修改上面的内容:
# defined resource type encapsulating code to iterate over
define add_repo($ensure, $base_url, $gpgcheck) {
yumrepo { $title:
ensure => $ensure,
baseurl => $base_url,
gpgcheck => $gpgcheck,
enabled => true,
}
}
# iterate over resource declarations
create_resources(add_repo, $repos)