Podemos instalar o fantoche sem tocar nos servidores?

5

Ouvi dizer que o fantoche precisa ser instalado no lado do servidor, não apenas no lado do desktop, de onde queremos lançar comandos nos servidores.

Minha pergunta: Existem outros métodos para usar o fantoche? Quer dizer, não queremos instalá-lo no lado do servidor, basta executar scripts do nosso desktop nos servidores ..

    
por evachristine 14.05.2014 / 09:29

5 respostas

7

Você pode usar o fantoche em um modo sem mestre, mas seus servidores ainda precisarão ter o cliente de marionete instalado. Detalhes sobre como configurar isso são discutidos neste post intitulado: Scaling Puppet with Git .

O artigo mostra como você pode configurar um repositório do Git para manter seus arquivos de manifesto do Puppet ( .pp ) e depois executar o Puppet manualmente para aplicá-los.

Exemplo

package { "screen":
  ensure => installed,
}

Basta salvar isso como algo.pp e executá-lo com o Puppet:

$ sudo puppet -v something.pp 
info: Applying configuration version '1264090058'
notice: //Package[screen]/ensure: created

Mas esse método ainda está muito alinhado com o modelo cliente / servidor que você normalmente vê com uma implantação do Puppet.

Há também este tópico da lista de discussão de usuários de marionetes intitulado: Re: [Puppet Users] Master-less: O que eu perco? que pode esclarecer algumas outras opções. Eu também encontrei este post intitulado: Puppet Without Masters que também discute opções para fazer o que você está procurando.

Eu também direcionaria você para este post intitulado: Gerenciamento de configuração : push vs. pull que discute as diferenças nas abordagens ao fazer o gerenciamento de configurações. O Puppet é, estritamente falando, uma solução de pull, então o que você está propondo será difícil usá-lo, já que o que você está procurando soa mais como uma solução de push de seus desktops para seus servidores.

Existem outras soluções se você realmente deseja seguir uma metodologia push, mas isso está além do escopo da sua pergunta.

    
por 14.05.2014 / 10:00
1

Vou detalhar meu comentário aqui, com a minha sugestão real.

Minha principal suposição é que você não deseja instalar o Puppet nos nós clientes por causa de seu grande número. Se você não conseguir "tocá-los" por causa de um problema de permissão, duvido que você possa forçar a configuração, seja pelo Puppet ou por qualquer outro método.

Você pode configurar ssh para fazer login em uma máquina sem uma senha usando ssh-keygen da seguinte forma:

[user@host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host
The key's randomart image is:
+--[ RSA 2048]----+
|          E++.+. |
|           -./ . |
|      .     = o  |
|       o   o     |
|        X +      |
|       . $ +     |
|          0 .    |
|        . .S     |
|       ..cb..    |
+-----------------+

Certifique-se de deixar a senha vazia (para que o script que usa este ssh não precise de senha).

Como segundo passo, você precisa copiar a chave pública para todos os hosts:

while IFS= read -r host; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub "$host"
done < hostnames_file

onde suponho que hostnames_file tenha um nome de host por linha listando todos os hosts que você deseja configurar.

Este script provavelmente pedirá sua senha quantas vezes houver hosts, mas isso acontecerá apenas uma vez quando você estiver configurando as chaves.

Se o seu user tiver seu diretório inicial compartilhado entre todos os clientes (por meio do NFS, por exemplo), você poderá fazer isso:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Agora, você deve configurar o acesso sudo sem senha para o comando apt-get (ou yum ou pacman ou o gerenciador de pacotes escolhido) para o user que você acabou de configurar sem senha ssh . Agora é tão simples quanto:

while IFS= read -r host;do
    ssh "$host" 'sudo apt-get install puppet' # also, modify puppet.conf
end < hostnames_file

Note que você pode usar este método como uma forma rudimentar de gerenciamento de configuração, bem * , mas é muito mais frágil do que usar Puppet ou Chef ou similar.

Referências

(*) Apenas substitua sudo apt-get install puppet por qualquer comando que você queira executar em todos os seus nós.

    
por 16.05.2014 / 19:24
1

O típico modelo de marionete consiste em um mestre de marionetes e os clientes de marionetes. Dito isto, é possível pular o mestre de marionetes completamente e apenas usar os clientes de marionetes por si mesmos. (Chamado de módulos de fantoches sem master).

Para fazer isso, você quebra o comando puppet apply em um script bash.

Aqui está um exemplo simples de um manifesto fantoche sem mestre que compila a última versão dos redis a partir da fonte e cria um RPM.

link

Aqui está um exemplo mais complexo que usamos na minha empresa chamada construtor. Você pode assistir a apresentação sobre isso aqui:

link

O Builder é apenas um script que qualquer desenvolvedor pode aplicar em qualquer VM que instale automaticamente um pacote de produtos por meio do fantoche. É de código fechado, mas vou tentar o meu melhor para explicar a arquitetura básica.

Ele é escrito para que, quando o desenvolvedor executar o construtor, seja solicitada a versão e a edição do software que deseja instalar.

$ sudo ./builder.sh
"Welcome to Builder"

1) Enterprise
2) Basic
3) Quit
Please select an edition: 1

"You have selected: Enterprise"

1) 7.5.0
2) 7.6.0
3) 7.7.0
4) 7.8.0
5) Quit
Please select a release: 2

"You have selected 7.6.0, applying manifests"

Uma das vantagens de envolver seu manifesto de marionete em um script bash como este, é que você pode simplesmente escrever suas próprias variáveis de facetador que podem ser usadas posteriormente. Olhando para o exemplo simples do github / spuder / fpm-redis:

