puppet e loop de matriz

5

Oi eu gostaria de alguma ajuda sobre como codificar isso em erb em fantoche, basicamente eu tenho

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

Agora quero imprimir isso em um arquivo com cada elemento respectivo de cada matriz em uma linha, ou seja, a saída do arquivo de modelo em minha classe deve ser como:

felix 192.168.43.5 prod
washington 192.168.43.11 uat

Quando tentei isso, escrevi o seguinte código no meu arquivo de modelo:

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

mas o que obtenho são várias impressões recursivas em vez de uma impressão de cada matriz e depois passar para o próximo elemento da matriz.

Estou pensando em um loop for, mas não sei como obter o comprimento da matriz como o argumento para o loop for. Gostaria de receber algumas orientações sobre como realizar a saída correta?

Eu tentei fazer algo assim, mas ele falha com erros na execução de fantoches?

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

Obrigado Dan

    
por Dan 12.02.2013 / 19:14

2 respostas

9

Algum motivo específico para usar essa estrutura de dados? Isso ficará ilegível muito rapidamente, e seria muito fácil quebrar as coisas acidentalmente adicionando ou removendo um elemento de um dos arrays e não dos outros. Que tal algo assim em vez disso?

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

Então é muito mais simples trabalhar com o erb:

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

Mas, se você está preso à sua estrutura de dados atual, isso deve acontecer ..

<% (1..servername.length).each do |i| -%>
    
por 12.02.2013 / 19:39
0

A resposta de Shane Madden é ótima, mas acho que há um '@' em falta:

em vez de

<% servers.each do |server| -%>

deve-se usar

<% @servers.each do |server| -%>

alguém com maior reputação, por favor, comente isso na resposta original e / ou reconheça que minha "resposta" pode ser excluída

Também é assim que é documentado no fantoche livro de receitas da terceira edição

Obrigado Matt

    
por 27.07.2018 / 13:25