Я изо всех сил пытаюсь заставить это работать и не понимаю, где я ошибаюсь, может кто-нибудь посоветовать мне, как исправить?
В основном я хочу получить массив в моем 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'),
}
}
Изменить: исправлена опечатка, заполнение, чтобы получить ограничение на редактирование символов