【问题标题】:How do I iterate through an array of hashes in puppet 3.8?如何遍历 puppet 3.8 中的哈希数组?
【发布时间】:2018-11-02 21:53:36
【问题描述】:

我正在尝试设置一个简单的 puppet 类来循环遍历一组哈希,每个哈希都包含一个 yum 存储库的配置。我使用的是 Puppet 3.8.2 版本,这意味着无法使用 .each 函数。

目前我的 puppet 代码如下所示:

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]"

有人能解释一下正确的方法吗?

提前非常感谢!

【问题讨论】:

  • 未来的解析器可以使用 3.8.2 中的 .each。另外,如果你确定要使用旧版本的 Puppet,那么为了安全和稳定,你至少应该更新到最新的补丁版本。如果您不想使用未来的解析器,那么您想要实现的内容将在此处记录有关用法:puppet.com/docs/puppet/3.8/function.html#createresources。告诉我们您想要的路线。
  • 感谢您的快速回复。我将尝试使用您提供的有关 create_resources 使用的文档。如果有效,则将其作为答案弹出,我会将其标记为已解决。我会回复你的!
  • 您对文档的引用正是我需要的答案,感谢您的帮助!如果您将其作为答案提交,我可以通过您的修复将问题标记为已解决。

标签: loops iteration puppet


【解决方案1】:

要在没有未来解析器的情况下迭代 Puppet 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-08-22
    • 2020-03-28
    相关资源
    最近更新 更多