Posicionamento de variáveis no módulo Puppet

2

Eu tenho um módulo de fantoches para configurar vários PU's Gigaspaces. Cada um deles tem algumas variáveis a serem colocadas dentro dos modelos de arquivo de configuração. Também estamos usando vários ambientes diferentes para que essas variáveis sejam repetidas várias vezes para conter os valores de cada ambiente.

Minha pergunta é onde o melhor lugar para armazenar essas variáveis seria? Uma classe própria, um .pp externo eu importo, ou algo assim?

    
por Michael Duffy 15.03.2011 / 16:40

4 respostas

1

Muito do que você está perguntando se resume à convenção mais do que a requisitos de idioma rigorosos ... A linguagem é flexível o suficiente para fazer as coisas de várias maneiras diferentes.

Se todos os servidores estão sendo configurados da mesma forma, deve funcionar bem para ter uma única classe "gigaspace" com as variáveis definidas no topo.

Se suas necessidades são mais complicadas do que uma única classe de servidor, o que eu faria é criar um módulo "gigaspace" com uma classe comum contendo variáveis herdadas por classes que precisam das variáveis. No gigaspace / manifests, haveria um "init.pp" contendo " class gigaspace {...} " e, em seguida, um "common.pp" contendo " class gigaspace::common {...} ". Então, em qualquer classe que eu precisasse de acesso a essas variáveis, eu herdaria da classe comum, como " class gigaspace::master inherits gigaspace::common { ... } ".

Se você não herdar da outra turma, é difícil encontrar variáveis em outra turma, especialmente a partir de um modelo. Com uma sequência direta, você pode obter acesso somente leitura especificando o nome inteiro, no entanto.

    
por 15.03.2011 / 17:44
2

Sou muito fã de usar um classificador de nós externos para definir variable=value no escopo superior. Dessa forma, você pode usar um datastore real e lógica de programação para determinar quais valores devem ser para um determinado nó, em vez de empilhar um monte de condicionais em linguagem de marionetes em um tipo de arquivo variables.pp confuso. Herança e escopo são duas grandes áreas no Puppet que não funcionam como muitas pessoas esperam, e na verdade têm suas próprias ressalvas e problemas, mesmo se você souber o que esperar; sem nós externos, você precisará de um ou de ambos.

A maneira como um classificador de nó externo funciona é que você configura o puppet.conf do seu puppetmaster para executá-lo:

[master]
node_terminus = exec
external_nodes = /path/to/my/classifier.rb

O mestre o executa toda vez que um cliente se conecta com um argumento de linha de comando do nome do certificado do cliente que está se conectando. Seu código faz o que você precisa e retorna YAML com uma lista de classes: que deve ser incluída para o nó e uma lista de parameters: que são configurados como variáveis de escopo superior para uso em manifestos e modelos.

Existem alguns classificadores de amostra no diretório ext / da distribuição de origem. É uma maneira super de resolver o problema dos "Padrões Razoáveis, Mais Sobreposições onde Preciso Dele".

    
por 16.03.2011 / 02:30
1

Existem duas recomendações que eu geralmente vejo para isso. Uma é usar um classificador de nó externo, como sugerido por eric sorenson. Outra é usar o extlookup. Extlookup é fácil de usar e é incluído com o fantoche a partir da versão 2.6.1. Eu fui feliz com isso.

    
por 16.03.2011 / 03:18
0

Você pode ter um manifesto variables.pp dentro do seu módulo que é chamado pelos seus outros módulos. Essa é a coisa mais comum que já vi. Para as variáveis de ambiente, eu daria uma olhada em alguns fatos e verificaria se você pode usá-los. Se você puder postar um exemplo de seu módulo, eu poderei dar mais detalhes.

    
por 15.03.2011 / 17:39

Tags