Puppet: tokenização simples + necessidade de um agente

1

Gente

Temos uma ferramenta de implantação personalizada no momento e estamos avaliando a substituição por algo não proprietário, como fantoche.

Uma das principais coisas que faz para nós no momento é a tokenização. Por exemplo, em um arquivo server.xml em uma implementação do tomcat, podemos implantar um arquivo chamado server.xml.tokenzenized com uma linha como a abaixo

<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />

e, em seguida, tem um arquivo tokens.xml que teria uma linha como

<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>

nosso processo de implantação examina server.xml.tokenized e substitui os tokens, gravando o arquivo em server.xml.

O fantoche pode fazer isso por um arquivo arbitrário - ou por algo como o tomcat, eu teria que baixar um plugin que entendesse como o tomcat funcionava?

Em segundo lugar, a partir da leitura que fiz até hoje, parece que a maioria das pessoas usa o agente fantoche para recuperar arquivos do mestre - isso tem que ser o caso - você pode ter um script que usa a modelagem de marionetes? e infra-estrutura e, em seguida, entrar em hosts para implantar o software? - a razão é que, por várias razões, temos um preconceito contra agentes em nosso meio ambiente.

Felicidades

    
por phatmanace 14.09.2013 / 17:50

1 resposta

2

Para a primeira pergunta: sim, puppet pode fazer isso usando templates juntamente com hiera e / ou < href="http://projects.puppetlabs.com/projects/facter"> facter . Este processo é totalmente abstraído do software usando o arquivo modelo.

Por exemplo, você pode ter um modelo para server.xml com uma seção como esta:

<Connector address="<%= @ipaddress_eth0 %>"
           executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

A parte <%= @ipaddress_eth0 %> é o que você chama atualmente de 'token', e o fantoche sabe como substituí-la por qualquer host usando facter :

# facter ipaddress_eth0
10.0.0.2

Você pode ter fatos personalizados se precisar deles também.

O tópico de dados hierárquicos é um pouco mais complexo e exige que você leia alguma documentação para ver como ele pode ajudá-lo com suas implantações. Este é uma ótima apresentação de suas possibilidades. Basicamente, sua finalidade é fornecer os meios para separar código e dados (seus 'tokens') e armazenar esses dados em um formato familiar e fácil de manter (YAML ou JSON). O caso de uso que você descreve acima (definindo uma porta personalizada para tomcat ) é o padrão de uso clássico de hiera :

No módulo tomcat , você tem algo como:

class tomcat (
    $port
    ){
    #rest of the module
}

Em um modelo (digamos, server.xml.erb ):

<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />

E a parte dos seus dados hierárquicos que correspondem a esse código seria parecida com:

tomcat::port = 8080

Para a segunda pergunta, a resposta também é sim, até certo ponto. Você pode usar o coletivo de marionetes (na verdade, uma parte da oferta da puppetlabs) para enviar as alterações para um farm sem agente de servidores. Você precisaria instalar os clientes, embora (não exatamente o mesmo, pois esses clientes são passivos, diferentemente dos agentes puppet , que são proativos em solicitar seus catálogos para o puppetmaster ). Novamente, é necessário que você leia a documentação para entender melhor os detalhes de sua funcionalidade.

    
por 14.09.2013 / 18:29

Tags