Administrador de Sistemas Programador Colaborador dos projetos FreeBSD e Scala Entusiasta de Métodos Ágeis Não trabalho para Puppet Labs @dcsobral
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
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
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
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
é 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!
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!
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
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)
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
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
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.
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)