$30 off During Our Annual Pro Sale. View Details »

Meetup Puppet-BR 20160518 - Desenvolvendo módulos e fatos Puppet

Meetup Puppet-BR 20160518 - Desenvolvendo módulos e fatos Puppet

Apresentação sobre o desenvolvimento de módulos e fatos Puppet no Meetup Puppet Brasilia 20160518

Guto Carvalho

May 26, 2016
Tweet

More Decks by Guto Carvalho

Other Decks in Technology

Transcript

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

    View Slide

  2. 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

    View Slide

  3. 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

    View Slide

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

    View Slide

  5. 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.

    View Slide

  6. 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.

    View Slide

  7. 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.

    View Slide

  8. 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?

    View Slide

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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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.

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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.

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 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.

    View Slide

  20. 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

    View Slide

  21. 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

    View Slide

  22. 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.

    View Slide

  23. 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.

    View Slide

  24. 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

    View Slide

  25. 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.

    View Slide

  26. Acompanhe os DEMOS do PCP
    Oficina e demos

    View Slide

  27. 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

    View Slide

  28. 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

    View Slide

  29. 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.

    View Slide

  30. 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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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.

    View Slide

  34. 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

    View Slide

  35. 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

    View Slide

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

    View Slide

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

    View Slide

  38. Sobre módulos
    Extras

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  43. Flato Presentation 43
    QA

    View Slide

  44. 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.

    View Slide

  45. Entre em Contato
    @gutocarvalho
    @tacianot

    View Slide

  46. Flato Presentation 46
    Obrigado

    View Slide

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

    View Slide