Slide 1

Slide 1 text

Meetup Puppet Brasil - Brasília - 18/Mai/16

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Antes de iniciar o desenvolvimento vamos entender alguns conceitos básicos Entendendo conceitos básicos

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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?

Slide 9

Slide 9 text

Vamos entender como funcionam e quais seus benefícios Estudando módulos

Slide 10

Slide 10 text

Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 10 Manifests Files Templates Lib Spec Examples Diretório do módulo /etc/puppetlabs/code/environment/production/modules/MODULE

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 15 Lib /etc/puppetlabs/code/environment/production/modules/MODULE Augeas Facter Puppet Provider Parser Type

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

Módulos Puppet Estrutura básica de diretórios Comunidade Puppet-BR 17 /etc/puppetlabs/code/environment/production/modules/MODULE Defines Fixtures Functions Hosts spec_helper.rb Spec Classes

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Módulos Puppet Estrutura básica de arquivos Comunidade Puppet-BR 21 README Rakefile Gem file .fixtures metadata.json /etc/puppetlabs/code/environment/production/modules/MODULE LICENSE Arquivos do módulo

Slide 22

Slide 22 text

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.

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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.

Slide 26

Slide 26 text

Acompanhe os DEMOS do PCP Oficina e demos

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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.

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Puppet Apply demo Comunidade Puppet-BR 36 Aplicando localmente É possível aplicar um módulo localmente utilizando o comando puppet apply

Slide 37

Slide 37 text

Puppet Agent demo Comunidade Puppet-BR 37 Aplicando do master Para aplicar um modelo a partir do servidor Master

Slide 38

Slide 38 text

Sobre módulos Extras

Slide 39

Slide 39 text

Puppet forge repositório de pacotes Comunidade Puppet-BR 39

Slide 40

Slide 40 text

Bitbucket Módulos públicos Comunidade Puppet-BR 40

Slide 41

Slide 41 text

Github Módulos públicos Comunidade Puppet-BR 41

Slide 42

Slide 42 text

GitLab Módulos públicos Comunidade Puppet-BR 42

Slide 43

Slide 43 text

Flato Presentation 43 QA

Slide 44

Slide 44 text

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.

Slide 45

Slide 45 text

Entre em Contato @gutocarvalho @tacianot

Slide 46

Slide 46 text

Flato Presentation 46 Obrigado

Slide 47

Slide 47 text

Fotos Créditos 47 Flickr/PuppetLabs/PuppetConf'2015 Instruct/PuppetConf'2015 Google Images Comunidade Puppet-BR