Como copiar arquivos para todas as máquinas usando o mestre de marionetes?

12

Instalei o puppetmaster no Ubuntu 11.04 e instalei o fantoche em todos os meus clientes. Eu juntei todos os meus clientes de marionetes com o mestre de marionetes. É possível copiar um arquivo para todos esses clientes de marionetes do mestre de marionetes?

Por exemplo:

Eu tenho o arquivo chamado datas.xls na minha área de trabalho (Puppet Master). Como copio esses arquivos para todos os meus clientes fantoches no seguinte local (/ home / operator1 / Desktop / Backup /)?

Atualização:

  • Oi ainda o arquivo não está sendo compartilhado.
  • Como modificar esta linha puppet:///modules/module_name/datas.xls o arquivo a ser copiado está sob este local /etc/puppet/modules/mymodule/manifests/datas.xls ?

Erro no cliente: (resolvido)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

Erro 2 no cliente:

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

Nova atualização:

Como aplicar este módulo a todos os nós? Tal que o arquivo será copiado para todos os nós.

    
por karthick87 23.12.2011 / 16:22

1 resposta

24

O Puppet é um monstro para você entender, então aprender pelo exemplo não é ruim. No abaixo, eu estou supondo que você está usando módulos - por favor, diga em um comentário, se você não é ou se você precisar de mais detalhes sobre como montar o módulo.

Digamos que você inicie um novo módulo chamado mymodule . No diretório inicial do boneco (geralmente /etc/puppet ) no mestre de bonecos você deve criar o diretório de manifestos e arquivos do módulo:

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

Em seguida, crie um arquivo nesse diretório chamado init.pp e insira:

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

Em seguida, coloque o arquivo datas.xls no diretório files do módulo - neste exemplo, em modules/mymodule/files/ . (Observe que também pode haver um diretório templates para os modelos ).

No arquivo manifests/site.pp , você precisa importar o módulo e incluir a classe fazendo algo como:

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

Certifique-se de que todos os seus nós sejam herdados da base e que isso seja tudo o que você precisa fazer. A partir do Puppet 0.25 você pode usar expressões regulares no nome do nó, por exemplo:

node server[0-9] inherits base {}

Deixe-me saber nos comentários se você precisar de mais esclarecimentos.

Configurando um cliente para falar com o mestre de marionetes

No cliente, você precisa fazer:

sudo apt-get install puppet

Em seguida, edite /etc/default/puppet e altere START=no para START=yes .

Edite também /etc/puppet/puppet.conf e adicione uma linha à seção [main] para informar onde encontrar o mestre de marionetes:

server=puppet.mydomain.com

Então podemos fazer um teste com sudo puppetd --test . Se você receber erros de chave, talvez seja necessário ir para o servidor mestre de marionetes e assinar a chave do cliente. Para verificar o nome exato, você pode fazer sudo puppetca --list e, em seguida, sudo puppetca --sign server1.mydomain.com (ou qualquer que seja o nome do servidor no comando de lista).

Agora inicie o serviço de marionetes com sudo service puppet start e você deve estar ausente. O serviço de marionetes será executado a cada hora, portanto, se você atualizar suas receitas de fantoches, todos os seus clientes também serão atualizados.

Excluindo arquivos

Eu observei na pergunta original que você queria saber como excluir arquivos. Você editaria o manifests/init.pp para ser

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

Outras dicas úteis

Se você está tendo problemas, há algumas coisas que você pode fazer. Em qualquer máquina com fantoche instalado, você pode verificar sua sintaxe executando

puppet --parseonly --ignoreimport myfile.pp

ou verifique todo o lote retirando o sinal --ignoreimport , embora isso possa levar a algumas mensagens de erro engraçadas que não são realmente erros que encontrei. Você também pode executar fantoches ao vivo em uma máquina cliente de fantoche fazendo:

sudo puppetd --test

que mostra vários resultados úteis, com erros e avisos destacados em cores diferentes. Se você quiser mais detalhes, pode executar:

sudo puppetd --test --debug

mas, geralmente, gera uma quantidade tão grande de resultados que é difícil percorrer, por isso só faça isso se já tiver tentado as etapas anteriores e estiver preso e precisar ver tudo sendo feito.

Note que isto é baseado no fantoche 0.25.x que é o que eu uso no trabalho atualmente, e também é a versão no Ubuntu 10.04. O código fantoche na seção principal definitivamente ainda funcionará, mas as versões posteriores do fantoche têm novos sinalizadores que podem ajudar na depuração do resultado.

    
por Hamish Downer 26.12.2011 / 15:03

Tags