Назад | Перейти на главную страницу

использование манифеста марионетки с хешем

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

В основном я хочу получить массив в моем node.pp, который затем используется моим файлом шаблонов, циклически просматривая его и записывая строку каждого элемента:

node.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',
            },
          }
        }
}

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

ошибка: не удалось получить каталог с удаленного сервера: ошибка 400 на СЕРВЕРЕ: не удалось выполнить синтаксический анализ для производственной среды: синтаксическая ошибка в '='; ожидается '}' в / etc / puppet / manifest / nodes / test.pp: 3 на узле test.myincorp.net

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'),
}
}

Шаблон: addr.erb:

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

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

Спасибо Дэн

Похоже, вы намереваетесь передать массив маршрутов в net :: addr в имени маршрута, но вы определили его как получение 4 ключей каждого маршрута, а не массива маршрутов. Попробуйте следующее и посмотрите, работает ли оно лучше.

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',
            },
        }
    }
}

и

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

Изменить: исправлена ​​опечатка, заполнение, чтобы получить ограничение на редактирование символов