1

我正在努力使它正常工作并且不明白我要去哪里错了,有人可以指导我如何纠正吗?

基本上我想在我的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 客户端时,我不断收到以下信息:

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

地址.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 -%>

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

谢谢丹

4

1 回答 1

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上查看更多详细信息

于 2013-03-04T00:47:14.263 回答