2 Comunidade Puppet-BR Neste oficina seguiremos todas as recomendações de codificação e guia de estilos da Puppet. Aprenda a desenvolver módulos e fatos MÓDULOS E FATOS D E S E N V O L V I M E N T O P U P P E T
3 Flato Presentation Conceitos Módulos Extras Contato Demos Conteúdo Nesta apresentação vamos falar sobre desenvolvimento de módulos e fatos Comunidade Puppet-BR Rafael Sales Guto Carvalho
O que são manifests Princípios básicos Comunidade Puppet-BR 5 Manifests são arquivos que possuem a representação dos estados desejados O Puppet possui uma DSL que permite que que o profissional de automação possa expressar as necessidades de automatização do ponto de vista do negócio. A partir dos manifests, o servidor master gera um catálogo de configurações. O agente recebe o catálogo e aplica as mudanças em seu node. Os manifests são arquivos texto com extensão .pp.
O que são classes Princípios básicos Comunidade Puppet-BR 6 Classes são conjuntos de configurações chamados resource types que juntos definem uma configuração Quando formos escrever código Puppet, este código deve sempre estar contido em uma classe, isto é importante pois classes podem ser reutilizadas pelos nodes gerenciados.
O que são módulos Princípios básicos Comunidade Puppet-BR 7 Módulos são conjuntos de configurações definidas e autocontidas em um diretório Um módulo pode conter manifests, arquivos estáticos, plugins, templates, testes e dados. Tudo está dentro de um mesmo diretório o que facilita o compartilhamento, desenvolvimento e utilização.
Objetivos de um módulo Princípios básicos Comunidade Puppet-BR 8 Qual tarefa você deseja que seu módulo realize? Como você quer resolver isso com seu módulo? Quais sistemas operacionais ou versões de sistemas operacionais você deseja suportar?
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 11 Manifests /etc/puppetlabs/code/environment/production/modules/MODULE O diretório manifests é a referência para o puppet buscar as classes do módulo, o arquivo init.pp contém a classe principal do módulo init.pp
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 12 /etc/puppetlabs/code/environment/production/modules/MODULE O diretório files contém arquivos estáticos, imutáveis. E s t e s a r q u i v o s e s t ã o disponíveis no servidor de arquivos do puppetserver para serem utilizados pelos agentes. Os agentes fazem download destes arquivos para aplicar em seus nodes de acordo com definições do módulo. Files
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 13 Templates /etc/puppetlabs/code/environment/production/modules/MODULE O diretório templates contém arquivos dinâmicos que podem estar no formato EPP ou ERB, estes arquivos podem conter variáveis, fatos e tratamentos condicionais e quando aplicados a um node terão configurações específicas.
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 14 Lib /etc/puppetlabs/code/environment/production/modules/MODULE O diretório lib pode conter custom lens do augeas, custom facts, custom functions, custom providers e custom types. Tudo que
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 16 Spec /etc/puppetlabs/code/environment/production/modules/MODULE O diretório spec contém diversos tipos de testes que podem ser criados para seu módulo, estes testes podem ser unitários, de aceitação, de sintaxe e podem ser executados contra classes, definições, funções e hosts.
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 18 Examples /etc/puppetlabs/code/environment/production/modules/MODULE O d i r e t ó r i o e x a m p l e s , antigamente chamado de “tests” contém exemplos de declaração das classes do diretório manifests. init.pp
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 19 facts.d /etc/puppetlabs/code/environment/production/modules/MODULE Este diretório é opcional e pode conter external facts, estes fatos são alternativas aos fatos em ruby, estes podem ser escritos em qualquer linguagem de programação que seja suportada pelo node. Funciona a partir do facter 2.0.
Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 20 serverspec /etc/puppetlabs/code/environment/production/modules/MODULE Este diretório é opcional e pode conter testes de aceitação serverspec
Módulos Puppet Estrutura básica de arquivos Comunidade Puppet-BR 22 README /etc/puppetlabs/code/environment/production/modules/MODULE LICENSE Quando criamos o módulo as informações referentes a seu funcionamento, uso, autores, requisitos e exemplos vão no README e a licença do módulo no arquivo LICENSE. Isso é uma boa prática que ajuda quem for u s a r s e u m ó d u l o c a s o compartilhe.
Módulos Puppet Estrutura básica de arquivos Comunidade Puppet-BR 23 Rakefile Gem file /etc/puppetlabs/code/environment/production/modules/MODULE O arquivo Rakefile conterá informações relativas aos testes de código e o arquivo G e m fi l e c o n t e r á a s dependências gem que são usadas pelos testes.
Módulos Puppet Estrutura básica de arquivos Comunidade Puppet-BR 24 .fixtures /etc/puppetlabs/code/environment/production/modules/MODULE O arquivo .fixtures é utilizado pelas ferramentas de teste de código, nele serão definidas as dependências para os testes
Módulos Puppet Estrutura básica de arquivos Comunidade Puppet-BR 25 metadata.json /etc/puppetlabs/code/environment/production/modules/MODULE Este arquivo contém todas as informações do módulo tais como nome, versão, autor, licença, dependências, os suportados, versão do puppet suportada, url do projeto e muito mais. Esse arquivo é fundamental pro puppet forge.
Criando um módulo demo Comunidade Puppet-BR 27 De forma automática ou manual Você pode criar um módulo de forma automática com o comando puppet module generate ou de forma manual
Versionando o módulo (Git) demo Comunidade Puppet-BR 28 Versionando o código Todo o código deve ser verminado através de uma ferramenta VCS para que tenhamos controle, rastreabilidade e segurança no processo de desenvolvimento
Criando classes do módulo demo Comunidade Puppet-BR 29 Separação de classes Devemos pensar em quais necessidades o módulo vai resolver para separar suas classes com objetivos únicos e diretos.
Criando classes do módulo demo Comunidade Puppet-BR 30 Nomenclatura de classes É necessário seguir as regras de nomenclatura de classes para que o puppet master consiga carregar as classes do módulo automaticamente
Paths do Puppet demo Comunidade Puppet-BR 31 Localização O módulo deve ser armazenado dentro de um diretório em que o puppet master consiga encontrá-lo ou deve-se passar o parâmetro modulepath para indicar o diretório
Criando arquivos estáticos demo Comunidade Puppet-BR 32 Arquivos estáticos Seu módulo pode ter arquivos estáticos, este ficam armazenados no diretório files
Criando arquivos dinâmicos demo Comunidade Puppet-BR 33 Arquivos dinâmicos Seu módulo pode ter arquivos dinâmicos, este ficam armazenados no diretório templates, estes podem ser templates ERB ou EPP.
Criando fatos demo Comunidade Puppet-BR 34 Custom Facts Seu módulo pode ter fatos customizados que vão atender necessidades de suas classes ou templates
Criando fatos demo Comunidade Puppet-BR 35 External Facts Os custom facts devem ser escritos em Ruby puro, mas podemos criar fatos externos em qualquer outra linguagem, estes fatos devem ser armazenados no diretório facts.d
Participe da comunidade Venha aprender puppet com a gente Comunidade Puppet-BR 44 IRC Site & Planeta Telegram Lista Acesse o canal #puppet-br na rede freenode de IRC com seu cliente preferido Acesse o site puppet-br.org e o planeta.puppet-br.org Entre no grupo telegra.me/puppetbr no telegram. Participe das listas no google groups puppet- users-br e mcollective- users-br.