Использование хеша в определении узла и переход к шаблону

Я изо всех сил пытаюсь заставить это работать и не понимаю, где я ошибаюсь, может ли кто-нибудь помочь мне, как исправить?

По сути, я хочу получить массив в моем файле 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',
            },
          }
        }
}

Когда я запускаю кукольный клиент, я продолжаю получать следующее:

err: Не удалось получить каталог с удаленного сервера: Ошибка 400 на СЕРВЕРЕ: Не удалось выполнить синтаксический анализ для создания среды: Синтаксическая ошибка при '='; ожидается '}' в /etc/puppet/manifests/nodes/test.pp:3 на узле 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 -%>

Может ли кто-нибудь помочь мне с исправлением выше, пожалуйста?

Спасибо Дэн


person Dan    schedule 14.02.2013    source источник


Ответы (1)


Я считаю, что фактическая проблема здесь заключается в использовании переменной ($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", ],
}

Подробнее см. на GitHub или PuppetForge

person Stuart M    schedule 04.03.2013