使用puppet和hiera安装一组文件

使用puppet和hiera安装一组文件,puppet,hiera,Puppet,Hiera,我有一个正确安装文件的puppet配置。我想让它安装几个文件。配置大致如下(在此处相关的部分): 非常好,正确的文件安装在正确的主机上。但是我现在想安装数量可变(非常相似)的文件,每个主机上的文件数量不同 我的hiera文件当前如下所示: stuff: site_file: "hey-i-am-the-site-file-on-host-awesomeness" stuff: site_file: ["hey-i-am-the-site-file-on-host-awesomeness

我有一个正确安装文件的puppet配置。我想让它安装几个文件。配置大致如下(在此处相关的部分):

非常好,正确的文件安装在正确的主机上。但是我现在想安装数量可变(非常相似)的文件,每个主机上的文件数量不同

我的hiera文件当前如下所示:

stuff:
  site_file: "hey-i-am-the-site-file-on-host-awesomeness"
stuff:
  site_file: ["hey-i-am-the-site-file-on-host-awesomeness",
              "i-am-also-a-site-file-for-awesomeness",
              "do-not-forget-me-too",
              "someday-you-will-want-me-as-well"]
原则上,我想这样说:

stuff:
  site_file: "hey-i-am-the-site-file-on-host-awesomeness"
stuff:
  site_file: ["hey-i-am-the-site-file-on-host-awesomeness",
              "i-am-also-a-site-file-for-awesomeness",
              "do-not-forget-me-too",
              "someday-you-will-want-me-as-well"]
在这里,我正触及木偶和希拉知识的极限。我知道当我认为我应该在puppet中迭代时,我可能错了,但我有点困惑如何做到这一点


有没有关于如何做或学习什么的指针?

Puppet 4和一些迭代函数在这里适用,这些函数在最近启用了未来解析器的Puppet 3中也可用。但是,如果没有未来的解析器,它们在Puppet 3中是不可用的,因此您需要一个不同的解决方案

处理此类问题的经典方法是依赖这样一个事实,即标题为数组(文字或数组值变量)的资源声明为数组的每个元素声明一个单独的资源。这通常与定义的类型相结合,作为直接声明的资源。这种组合大致相当于数组元素上的foreach循环,其主体是定义的类型body。例如:

define mymodule::sitefile() {
    file { "/path/to/my/file/called/$title":
      ensure  => present,
      owner   => 'the-owner',
      group   => 'the-group',
      mode    => 644,
      source  => "puppet:///modules/mymodule/$title",
      require => [Package['something'], User['someone']]
    }

    file { "/path/to/my/symlink/called/$title":
      ensure  => 'link',
      target  => "/path/to/my/file/called/$title",
      require => Package['something']
    }
}

# ...

$stuff = hiera('stuff')
mymodule::sitefile { $stuff['site_file']: }

很难相信,当你呈现的内容在语法上不正确并且呈现了重复的资源时,它“工作得很好”。让我们从实际可行的东西开始,好吗?另外,这是为哪个版本的木偶设计的?Puppet 3(未来的解析器被禁用)的答案可能与Puppet 4的答案有很大不同。这就是Puppet 3.7.2。既然我已经说过这是清单的一个片段,那么在语法上什么是不正确的呢?(啊,为了简化,我复制了文件名,修复了。)但是你没有提到你是否在使用未来的解析器。啊,对不起。我不是。这绝对是Puppet中lambda之前迭代的流行模板(使用传入的哈希定义)。这个答案将有助于潜在地为其他人指出未来的方向。谢谢,这正是我想要的,同时也揭开了木偶的神秘面纱,这显然将在未来有所帮助。