Prefira as variáveis com maiúsculas 'FACTER'

cat fpm-redis
#!/bin/bash
export FACTER_REDIS_VERSION='2.8.8'
puppet apply ./manifests/init.pp

O manifesto de fantoches pode então se referir à variável minúscula (a palavra 'FACTER_' é removida automaticamente).

cat ./manifests/init.pp

class foo {
  file { "${::redis_version}":
      ensure => file,
      content => 'foo'
  }
}
include foo

Voltando ao código do construtor, ele é modularizado para que haja um diretório para cada produto que precisa ser instalado. Dessa forma, você pode definir arquivos de propriedades.

$ tree /tmp/builder
|
build
    \_ Enterprise.prop
    \_ Basic.prop
|
packages
    \_ java_7
      \_ manifests
                 \_ init.pp

    \_ java_6
      \_ manifests
                 \_ init.pp
    \_ foo
      \_ manifests
                 \_ init.pp
|
builder.sh

Os arquivos de propriedades são apenas scripts bash que contêm variáveis de ambiente e também uma lista de manifestos de puppet a serem aplicados. Às vezes, os pacotes precisam ser instalados em uma ordem específica, então eles são divididos em operações pré e pós.

$ cat Enterprise.prop

    PRE_APPLY_LIST= "build/java_6/manifests/init.pp \
                     build/foo/manifests/init.pp"
    POST_APPLY_LIST= "build/foobar/manifests/init.pp"
    export FACTER_FOO='bar'
    export FACTER_DB_PASSWORD='correct horse battery staple'

$ cat Basic.prop

    PRE_APPLY_LIST= "build/java_7"
    export FACTER_HERP='derp'

Voltando ao prompt do menu mencionado anteriormente. O Construtor gerou a lista de opções de menu, iterando sobre o diretório de construção.

$ cat /tmp/builder.sh

# prompt the user for which product
OPTIONS='ls build/*.prop'
for opt in $OPTIONS
do
  PP_APPLY=$opt
  break
done

# import the variables from the property file
source $PP_APPLY

# install the desired packages
puppet apply $PRE_APPLY_LIST
puppet apply $POST_APPLY_LIST

Esta é uma ótima maneira de aproveitar as vantagens do fantoche, sem precisar de um mestre de marionetes.

    
por 17.05.2014 / 01:47
1

Parece que você está procurando uma ferramenta Gerenciamento de Configuração (CM) ou Gerenciamento de Implantação (DM) para a qual não é necessário instalar software de agente em máquinas remotas que você deseja gerenciar.

Sem um modelo de agente, outro método deve ser usado para acessar máquinas remotas, e isso geralmente é SSH, com autenticação de chave pública ou senha.

Para este propósito, existem alguns candidatos que você pode experimentar:

Ansible

Ansible usa SSH, nenhum agente é necessário, os arquivos de configuração estão em INI format. O próprio Ansible é escrito em Python.

(R)? ex

(R)? ex usa SSH, nenhum agente é necessário, o arquivo de configuração pode ser escrito em Perl , em INI format ou usando um modelo como YAML ou Template::ToolKit . (R)? Ex em si é escrito em Perl.

Tecido

O

Fabric usa o SSH, nenhum agente é necessário, os arquivos de configuração são escritos em Python puro. O próprio tecido é escrito em Python.

Pilha de sal

O

Salt Stack é outra ferramenta incrível, você pode usar salt-ssh para implantar sem exigir um agente, embora salt-minion também seja acessível. A configuração é principalmente escrita em YAML . O próprio sal é escrito em Python.

Uma demonstração simples na minha máquina, usando (R)? ex:

$ rex -H localhost uptime
[2014-05-17 00:46:03] INFO - Running task uptime on localhost
[2014-05-17 00:46:03] INFO - Connecting to localhost:22 (cuonglm)
[2014-05-17 00:46:03] INFO - Connected to localhost, trying to authenticate.
[2014-05-17 00:46:04] INFO - Successfully authenticated on localhost.
gnouc
 00:46:04 up  2:35,  4 users,  load average: 0.68, 0.59, 0.56
[2014-05-17 00:46:04] INFO - Exiting Rex...
[2014-05-17 00:46:04] INFO - Cleaning up...

Apenas SSH

Depois de configurar o SSH, você também pode executar as mesmas funções sem essas ferramentas, usando ssh diretamente:

$ ssh localhost 'echo $HOSTNAME; uptime'
gnouc
 00:51:29 up  2:41,  4 users,  load average: 0.17, 0.33, 0.45
    
por 16.05.2014 / 19:52
0

O Puppet foi projetado para gerenciar pacotes, arquivos e serviços. (Chamado de trifeto). Se você quiser gerenciar essas coisas sem um mestre de marionetes, você pode usar um dos seguintes aplicativos.

kafo

Uma joia ruby que pega arquivos de configuração yaml e gera uma estrutura de diretórios e manifestos puppet para instalar qualquer aplicativo.

link

Foi criado pelos criadores do forman . É assim que eles geraram o instalador.

fpm

fpm é a melhor maneira de criar rapidamente os pacotes rpm e deb. Também pode criar manifestos de fantoches autônomos (sem mestre). No momento da redação deste texto, ainda é experimental.

Você não especificou exatamente que tipo de scripts está tentando executar. Se você estiver gerenciando um pacote, arquivo ou serviço, provavelmente teria boa sorte na criação de aplicativos com o kafo.

    
por 17.05.2014 / 06:15

Tags