如何在人偶3.8中遍历一系列哈希?

时间:2018-11-02 10:52:39

标签: loops iteration puppet

我试图建立一个简单的p类来遍历散列数组,每个散列都包含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]"

有人能解释这样做的正确方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

要在没有未来的解析器的情况下迭代Puppet <4中的资源声明(或更大的代码块),我们需要使用散列,已定义的资源类型(如果不对固有类型进行迭代)和{{ 1}}函数。使用情况已记录在here中。

对于您的特定情况,代码如下:

create_resources

如果您要遍历更大的资源块,然后以定义的资源类型为例,我们将相应地修改上面的内容:

# 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)