Iterar recursos em um modelo de marionete

4

Estou tentando gerenciar meu arquivo /etc/hosts com o fantoche, mas não gosto do tipo "host" interno. Gostaria de usar meu próprio modelo, se possível.

Por isso, defini um recurso 'host':

    # Basic hosts configuration
    class hosts {

    # Host resource
    define host (
        $address,
        $names
    ) {

    }

    Network::Hosts::Host {
        before   => File['/etc/hosts']
    }

    # Configure hosts file
    file {
        "/etc/hosts":
        ensure   => present,
        checksum => md5,
        owner    => root,
        group    => root,
        mode     => 0644,
        content  => template("network/hosts.erb"),
    }

Em outros lugares, eu defino recursos do host:

network::hosts::host { 'puppet.test.lan':
    address => '192.168.56.101',
    names => 'puppet',
}

Eu gostaria de incluir a lista de hosts definidos no meu modelo, mas não sei como iterar sobre os recursos e suas propriedades. Eu tentei usar concatenação de string, mas não consegui fazer funcionar e não foi muito elegante.

Como posso iterar todos os meus hosts definidos e incluí-los no modelo?

    
por jjmontes 04.03.2012 / 02:54

2 respostas

5

Você poderia usar o módulo puppet-concat do RIPienaar, onde você cria um único arquivo com muitos arquivos ou modelos menores.

A definição seria algo assim:

define host($address, $names) {
  concat::fragment{"hosts-$address":
    target  => "/etc/hosts",
    content => template("network/hosts_single.erb")
  }
}

O modelo hosts_single.erb representaria uma única linha no arquivo. Você provavelmente também adicionaria um fragmento para um cabeçalho e definiria order => "01" para garantir que ele esteja no topo do arquivo gerado (10 é o padrão).

    
por 04.03.2012 / 11:29
5

Eu olharia a biblioteca de augeas para gerenciar as entradas no seu arquivo /etc/hosts . É um pré-requisito para o Puppet, então ele já está instalado. Talvez seja necessário fazer o download de um pacote augeas adicional para obter acesso ao utilitário de linha de comando augtool . Isso é útil para testes antes da integração do Puppet.

A entrada do arquivo de hosts, um exemplo listado no site principal: link

ou

link

Suponho que você também poderia distribuir um arquivo de hosts padrão e apenas modificar a linha que precisa ser única por host ...

    
por 04.03.2012 / 03:11

Tags