Trabalhando com módulos
A forma mais eficiente de utilizar o Puppet
Webinar
<%whoami%>
‣ Guto Carvalho
‣ Especialista e instrutor PuppetLabs na Instruct
‣ Blogueiro de TI há mais de 10 anos
‣ RHCSA, RCHE, LPIC3, PCP2, NCLA…
‣ 14 anos de experiência como sysadmin linux
‣ Trabalha com Puppet desde 2010
‣ Implantou Puppet em diversas entidades de governo, dentre eles
‣ EBC, CAIXA, DETRAN/DF e ANATEL
Agenda
‣ Introdução a módulos
‣ Por que usar módulos?
‣ Estrutura de um módulo
‣ Módulos oficiais Puppetlabs
‣ Repositórios públicos de módulos
‣ Demonstração de uso de módulos
‣ Perguntas
O problema
Imagine que você está automatizando um serviço
ou sistema no puppet, imagine que isto envolva
diversos arquivos estáticos, templates, classes e
definições.
Como você vai manter a organização, coesão e
integridade de seu ambiente com diversos arquivos
espalhados em diferentes diretórios?
A solução
Para manter o ambiente organizado e
coeso, talvez seja melhor agrupar todas
estas configurações em um único local,
certo?
Ao agrupar suas configurações
você estará dando os primeiros
passos para criar um módulo.
E por que devemos
utilizar módulos no
Puppet?
Entendendo o Módulo
Um módulo é um conjunto de configurações e
dados, agrupados, independentes, reutilizáveis,
contidos em um mesmo diretório, o Puppet pode
c a r r e g a r e u t i l i z a r v á r i o s m ó d u l o s
simultaneamente e você pode reaproveitar
código.
Módulos são carregados de forma
automática e dinâmica pelo
puppet e podem ser utilizados
em modo master ou masterless.
Módulos são portáveis, você pode
carregar um módulo em um flashdrive e
aplicá-lo em um servidor utilizando
apenas o comando puppet apply, sem a
necessidade de um puppet master.
Sobre módulos
• Módulos podem ficar no diretório /etc/puppet/
modules em versões do puppet =< 3.5.
• A partir do puppet 3.6 os módulos devem ficar
dentro de seu environment, exemplo, caso você
esteja trabalhando com enviroment production o
diretório será /etc/puppet/environment/
production/modules.
Layout de um módulo
‣ Módulo
‣ manifests - contém manifests do módulo
‣ init.pp - arquivo principal do módulo
‣ templates - arquivo dinâmicos
‣ lib - contém plugins
‣ test - contém os smoke tests
‣ files - arquivos estáticos
‣ spec - contém os spec tests
Manifests & Classes
O init.pp é o arquivo principal e ele deve conter uma
única classe com o nome do módulo, se o módulo se
chama ssh, o init.pp deve conter uma classe chamada ssh.
Cada manifest deve conter apenas uma classe. Caso você
crie um manifest chamado client.pp no módulo ssh, ele
deverá ter uma classe única chamada ssh::client.
Caso você crie um sub-diretório, a classe deverá conter o
nome do sub-diretório e da casse, exemplo
ssh::subdir::classe.
Nome de classes
‣ ssh
‣ manifests
‣ init.pp terá uma classe chamada ssh
‣ client.pp terá um classe chamada ssh::client
‣ server.pp terá uma classe chamada ssh::server
‣ keys
‣ admins.pp terá um a classe chamada ssh::keys::admins
# puppet module generate name-modulo
Respeitar a estrutura e a nomenclatura
das classes e definições é importante
para que o módulo seja carregado
dinamicamente pelo auto-loader.
Módulos Puppetlabs
A PuppetLabs disponibiliza uma plataforma
chamada PuppetForge para compartilhamento de
módulos. Além de disponibilizar a plataforma, ela
também publica vários módulos bastante maduros
para automatizar diversos sistemas e serviços.
Acesse http://forge.puppetlabs.com
Outros módulos
É possível encontrar módulos para puppet em sites
como github e bitbucket, procure por projetos que
comecem com puppet-nome, exemplo puppet-ssh.
http://www.github.com
http://www.bitbucket.com
Demo
Utilizando vagrant & puppet para criar módulos
Dicas finais
‣ Escreva módulos e reutilize código sempre
‣ Utilize módulos do forge e github, não reinvente a roda
‣ Escreva módulos compatíveis com o auto-loader
‣ Versione seus módulos com GIT sempre
‣ Escreva testes para suas classes
‣ Siga as recomendações do style-guide
‣ Compartilhe seu módulo no forge e github
Precisa de ajuda com seus módulos?
Comunidade Puppet
‣ Documentação oficial docs.puppetlabs.com
‣ Canal #puppet e #puppet-br na freenode
‣ Comunidade puppet-br.org
‣ Listas puppet-users e puppet-users-br no googlegroups.
‣ Blog gutocarvalho.net e planeta.puppet-br.org
Precisa de mais ajuda, algo além
d a c o m u n i d a d e ? S u p o r t e
avançado?
Suporte oficial no Brasil com a Instruct
‣ Consultoria, suporte e capacitação em Puppet Enterprise e
Puppet Open Source
‣ Treinamentos Oficiais da PuppetLabs
‣ Licenciamento do Puppet Enterprise
‣ Equipe composta por pioneiros no uso de Puppet no Brasil
‣ A Instruct juntamente a com PuppetLabs podem te ajudar a
obter a tão sonhada Infraestrutura Ágil.
Próximos webinars
‣ Novos treinamentos PuppetLabs
‣ Orquestração com Live Management/MCollective
‣ Separação de dados e código com Hiera
‣ Integração do Puppet com PuppetDB
‣ Integração do Puppet com Vagrant
‣ Entre em contato!
‣ contato@instruct.com.br
‣ (19) 2511-6506
Obrigado!
Perguntas?
Entre em contato
‣ Fale com a gente nas redes sociais!
‣ facebook.com/InstructBR
‣ twitter.com/InstructBR
‣ Canal #puppet-br na Freenode
‣ https://webchat.freenode.net/
‣ Miguelzinho e Gutocarvalho
‣ Email: webinar@instruct.com.br

