quarta-feira, 27 de maio de 2015

Puppet - Exportando site.pp para CouchDB



   Quando estamos no caminho da automação de processos e garantia de estado uma das ferramentas poderosas e nossa aliada é o Puppet. 

   Quanto mais se conhece de Puppet, mais quer integrá-lo ao CouchDB para que o mesmo responda de forma inteligente consultas no formato JSON via Hiera. 

   O que essa publicação de propõe é a facilitar, apoiando-o na migração do site.pp dos seus ambientes, hoje com todas informações de classes, includes e tasks carregadas dos agents no site.pp e que serão exportadas para o CouchDB. 

   Segue abaixo a explicação de uso de um programa que criei para automatizar o processo de exportação. Ele já faz a análise se o agent existe no CouchDB, caso exista o mesmo ignora, do contrário, exporta para a base. 

   Repositório GIT do programa: https://github.com/helkmut/couchdb-populate

   Exemplo de execução: 

[root@Teste-CouchDB rb-couchdb-populate]# ./bin/rb-couchdb-populate.rb
| Starting agent Current Time : 2015-02-04 23:41:22 -0200 |
| Test database connection > configuration |
| Connection PASS |
| Directory /etc/puppet exist |
| Parse file /etc/puppet/environments/prd/manifests/site.pp |
| Import node 1.teste.com.br to CouchDB |
| Import node 2.teste.com.br to CouchDB |
| Import node 3.teste.com.br to CouchDB |
| Import node 4.teste.com.br to CouchDB |
| Import node 5.teste.com.br to CouchDB |
| Import node 6.teste.com.br to CouchDB |
| Import node 7.teste.com.br to CouchDB |
| Import node 8.teste.com.br to CouchDB |
| Import node 9.teste.com.br to CouchDB |
| Import node 10.teste.com.br to CouchDB |
| Import node 11.teste.com.br to CouchDB |
| Import node 12.teste.com.br to CouchDB |
| Import node 13.teste.com.br to CouchDB |
| Import node 14.teste.com.br to CouchDB |
| Import node 15.teste.com.br to CouchDB |
| Import node 16.teste.com.br to CouchDB |
| Import node 17.teste.com.br to CouchDB |
| Import node 18.teste.com.br to CouchDB |
| Import node 19.teste.com.br to CouchDB |
| Import node 20.teste.com.br to CouchDB |
| Parse file /etc/puppet/environments/dev/manifests/site.pp |
| Node 21.teste.com.br already exists in CouchDB |
| Import node 22.teste.com.br to CouchDB |
| Import node 23.teste.com.br to CouchDB |
| Import node 24.teste.com.br to CouchDB |
| Node 25.teste.com.br already exists in CouchDB |
| Node 26.teste.com.br already exists in CouchDB |
| Import node 27.teste.com.br to CouchDB |
| Node vagrant-teste.local already exists in CouchDB |
| Parse file /etc/puppet/environments/hlg/manifests/site.pp |
| Import node 28.teste.com.br to CouchDB |
| Import node 29.teste.com.br to CouchDB |
| Import node 30.teste.com.br to CouchDB |
| Node 31.teste.com.br already exists in CouchDB |
| Import node 32.teste.com.br to CouchDB |
| Import node 33.teste.com.br to CouchDB |
| Import node 34.teste.com.br to CouchDB |
| OK - Program end with success |

   O que o programa não contempla: 

1 - se o Document existir ele não atualiza os fields;
2 - ainda não está fazendo parse das 'tasks', mas faz de chamadas 'includes' e 'classes'.  

   Sugiro testar em um laboratório com uma Vagrant de CounchDB, hiera e Puppet Master. Naturamente que isto não se aplica a versão Enterprise do Puppet, que já não faz o gerenciamento dos agents por site.pp.