Quem sou eu? Daniel Sobral Mestrado em Computação Administrador de Sistemas Programador Colaborador dos projetos FreeBSD e Scala Entusiasta de Métodos Ágeis Não trabalho para Puppet Labs @dcsobral
Objetivos Explicar o que é Gestão Automática de Configuração Apresentar os benefícios Resumir alternativas Descrever o funcionamento do Puppet Ensinar a usar o Puppet
Objetivos Explicar o que é Gestão Automática de Configuração 5 minutos Apresentar os benefícios 5 minutos Resumir alternativas 5 minutos Descrever o funcionamento do Puppet 25 minutos Ensinar a usar o Puppet 55 minutos
Configuração Tudo aquilo que pode ser modificado, e modifique a funcionalidade do sistema: Arquivos de Configuração Usuários Cadastrados Serviços Rodando Pacotes Instalados etc etc Etc
Gestão Automática de Configuração Funciona mais ou menos assim: Servidor rio20prod01: Servidor de Linux de Produção com Wordpress servindo o site rio20
Meus benefícios favoritos: Padronização dos Servidores Todos servidores de um determinado tipo tem exatamente a mesma configuração relevante Agilidade para Mudar a Configuração Controle de versão Você sabe quando e o que mudou na configuração Você pode voltar a versões anteriores Você tem um backup de como o servidor deve ser Menor Tempo para se Criar Novos Servidores
Qual a diferença? CFEngine O mais antigo Rápido Consome poucos recursos Chef Configuração escrita em Ruby Muito Flexível Salt Stack Configuração via YAML (muito simples, intuitivo) ANSIBLE Acessa servidores via SSH Não requer daemons rodando nos clientes
Vantagens do Puppet Linguagem declarativa Menos “bugs” de configuração Mais configuração do que programação Configurações Idempotentes Pode-se aplicar uma configuração já aplicada em erros Completamente extensível Todos elementos primitivos do Puppet podem ser estendidos pelo usuário em Ruby Protocolos Padrões (HTTPS, certificados) Tecnologia conhecida
Modos De Funcionamento Cliente/Servidor Daemon no cliente consultando servidor periodicamente Daemon no cliente ativado a partir do servidor Processo no cliente disparado via crontab Processo no cliente disparado manualmente Stand-Alone Via crontab Manualmente
Cliente processando o catálogo Ordena Dependências entre Recursos Confere Estado de Cada Recurso • Modifica Configuração do Recurso • Notifica Outros Recursos Envia Relatório para o Puppet Master
Fatos? Informações básicas a respeito do cliente: Qual é o sistema operacional? Qual é a versão? A máquina é virtual ou física? Quantos processadores? Quanta memória? Não inclui, por exemplo: Quais pacotes estão instalados Quais usuários estão cadastrados Mas podem ser extendidos!
Catálogo? Conjunto de recursos, seus atributos e suas dependências Recurso: Um arquivo (conteúdo, permissão, dono, etc) Um serviço (se deve estar rodando ou não) Um pacote (se deve estar instalado ou não, versão) Um usuário (nome, uid, grupos, home, etc) Uma entrada na crontab (o que executar, quando) etc Pode-se criar novos recursos!
Recurso Determina o que será configurado Tipo • “user” cria, modifica e remove usuários Identificação única de um recurso Nome • Em alguns casos, provê informações adicionais • O nome de “user” é o nome do usuário sendo configurado Descrevem a configuração do recurso Atributos • “ensure” de “user” determina se o usuário deve estar presente ou não • “gid” de “user” informa o grupo primário
Meta Atributos Comuns a todos os recursos Descrevem relações entre recursos ou forma de funcionamento Exemplos: Dependência (require, before) Gatilhos (notify, subscribe) Categorização (tag) Nome alternativo (alias) Dia e Horário em que pode ser aplicado (schedule)
Elementos de Organização Contém todo o resto Site Configuração de um servidor Nó Agrupamento temático de configurações Módulo Grupo de configurações Classe Grupo de configurações parametrizado Definição Um elemento de configuração Recurso Arquivos servidos pelo puppet Arquivo Arquivos servidos pelo puppet parametrizados Template
Um exemplo prático: o nó node "rio20prod01" { include linux-server rio20def { 'rio20prod01': site => 'rio20.dom.com.br', } } Classe Definição Parâmetro da Definição
Um exemplo prático: a classe class linux-server { # Include classes common to all linux servers include localmta include ntpdate include puppet::conf include ssh::server include sudoers Outras Classes
Classes vs Definições Também é permitido às classes serem parametrizadas Capacidade relativamente recente Uma classe só pode ser inclusa uma única vez Definições podem ser inclusas múltiplas vezes, com múltiplos nomes
Proposta Não usaremos o Puppet Master Usaremos o Puppet stand-alone manual Vamos criar a configuração em etapas A cada etapa, introduzimos um recurso novo A propósito, Essa é a forma como eu crio minhas configurações.
O exercício Criar uma configuração para aplicações PHP Servindo páginas dinâmicas via Apache E páginas estáticas via Nginx Código gerado durante a Agile Brazil 2012: https://github.com/dcsobral/puppet-demo- agilebrazil2012 Exemplo de módulo com essas características: https://github.com/dcsobral/puppet-wordpress Nota: não usar em produção – versão do github não seta keys e salts (bom exercício – ver módulo de mysql para idéias)
Comandos Úteis Pega configurações no Puppet Master puppet agent Pega configurações de um arquivo puppet apply Examina ou modifica um resource puppet resource Lista resources e explica atributos puppet describe