Boneco trabalhando com hashes e matrizes aninhados


0

Quero fazer check-out de vários projetos SVN e preciso poder escolher os nomes de diretório para cada filial ou tronco.

Agora, quero verificar o projeto SVN chamado svn_name na pasta service_dir e, dentro dessa pasta, quero criar uma pasta de tronco e uma pasta de ramos com todos os ramos.

--- pasta SVN

-------- ramos

--------------- branch1_name

--------------- branch2_name

------- trunk_name

Eu tenho a seguinte estrutura do meu hash

$hash = { 
         'svn_name' => { 
             service_dir  => 'directory_name',
                   branch => [ { branch => '0.1', branch_dir => 'branch1_name'}, 
                               { branch => '0.2', branch_dir => 'branch2_name'} ],
                    trunk => {  service_dir => 'trunk_name'},
        }
}

Agora eu uso create_resources com o hash e meu tipo definido para criar as pastas necessárias e efetuar o checkout das cópias de trabalho.

O problema é que não consigo percorrer minha matriz de ramificações, não sei como acessar os valores dentro do hash.

define test (
  $service_dir,
  $branch,
  $trunk
){
  file { "/xxx/${service_dir}/branches/${branch[branch_dir]}":
    ensure => present
  }
}

Como faço para acessar as variáveis? Ou existe uma maneira muito mais fácil de conseguir isso? Não quero usar o vcsrepo ou módulos semelhantes, porque ainda sou novo no Puppet e preciso praticar.

Edit1: Eu provavelmente não preciso do hash para o tronco, certo? trunk => 'trunk_name' deve ser suficiente

Respostas:


1

Para ajudá-lo a alcançar seu objetivo mais rapidamente, eu recomendo o uso do tipo vcsrepo fornecido pelo PuppetLabs no github ou forge de fantoches . Isso envolve as ferramentas VCS mais comuns, incluindo o subversion. Apenas para impedir que você reinvente a roda.

Sobre sua pergunta sobre sintaxe de marionetes, adaptei um pouco o exemplo do manual para atender seu problema:

$foo = "key"

$myhash = [ { key       => "some value 0",
              other_key => "some other value 0" },
            { key       => "some value 1",
              other_key => "some other value 1" } ]
notice( $myhash[0][$foo] )
notice( $myhash[1][$foo] )

Testando:

% puppet apply foo.pp
Notice: Scope(Class[main]): some value 0
Notice: Scope(Class[main]): some value 1
Notice: Finished catalog run in 0.08 seconds

1

Você pode usar cada função (acho que foi implementada no fantoche 4.6) para iterar através de hashes e matrizes para definir recursos.

$hash = {
  'svn_name' => {
      service_dir  => 'directory_name',
      branch => [
          { branch => '0.1', branch_dir => 'branch1_name'},
          { branch => '0.2', branch_dir => 'branch2_name'} ],
      trunk => {  service_dir => 'trunk_name'},
  }
}

$hash['svn_name']['branch'].each | $branch | {
  notify { "TestNotify ${branch[branch]}\\${branch[branch_dir]}" : }
}

Eu apenas mostrei fazendo uma função 'each', mas você executa uma função each dentro de uma função each, mas isso não faria sentido com o seu cenário.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.