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

Hash 在节点定义中使用哈希并传递到模板,hash,puppet,Hash,Puppet,我正在努力让它工作,不知道我哪里出了问题,有人能指导我如何纠正吗 基本上,我希望在my nodes.pp中获得一个数组,然后通过循环遍历并写入每个元素的一行来使用模板文件: nodes.pp: node test{ net::addr { 'routing': $routes = { route1 => { address => '172.29.54.70',

我正在努力让它工作,不知道我哪里出了问题,有人能指导我如何纠正吗

基本上,我希望在my 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客户端时,我不断得到以下信息:

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", ],
}
错误:无法从远程服务器检索目录:服务器上的错误400:无法分析环境产品:语法错误位于“=”;在/etc/puppet/manifests/nodes处应为“}”/ test.pp:3 on node test.myincorp.net

地址: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'),
}
}
模板:addr.erb:

<% routes.each do |route| -%>
  <%= route['address'] %>  <%= route['netmask'] %> <%= route['gateway'] %> <%= route['dev'] %>
<% end -%>
<% end -%>
<% end -%>
有人能帮我修一下上面的吗

谢谢
Dan

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

但实际上我会推荐一条完全不同的路线:你看过这个模块吗?它自动为您处理静态路由文件的创建,因此您不必自己实现这些功能。例如,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", ],
}
有关详细信息,请参阅或