Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在puppet 3.8中迭代哈希数组?_Loops_Iteration_Puppet - Fatal编程技术网

Loops 如何在puppet 3.8中迭代哈希数组?

Loops 如何在puppet 3.8中迭代哈希数组?,loops,iteration,puppet,Loops,Iteration,Puppet,我试图设置一个简单的puppet类来循环遍历一组哈希,每个哈希都包含一个yum存储库的配置。我使用的是Puppet版本3.8.2,这意味着使用。每个函数都是不可能的 当前我的puppet代码如下所示: class ::yum_repos { $repos = [ { 'name' => 'test_repo1', 'base_url' => 'examp

我试图设置一个简单的puppet类来循环遍历一组哈希,每个哈希都包含一个yum存储库的配置。我使用的是Puppet版本3.8.2,这意味着使用。每个函数都是不可能的

当前我的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]"
有人能解释正确的方法吗


非常感谢

要在Puppet<4中迭代资源声明(或更大的代码块),而不使用未来的解析器,我们需要使用哈希、定义的资源类型(如果不迭代内在类型)和
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)
如果您希望迭代更大的资源块,那么以您定义的资源类型为例,我们将相应地修改上述内容:

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

可以在未来的解析器中使用3.8.2中的每个。此外,如果您决定使用一个古老版本的Puppet,那么为了安全性和稳定性,您可能至少应该更新到最新的补丁版本。如果您不想使用未来的解析器,那么您试图实现的是关于用法的文档:。请告诉我们您想要的路线。谢谢您的快速回复。我将尝试使用您提供的有关create_资源使用的文档。如果它有效,那么把它弹出作为答案,我会把它标记为已解决。我会再打给你的!您对文档的引用正是我需要的答案,谢谢您的帮助!如果您将其作为答案提交,我可以通过您的修复将问题标记为已解决。