Puppet

木偶和數組循環

  • July 27, 2018

嗨,我想要一些關於如何在木偶中用 erb 編碼的幫助,基本上我有

server::actionhost { 'details':
   servername[ 'felix', 'washington', ],
   ipa [ '192.168.43.5', '192.168.43.11', ],
   enviro [ 'prod', 'uat', ],
}

我現在想將它列印到一個文件中,其中每個數組中的每個元素都在一行中,即我的類中模板文件的輸出應該是這樣的:

felix 192.168.43.5 prod
washington 192.168.43.11 uat

當我嘗試這樣做時,我在模板文件中編寫了以下程式碼:

<% servername.each do |name| -%>
   <% ipa.each do |ip| -%>
       <% enviro.each do |env| -%>
           <%= name %> <%= ip %> <%= env %>
       <% end -%>
   <% end -%>
<% end -%>

但我得到的是多次遞歸列印,而不是從每個數組列印,然後移動到下一個數組元素。

我正在考慮一個 for 循環,但不確定如何將數組長度作為 for 循環的參數,希望獲得一些關於如何完成正確輸出的指導?

我嘗試做這樣的事情,但它在 puppet 執行時失敗並出現錯誤?

<% for id in servername.length %>
   <%= servername[id] %> <%= ipa[id] %> <%= enviro[id] %>
<% end -%>

謝謝丹

您需要使用該資料結構的任何特殊原因?這將很快變得不可讀,並且很容易通過從一個數組而不是其他數組中意外添加或刪除元素來破壞事物。像這樣的東西怎麼樣?

$servers = [
 {
   name => 'felix',
   ip   => '192.168.43.5',
   env  => 'prod',
 },
 {
   name => 'washington',
   ip   => '192.168.43.11',
   env  => 'uat',
 },
]

然後在 erb 中使用會簡單得多:

<% servers.each do |server| -%>
 <%= server['name'] %> <%= server['ip'] %> <%= server['env'] %>
<% end -%>

但是,如果您堅持使用目前的資料結構,那麼應該這樣做..

<% (1..servername.length).each do |i| -%>

引用自:https://serverfault.com/questions/478120