Boneco básico: Escrevendo a configuração da infraestrutura com um ENC, estilo, como fazer?

6

Eu mal sei o suficiente Puppet para fazer esta pergunta.

Eu acho que entendo que a configuração para um determinado nó consistiria em uma coleção de módulos, com alguma cola específica do nó. Nos tutoriais e na documentação, parece que os recursos específicos do nó estariam em um arquivo manifests / site.pp, em node /nodename/ { } resources, com "includes" para as classes relevantes e recursos para fazer alterações de configuração específicas do nó.

Agora, insira um ENC (External Node Classifier, classificador de nó externo) como o Forman.

Da minha leitura da documentação do ENC, eu PODERIA usar node /nodename/ { } resources em um site.pp, mas não posso declarar nenhum novo recurso. Basicamente não é recomendado. O YAML gerado é tudo apenas inclui e configurações de variáveis.

Então, o que fazer para uma configuração específica para um determinado nó ou um grupo de host - a fiação que integra todas as classes incluídas?

Você acaba criando uma classe específica para o nó? Onde você coloca essa classe, em um módulo específico do nó? Ou você faz um módulo pega-tudo para sua configuração específica do site com classes que podem ser atribuídas a um nó específico?

    
por Mojo 06.02.2014 / 22:30

2 respostas

4

Uma abordagem para isso é expressa em Criando Marionetes - Funções e Perfis . Os princípios básicos são os seguintes:

  • Um nó inclui uma função e apenas uma.
  • Uma função inclui um ou mais perfis para definir o tipo de servidor
  • Um perfil inclui e gerencia módulos para definir uma pilha técnica lógica
  • Módulos gerenciam recursos
  • Os módulos só devem ser responsáveis pelo gerenciamento de aspectos do componente para o qual foram escritos
por 07.02.2014 / 15:57
3

Estou supondo que você está dizendo ao Foreman para importar de um mestre de marionetes, se assim fosse eu sugeriria configurar o seu diretório de fantoches assim:

puppet
puppet/manifests
puppet/manifests/site.pp
puppet/manifests/nodes/default.pp
puppet/manifests/nodes/{server-type}.pp
...
puppet/modules
puppet/modules/{module1}
puppet/modules/{module1}/files
puppet/modules/{module1}/manefests
puppet/modules/{module1}/templates
...
etc

você incluiria essa linha no arquivo site.pp:

import 'nodes/*'

Em default.pp, crie seu servidor base:

node default {
    #this is where you put all of the puppet directives you want on every server.
    #for example if you wanted screen on all of your servers
    package{ "screen": ensure -> installed; }
}

Então, em outro arquivo em nós, digamos, web.pp, você poderia incluir isso e, em seguida, definir as diretivas para todos os servidores da Web da seguinte forma:

node /^web0[1-9]\.example\.com$/ inherits default {
    #this will inherit all of the settings in the default node and then do anything else you add.
    #like installing nginx
    package { "nginx": ensure -> installed; }
}

Você pode até herdar herdações como neste arquivo db.pp:

node db inherits default {
    #install postgresql-9.3
    package { "postgresql-9.3": ensure -> installed; }
}

node /^db0[1-9]\.example\.com$/ inherits db {
    #This block can even be empty unless you need something here.
}
    
por 06.02.2014 / 23:47