2013-02-14 13 views
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', 
      }, 
      } 
     } 
} 

當我運行客戶端木偶我繼續收到以下內容:

錯誤:無法從遠程服務器檢索目錄:SERVER上的錯誤400:無法解析環境生成:'='時出現語法錯誤;預期 '}' 在的/ etc /木偶/艙單/節點/ 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 -%> 

有人可以幫我解決以上問題嗎?

感謝 丹

回答

0

我相信這裏的實際問題是使用在資源定義一個變量($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", ], 
} 

查看更多細節在GitHubPuppetForge