Trabalhando com Módulos no Puppet

  • 1.
    
 Trabalhando com módulos Aforma mais eficiente de utilizar o Puppet Webinar
  • 2.
    <%whoami%> ‣ Guto Carvalho ‣Especialista e instrutor PuppetLabs na Instruct ‣ Blogueiro de TI há mais de 10 anos ‣ RHCSA, RCHE, LPIC3, PCP2, NCLA… ‣ 14 anos de experiência como sysadmin linux ‣ Trabalha com Puppet desde 2010 ‣ Implantou Puppet em diversas entidades de governo, dentre eles ‣ EBC, CAIXA, DETRAN/DF e ANATEL
  • 3.
    Agenda ‣ Introdução amódulos ‣ Por que usar módulos? ‣ Estrutura de um módulo ‣ Módulos oficiais Puppetlabs ‣ Repositórios públicos de módulos ‣ Demonstração de uso de módulos ‣ Perguntas
  • 4.
    O problema Imagine quevocê está automatizando um serviço ou sistema no puppet, imagine que isto envolva diversos arquivos estáticos, templates, classes e definições. Como você vai manter a organização, coesão e integridade de seu ambiente com diversos arquivos espalhados em diferentes diretórios?
  • 5.
    A solução Para mantero ambiente organizado e coeso, talvez seja melhor agrupar todas estas configurações em um único local, certo?
  • 6.
    Ao agrupar suasconfigurações você estará dando os primeiros passos para criar um módulo.
  • 7.
    E por quedevemos utilizar módulos no Puppet?
  • 8.
    Entendendo o Módulo Ummódulo é um conjunto de configurações e dados, agrupados, independentes, reutilizáveis, contidos em um mesmo diretório, o Puppet pode c a r r e g a r e u t i l i z a r v á r i o s m ó d u l o s simultaneamente e você pode reaproveitar código.
  • 9.
    Módulos são carregadosde forma automática e dinâmica pelo puppet e podem ser utilizados em modo master ou masterless.
  • 10.
    Módulos são portáveis,você pode carregar um módulo em um flashdrive e aplicá-lo em um servidor utilizando apenas o comando puppet apply, sem a necessidade de um puppet master.
  • 11.
    Sobre módulos • Módulospodem ficar no diretório /etc/puppet/ modules em versões do puppet =< 3.5. • A partir do puppet 3.6 os módulos devem ficar dentro de seu environment, exemplo, caso você esteja trabalhando com enviroment production o diretório será /etc/puppet/environment/ production/modules.
  • 12.
    Layout de ummódulo ‣ Módulo ‣ manifests - contém manifests do módulo ‣ init.pp - arquivo principal do módulo ‣ templates - arquivo dinâmicos ‣ lib - contém plugins ‣ test - contém os smoke tests ‣ files - arquivos estáticos ‣ spec - contém os spec tests
  • 13.
    Manifests & Classes Oinit.pp é o arquivo principal e ele deve conter uma única classe com o nome do módulo, se o módulo se chama ssh, o init.pp deve conter uma classe chamada ssh. Cada manifest deve conter apenas uma classe. Caso você crie um manifest chamado client.pp no módulo ssh, ele deverá ter uma classe única chamada ssh::client. Caso você crie um sub-diretório, a classe deverá conter o nome do sub-diretório e da casse, exemplo ssh::subdir::classe.
  • 14.
    Nome de classes ‣ssh ‣ manifests ‣ init.pp terá uma classe chamada ssh ‣ client.pp terá um classe chamada ssh::client ‣ server.pp terá uma classe chamada ssh::server ‣ keys ‣ admins.pp terá um a classe chamada ssh::keys::admins
  • 15.
    # puppet modulegenerate name-modulo
  • 16.
    Respeitar a estruturae a nomenclatura das classes e definições é importante para que o módulo seja carregado dinamicamente pelo auto-loader.
  • 17.
    Módulos Puppetlabs A PuppetLabsdisponibiliza uma plataforma chamada PuppetForge para compartilhamento de módulos. Além de disponibilizar a plataforma, ela também publica vários módulos bastante maduros para automatizar diversos sistemas e serviços. Acesse http://forge.puppetlabs.com
  • 18.
    Outros módulos É possívelencontrar módulos para puppet em sites como github e bitbucket, procure por projetos que comecem com puppet-nome, exemplo puppet-ssh. http://www.github.com http://www.bitbucket.com
  • 19.
    Demo Utilizando vagrant &puppet para criar módulos
  • 20.
    Dicas finais ‣ Escrevamódulos e reutilize código sempre ‣ Utilize módulos do forge e github, não reinvente a roda ‣ Escreva módulos compatíveis com o auto-loader ‣ Versione seus módulos com GIT sempre ‣ Escreva testes para suas classes ‣ Siga as recomendações do style-guide ‣ Compartilhe seu módulo no forge e github
  • 21.
    Precisa de ajudacom seus módulos?
  • 22.
    Comunidade Puppet ‣ Documentaçãooficial docs.puppetlabs.com ‣ Canal #puppet e #puppet-br na freenode ‣ Comunidade puppet-br.org ‣ Listas puppet-users e puppet-users-br no googlegroups. ‣ Blog gutocarvalho.net e planeta.puppet-br.org
  • 23.
    Precisa de maisajuda, algo além d a c o m u n i d a d e ? S u p o r t e avançado?
  • 24.
    Suporte oficial noBrasil com a Instruct ‣ Consultoria, suporte e capacitação em Puppet Enterprise e Puppet Open Source ‣ Treinamentos Oficiais da PuppetLabs ‣ Licenciamento do Puppet Enterprise ‣ Equipe composta por pioneiros no uso de Puppet no Brasil ‣ A Instruct juntamente a com PuppetLabs podem te ajudar a obter a tão sonhada Infraestrutura Ágil.
  • 25.
    Próximos webinars ‣ Novostreinamentos PuppetLabs ‣ Orquestração com Live Management/MCollective ‣ Separação de dados e código com Hiera ‣ Integração do Puppet com PuppetDB ‣ Integração do Puppet com Vagrant ‣ Entre em contato! ‣ contato@instruct.com.br ‣ (19) 2511-6506
  • 26.
  • 27.
  • 28.
    Entre em contato ‣Fale com a gente nas redes sociais! ‣ facebook.com/InstructBR ‣ twitter.com/InstructBR ‣ Canal #puppet-br na Freenode ‣ https://webchat.freenode.net/ ‣ Miguelzinho e Gutocarvalho ‣ Email: webinar@instruct.com.br