在节点定义中使用哈希并传递给模板

时间:2013-02-14 16:27:18

标签: hash puppet

我努力让这个工作起来并且不明白我哪里出错了,有人可以指导我如何纠正吗?

基本上我想在我的nodes.pp中获取一个数组,然后我的模板文件使用它来循环遍历它并写下每行元素的一行:

nodes.pp:
    node test{
        net::addr { 'routing':
          $routes = {
            route1 => {
                address => '172.29.54.70',
                netmask => '255.255.255.0',
                gateway => '172.29.54.65',
                dev     => 'eth0',
            },
            route2 => {
                address => '192.168.1.3',
                netmask => '255.255.255.0',
                gateway => '192.168.1.1',
                dev     => 'eth3',
            },
          }
        }
}

当我运行puppet客户端时,我会继续获取以下内容:

错误:无法从远程服务器检索目录:SERVER上的错误400:无法解析环境生成:'='处的语法错误;在/ etc / puppet / manifests / nodes /中预期'}' test.pp:节点test.myincorp.net上的3

addr.pp

define net::addr (
  $address='',
  $netmask='',
  $gateway='',
  $dev='',
) {

  file { "route-${name}":
    ensure  => 'present',
    mode    => '0644',
    owner   => 'root',
    group   => 'root',
    path    => "/etc/sysconfig/network-scripts/route-${name}",
    content => template('network/addr.erb'),
}
}

Template:addr.erb:

<% routes.each do |route| -%>
  <%= route['address'] %>  <%= route['netmask'] %> <%= route['gateway'] %> <%= route['dev'] %>
<% end -%>
<% end -%>
<% end -%>

有人可以帮我解决上述问题吗?

由于 丹

1 个答案:

答案 0 :(得分:0)

我认为这里的实际问题是在资源定义中使用变量($routes):而不是使用$routes = { ... },您必须在定义中设置键/值对资源,例如routes => { ... }

但我实际上会完全推荐一条不同的路线:你见过puppet-network模块吗?它会自动为您处理静态路由文件的创建,因此您不必自己实现任何此类功能。例如,puppet-network使用以下方法实现此目的:

network::route { "eth0":
  address => [ "192.168.2.0", "10.0.0.0", ],
  netmask => [ "255.255.255.0", "255.0.0.0", ],
  gateway => [ "192.168.1.1", "10.0.0.1", ],
}

GitHubPuppetForge

查看更多详情