Loop através de hash em puppet define

6

Estou passando um hash para definir assim:

nodes.pp

    net::addr { 'routes':
    ipr => {
        ipr1 => {
            address => '192.168.34.38',
            netmask => '255.255.255.0',
            gateway => '192.168.34.1',
            dev     => 'eth3',
        },
        ipr22 => {
            address => '10.1.5.33',
            netmask => '255.255.255.0',
            gateway => '10.1.5.1',
            dev     => 'eth2',
        },
  }
  }

addr.pp

define net::addr (
    $routes={},
)
{
    if ($num != "") {
     $iname=${routes[route${num}][dev]}
     $num+1
    }
    else{
     $num=0;
    }
}

O que eu quero fazer é definir uma variável chamada iname e configurá-la para o dev em cada elemento hash, então na iteração 1 eu quero que o dev seja definido como eth3, que corresponde ao elemento "ipr1", no próximo iteração eu estava iname definido para eth2 e assim por diante.

Estou lutando para fazer isso sempre que minha variável num fica indefinida e, em seguida, acaba sendo definida como 0, alguém pode sugerir uma maneira de contornar isso ou uma solução mais inteligente?

    
por Dan 16.02.2013 / 12:55

1 resposta

5

A partir da versão 3.3 do Puppet, a linguagem Puppet DSL não suporta iteração.

Você deve conferir a função create_resources() do Puppet Labs: link

Exemplo

# A hash of user resources:
$myusers = {
  'nick' => { uid    => '1330',
              group  => allstaff,
              groups => ['developers', 'operations', 'release'], }
  'dan'  => { uid    => '1308',
              group  => allstaff,
              groups => ['developers', 'prosvc', 'release'], }
}

create_resources(user, $myusers)

No entanto, a partir do Puppet 4.0, o Future Parser agora suporta a iteração com o Lambdas:

$data = ['a','b','c']

$data.each |Integer $index, String $value| {
    notice("${index} = ${value}")
}
    
por 30.04.2013 / 19:08

Tags