como passar parâmetros para módulos de fantoches?

5

Qual é a melhor prática para configuração de módulos de fantoches? Eu tenho fantoche 2.7.11 . Acho isso muito confuso, parece usar variáveis globais.

node default {
   $always_apt_update = true
   include apt
}

Devo criar uma classe que herde a maior parte da configuração do original? A documentação parece ter muitas versões e não tenho certeza qual delas se aplica a mim.

ATUALIZAÇÃO:

quando eu tento isso:

  class { 'apt': 
    always_update => 'true',
  } 

Eu recebo um erro:

Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32
    
por Tombart 07.03.2013 / 10:53

3 respostas

6

Você deve usar classes Parametrizadas em vez de variáveis globais.

Por exemplo:

node default {
  class {'apt': 
    always_update =>true 
  }
}
class apt ($always_update = true ) {
  // code 
}

node 'example.com' { 
  class { bar: }
}

Veja a documentação dos fantoches para mais informações:

por 07.03.2013 / 12:14
4

Estas respostas parecem um pouco desatualizadas, com novas versões do fantoche, isto é, 3.7.x, parâmetros de classe podem ser passados usando o Hiera. Recurso como declaração de classe não é mais considerado como melhor prática.

Embora a segunda resposta use Hiera, mas está usando a função "hiera" explicitamente, o que é novamente uma prática não tão recomendável.

A nova solução seria algo assim:

/etc/puppet/manifests/site.pp :

node default {
    include apt
}

/etc/puppet/modules/apt/manifests/init.pp :

class apt ($always_update = true ) {
  // code 
}

/etc/puppet/hieradata/<filename>.yaml

apt::always_update: true

Arquivos yiera de dados Hiera podem ter valores diferentes do parâmetro, conforme necessário.

    
por 27.05.2015 / 09:44
3

A prática recomendada atualmente é usar Hiera . Ele é construído em 3.x, mas em 2.7 você precisa instalá-lo separadamente.

Você pode então pegar dados do Hiera no seu manifesto para a classe apt :

$always_apt_update = hiera("always_apt_update")

Com uma configuração Hiera como esta ...

:hierarchy:
  - %{::clientcert}
  - common

.. o nó (extraído do clientcert fact) será usado como uma precedência maior na pesquisa do que o arquivo common.yaml .

Portanto, com always_apt_update: false em node1.example.com.yaml e always_apt_update: true em common.yaml , node1 terminará com essa variável configurada como false enquanto outros nós terão o padrão como true.

    
por 08.03.2013 / 07:06