首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用puppet为每个定义的块创建一个文件

使用puppet为每个定义的块创建一个文件
EN

Stack Overflow用户
提问于 2015-05-11 07:29:51
回答 1查看 92关注 0票数 0

我有一个正在运行的清单,其中我根据一个设置(Exerpt)创建了一个文件夹和一个文件:

代码语言:javascript
复制
define ffnord::mesh(
  $mesh_if_id = "low",
  $mesh_mtu_low = 1280,
  $fastd_low_port = 11280, # fastd port
) {
  ffnord::fastd { "fastd_${mesh_code}":
    mesh_if_id => $mesh_if_id,
    mesh_mtu_low  => $mesh_mtu_low,
    fastd_low_port   => $fastd_low_port,
  }
}

代码语言:javascript
复制
define ffnord::fastd( $mesh_if_id
                     , $mesh_code
                     , $mesh_mtu_low = 1280
                     , $fastd_low_port
                     ) {

  file {
    "/etc/fastd/${mesh_code}-mesh-low-vpn/":
      ensure =>directory,
             require => Package[ffnord::resources::fastd];
    "/etc/fastd/${mesh_code}-mesh-low-vpn/fastd.conf":
      ensure => file,
             notify => Service[ffnord::resources::fastd],
             content => template('ffnord/etc/fastd/fastd-low.conf.erb');
  } 
}

如何定义这些配置的可变数量:

代码语言:javascript
复制
  $mesh_if_id = "low",
  $mesh_mtu_low = 1280,
  $fastd_low_port = 11280, # fastd port

  $mesh_if_id = "something",
  $mesh_mtu_low = 12345,
  $fastd_low_port = 112345, # fastd port
  ...

并循环遍历这些块,以便在ffnord/etc/fastd/中为每个块自动创建文件夹和文件?

(我想解决这个问题:https://github.com/ffnord/ffnord-puppet-gateway/pull/116#issuecomment-100619610 )

EN

回答 1

Stack Overflow用户

发布于 2015-05-11 15:48:42

在Puppet 3.x中没有“循环”,但有一些技巧。您可以传递一个表示N个ffnord::fastd实例的Hash of data:

代码语言:javascript
复制
define define ffnord::mesh($fastd_hash) {
  create_resources('ffnord::fastd', $fastd_hash)
}

define ffnord::fastd($mesh_code, $fastd_low_port, $mesh_mtu_low = 1280) {
  file {
    "/etc/fastd/${mesh_code}-mesh-low-vpn/":
      ensure =>directory,
             require => Package[ffnord::resources::fastd];
    "/etc/fastd/${mesh_code}-mesh-low-vpn/fastd.conf":
      ensure => file,
             notify => Service[ffnord::resources::fastd],
             content => template('ffnord/etc/fastd/fastd-low.conf.erb');
  } 
}

$hash_of_fastds = {
  "low_id" => {
    mesh_code      => 'low,
    mesh_mtu_low   => 1280,
    fastd_low_port => 11280,
  },
  "some_id" => {
    mesh_code      => 'something',
    mesh_mtu_low   => 12345,
    fastd_low_port => 112345,
  },
}

ffnord::mesh { 'foo': fastd_hash => $hash_of_fastds, }

注意,我稍微修改了定义::fastd,这里有一个$mesh_if_id参数,我已经把它变成了ffnord::fastd的$namevar。

第一级$hash_of_fastds转换为ffnord::fastd实例的名称,第二级散列是每个ffnord::fastd的参数。

有关详细信息,请参阅documentation on the create_resources function

在Puppet 4中,您可以使用each函数来实现类似的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30157708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档