fantoche e loops de manifesto

2

Como posso acessar elementos de uma matriz em manifestos de puppet, ou seja, criar um loop for / while? Digamos que eu tenha em meus nodes.pp

Name [ 'testserver', 'floor1', 'floor3' ],

Como posso iterar sobre isso para que, quando eu definir o recurso de arquivo, eu possa iterar sobre cada um e garantir que os recursos de arquivo corretos existam para cada elemento?

Obrigado Dan

    
por Dan 12.02.2013 / 19:49

1 resposta

8

Não há como fazer um loop no sentido tradicional, mas você provavelmente ainda pode conseguir o que está procurando. Uma matriz, quando usada como um título de recurso, será expandida automaticamente.

Então, para um caso simples, você teria apenas uma matriz como

$packages = [ 'httpd', 'mysql', 'puppet' ]

Em seguida, use isso em um recurso, como:

package { $packages:
  ensure => installed,
}

Para casos mais complicados, você pode usar um tipo definido. Não tenho certeza de onde você está indo com o seu exemplo - deixe-me saber se isso não faz sentido para o seu caso de uso.

Digamos, por exemplo, que você esteja enviando uma matriz de [ 'testserver', 'floor1', 'floor3' ] e o que você precisa fazer com essa lista é criar um arquivo em /etc/foo/testserver (para o primeiro elemento) e, em seguida, executar uma exec para configurar algo assim que for feito.

define datafiles {
  file { "/etc/foo/${title}":
    ensure  => present,
    content => $title,
  }
  exec { "setup-${title}":
    command => "/usr/local/bin/something -a /etc/foo/${title}",
    require => File["/etc/foo/${title}"],
  }
}

Em seguida, usando a matriz no título do tipo definido, ela será expandida, criando os recursos de arquivo e exec para cada membro da matriz.

$names = [ 'testserver', 'floor1', 'floor3' ]
datafiles { $names: }
    
por 12.02.2013 / 20:08

Tags