Palestra Puppet Hora Livre
Upcoming SlideShare
Loading in...5
×
 

Palestra Puppet Hora Livre

on

  • 1,396 views

Palestra ministrada em Campo Grande/MS no dia 12/12/12 na UNAES.

Palestra ministrada em Campo Grande/MS no dia 12/12/12 na UNAES.

Statistics

Views

Total Views
1,396
Views on SlideShare
1,396
Embed Views
0

Actions

Likes
2
Downloads
39
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Palestra Puppet Hora Livre Palestra Puppet Hora Livre Presentation Transcript

  • Gestão e Automação de Servidores com Puppet Guto Carvalho < gutocarvalho@gmail.com > Campo Grande/MS - 2012/12/12 - Hora LivreWednesday, December 12, 12
  • Hora Livre - Ano 4Wednesday, December 12, 12
  • Wednesday, December 12, 12
  • whoami Consultor/SysAdmin (LPIC-3) na 4Linux 12 anos de experiência com tecnologias FOSS Blogueiro FOSS há 6 anos no site gutocarvalho.net Atuação em vários projetos de Governo no MDA, MINC, EBC/RADIOBRÁS, MPS/DATAPREV, ITI/ PR, CEF, MD/SIPAM, DETRAN/DF, CAIXA Há 2 anos trabalhando com gerência de configurações em ambientes virtualizados e clouds privadas em Brasília Palestrante em eventos como FISL, LATINOWARE, CONSEGI, ENECOMP, FLISOL e CLOUDCONFWednesday, December 12, 12
  • Plano de Trabalho 05 minutos de apresentação 50 minutos de palestra 10 minutos para perguntasWednesday, December 12, 12
  • Agenda Administração de servidores e serviços Causas, efeitos e consequências da administração artesanal Um novo caminho com a gerência de configurações Puppet como solução de gerência de configurações Apresentando características e recursos do Puppet Benefícios, resultados concretos e Puppet no BrasilWednesday, December 12, 12
  • Já ouviu falar do sysadmin?Wednesday, December 12, 12
  • O que faz um sysadmin? Administra servidores e serviços e a infraestrutura de rede Oferece suporte aos desenvolvedores e usuários Sustenta ambiente de desenvolvimento, testes, homol e produção e faz deploy de aplicações Sustenta sistemas estruturantes (DHCP, DNS, PROXY, LDAP, MAIL, IM) Cuida dos ambientes de banco de dados Sustenta, monitora e trabalha para que aplicações e ambientes funcionem Cuida do Backup, lava, passa e faz cafézinho...Wednesday, December 12, 12
  • Multi-tarefasWednesday, December 12, 12
  • Multi-disciplinarWednesday, December 12, 12
  • SysAdminsWednesday, December 12, 12
  • Visão do Sysadmin Em relação a infraestrutura que ele tem que administraWednesday, December 12, 12
  • Visão do Sysadmin Em relação ao seu dia-a-dia de trabalho e tratamento de demandasWednesday, December 12, 12
  • Realidade do SysadminWednesday, December 12, 12
  • Ferramentas e métodos não tão modernos e nem tão atraentesWednesday, December 12, 12
  • Desafios do Sysadmin em 2012Wednesday, December 12, 12
  • Administração de Servidores e ServiçosWednesday, December 12, 12
  • Virtualização - TendênciaWednesday, December 12, 12
  • Virt. e seus Benefícios Menor consumo de energia Melhor aproveitamento de espaço físico Melhor aproveitamento de hardware (sem hw ocioso) Maior segurança com isolamento de ambientes Pode-se trabalhar disponibilidade e balanceamento Facilidade de provisionamento e gerenciamentoWednesday, December 12, 12
  • Cloud Computing - TendênciaWednesday, December 12, 12
  • Cloud e seus Benefícios Hiper escalável Rápida e elástica Abstração de hardware Infraestrutura dinâmica Alta disponibilidade Investimento atraente para projetos emergentesWednesday, December 12, 12
  • O crescimento do seu parque é inevitável Poucas máquinas físicas podem ser tornar dezenas, centenas ou milhares de nodes em poucos meses.Wednesday, December 12, 12
  • Como Administrar 500 VM’s?Wednesday, December 12, 12
  • Ambiente híbrido e complexo Servidores Linux Debian 5.0 e 6.0 em 32 e 64 bits Servidores Linux Centos 5 e Centos 6 em 32 e 64 bits Servidores RHEL 4, 5 e 6 em 64 bits FreeBSD, OpenBSD e OSX Servidores Windows 2003 e 2008Wednesday, December 12, 12
  • Configuração artesanal?Wednesday, December 12, 12
  • Vale a pena insistir?Wednesday, December 12, 12
  • Administação Host a Host?Wednesday, December 12, 12
  • Acesso Secure Shell (ssh) em loop?Wednesday, December 12, 12
  • Shellscript?Wednesday, December 12, 12
  • Será que o modelo artesanal escala?Wednesday, December 12, 12
  • Quantos SysAdmins são necessários para administrar 500 servidores?Wednesday, December 12, 12
  • Qual a velocidade nas mudanças em seu ambiente?Wednesday, December 12, 12
  • Qual a probabilidade de falhas decorrentes de mudanças manuais?Wednesday, December 12, 12
  • Você consegue manter todo o seu ambiente padronizado?Wednesday, December 12, 12
  • Trabalhar fora de expediente para dar conta das demandas se tornou regra ao invés de exceção?Wednesday, December 12, 12
  • Seu custo com equipes técnicas está aumentando devido aos trabalho fora de expediente?Wednesday, December 12, 12
  • Você começa a ter a sensação de estar sendo engolido por seu ambiente?Wednesday, December 12, 12
  • Está difícil colocar suas configurações nos trilhos?Wednesday, December 12, 12
  • Administração artesanal não escala, não importa quantas pessoas estejam envolvidas No entanto, é possível enxergar as causas, efeitos e consequências geradas por um modelo equivocado de administraçãoWednesday, December 12, 12
  • Você vai começar a perceber que Fica mais difícil encontrar problemas em seu parque Não é mais tão simples manter as coisas funcionando É quase impossível manter o parque padronizado Sua produtividade diminui a medida que o ambiente cresce Você não consegue mais documentar e planejar mudançasWednesday, December 12, 12
  • Você vai começar a perceber que Você não consegue mais entregar demandas no tempo acordado Sua equipe está sempre exausta e desmotivada Sua equipe não tem mais direito a finais de semana, feriados Você não tem tempo para pensar em segurança e performance Uma simples atualização de software pode levar semanasWednesday, December 12, 12
  • Tarefas repetitivasWednesday, December 12, 12
  • A maioria das demandas de um sysdmin envolve execução de tarefas repetitivasWednesday, December 12, 12
  • Wednesday, December 12, 12
  • Tarefas repetitivas Criação de usuários Elaboração de scripts Configuração de serviços Configurações de monitoramento Criação de imagens de ambientes Configuração do sistema operacional Instalação, atualização e remoção de pacotesWednesday, December 12, 12
  • Remover Nagios e Instalar Zabbix em 500 máquinasWednesday, December 12, 12
  • Instalação de Zabbix-Agent Acessar o servidor por ssh e se tornar root Configurar repositório YUM, APT ou Ports Instalar pacote zabbix-agent Remover pacote nagios Ajustar arquivo de configuração Zabbix Reiniciar Zabbix AgentWednesday, December 12, 12
  • Instalação de Zabbix-Agent 10 minutos por máquina 5000 minutos ou 83.3 horas de trabalho repetitivo 10 dias para instalar o zabbix-agent no parque 1 analista alocado exclusivamente para isto 8HPD Considere re-trabalho devido ao modelo manualWednesday, December 12, 12
  • Criar o usuário do novo sysadmin em 500 máquinasWednesday, December 12, 12
  • Criação de usuário para sysadmin Acessar o servidor por ssh Se tornar root Criar usuário Setar senha temporária Configurar privilégios no sudoWednesday, December 12, 12
  • Instalação de Zabbix-Agent 7 minutos por máquina 3500 minutos ou 58.3 horas de trabalho repetitivo 7 dias para criar o usuário no parque 1 analista alocado exclusivamente para isto 8HPD Considere re-trabalho devido ao modelo manual Considere que o usuário vai ter que trocar a senha nas 500 máquinasWednesday, December 12, 12
  • Mas eu não posso usar LDAP para autenticar meus usuários, não seria melhor?Wednesday, December 12, 12
  • Autenticação LDAP em Debian Você precisa manter as configurações do PAM e módulo LDAP Arquivos a serem mantidos ldap.conf, nsswitch.conf, libnss-ldap.conf Pacotes a serem mantidos ldap-utils, libpam-ldap, libnss-ldap e nscd Você ainda precisa ter um usuário coringa em caso de problema no LDAPWednesday, December 12, 12
  • Como alterar vários arquivos de configuração em 500 máquinas em um caso de mudança na estrutura da árvore LDAP?Wednesday, December 12, 12
  • Remover usuários antigos é tão complicado quanto criar novosWednesday, December 12, 12
  • Rastreamento de mudanças e falta de padrõesWednesday, December 12, 12
  • Se você pedir para dois sysadmins instalarem um servidor você terá dois ambientes diferentesWednesday, December 12, 12
  • Falta de padronizaçãoWednesday, December 12, 12
  • O que devemos padronizar? DNS (resolv.conf) Hosts e Hostnames Usuários e Privilégios Repositórios NTP (data/hora) Logs e Autenticação Pacotes Sysadmins Firewall Rotas Hardening, TuningWednesday, December 12, 12
  • Falta de processos e procedimentos de execução de atividades e demandasWednesday, December 12, 12
  • Desvantagens do modelo ArtesanalWednesday, December 12, 12
  • Desvantagens do modelo artesanal Falta de padronização, processos e procedimentos Documentação inexpressiva ou inexistente Falta de planejamento para execução das demandas Desconhecimento dos riscos envolvidos Alto índice de falhas humanasWednesday, December 12, 12
  • Desvantagens do modelo artesanal Baixo índice de disponibilidade dos serviços oferecidos Demora na aplicação de mudanças Demora na correção de problemas Equipe desmotivada Atividades repetitivas e desgastantesWednesday, December 12, 12
  • Desvantagens do modelo artesanal Equipe sempre sobrecarregada Alta rotatividade da equipe Alto custo com horas extras Profissionais insatisfeiros Baixa credibilidade perante clientes e gestoresWednesday, December 12, 12
  • Como resolvo estes problemas? Como obtenho controle e padronização em meu ambiente ?Wednesday, December 12, 12
  • Gerência de ConfiguraçõesWednesday, December 12, 12
  • PadronizaçãoWednesday, December 12, 12
  • AutomatizaçãoWednesday, December 12, 12
  • ControleWednesday, December 12, 12
  • IntegridadeWednesday, December 12, 12
  • DesempenhoWednesday, December 12, 12
  • Agilidade nas mudançasWednesday, December 12, 12
  • Puppet Ferramenta de nova geração que implementa gerência de configurações para seu ambiente.Wednesday, December 12, 12
  • Visão Rápida Framework Open Source para Gerência de Configurações Oferece um conjunto de ferramentas para manipular estados Nos permite trabalhar a Infraestrutura como código Oferece uma linguagem declarativa para descrever configurações de sistemas e serviços Não é programaçãoWednesday, December 12, 12
  • Sobre a ferramenta Criado por Luke Kaines (CEO e Fundador Puppetlabs) Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache) Empresa oferece Suporte Corporativo e Versão Enterpris Empresa recebeu investimentos da VMWARE, GOOGLE e CISCOWednesday, December 12, 12
  • Sobre a ferramenta Criado por Luke Kaines (CEO e Fundador Puppetlabs) Empresa PuppetLabs mantém a Ferramenta Ferramenta OpenSource (Licença Apache) Empresa oferece Suporte Corporativo e Versão Enterpris Empresa recebeu investimentos da VMWARE, GOOGLE e CISCOWednesday, December 12, 12
  • Feito por um SysAdmin para SysAdminsWednesday, December 12, 12
  • Desenhada para uso DevOpsWednesday, December 12, 12
  • Visão DevOpsWednesday, December 12, 12
  • Desenvolvedor que lançar novas versões de forma rápida e eficiente Sysadmin quer manter o parque integro e funcionando minimizando riscos de incidentesWednesday, December 12, 12
  • Especificações e Características Escrito em Ruby Extensível usando código Ruby Funciona em modo Autônomo (serverless) Funciona em modo Cliente/Servidor usando API REST Provê comunicação segura usando SSL Suporte a 19 sistemas operacionais (Linux, Unix, BSD...)Wednesday, December 12, 12
  • Quem usa o Puppet?Wednesday, December 12, 12
  • Arquitetura Como funciona o Puppet?Wednesday, December 12, 12
  • Resource Abstraction LayerWednesday, December 12, 12
  • Puppet: RAL Resource Abstraction Layer = RAL Camada de Abstração de Recursos Fale o que você quer que seja feito Não se preocupe em como será feito O Puppet sabe como fazerWednesday, December 12, 12
  • Instale Pacote XWednesday, December 12, 12
  • Remova usuário ZWednesday, December 12, 12
  • (Re)inicie serviço YWednesday, December 12, 12
  • Tratamento de Informações O grande diferencial do Puppet é a forma como ele trata as informações de seus nodesWednesday, December 12, 12
  • Tratamento de informações No Puppet tudo é modelado e tratado como ‘dado’ O estado atual de um node (servidor) é um dado Um pacote instalado em um node é um dado Um usuário em um servidor é um dadoWednesday, December 12, 12
  • Os dados são inseridos em catálogos para serem utilizados O catálogo é processado pelo node e as modificações são aplicadas de acordo com o que foi declarado.Wednesday, December 12, 12
  • Processamento do Catálogo 1) Agente Requisita Catálogo 1.1) Agente envia Fatos para Master 2) Master Processa Fatos e Compara 2.1) Master Produz e envia Catálogo 3) Node Recebe, Compara e Aplica 4) Node informa estado atual ao Master 5) Sistema reflete catálogoWednesday, December 12, 12
  • IdempotênciaWednesday, December 12, 12
  • A idempotência é a propriedade que algumas operações têm de poderem ser aplicadas várias vezes sem que o valor do resultado se altere após a aplicação inicial. (fonte: wikipedia)Wednesday, December 12, 12
  • Puppet visão geral Puppet Configurações Módulos Estáticos Master Voláteis e Dados Camada de Serviços Estruturantes LDAP DNS MONIT SYSLOG Camada de Aplicação JBOSS APACHE MYSQL PGSQL Puppet AgentsWednesday, December 12, 12
  • O que acontece quando adicionamos um node ao nosso parque?Wednesday, December 12, 12
  • Adicionando node ao parque ZABBIX NGINX JBOSS POSTGRESQL MEMCACHEDWednesday, December 12, 12
  • Adicionando node ao parque ZABBIX NGINX JBOSS POSTGRESQL MEMCACHED Adicionar um novo node representa N mudançasWednesday, December 12, 12
  • Adicionando node ao parque sysadmin-utils ZABBIX zabbix-agent NGINX ntpconf locales JBOSS hosts users POSTGRESQL localmta smtpd vimrc MEMCACHED backup-agent apt-reposWednesday, December 12, 12
  • Como o Puppet pode ajudar? Automatizando todo o seu ambiente Provendo maior produtividade com menor esforço Padronizando seus nodes logo após a criação e instalação Modificando configurações de forma controlada Mantendo o estado declarado para cada node/instânciaWednesday, December 12, 12
  • Insira o Puppet na imagem de instalação de seus nodes.Wednesday, December 12, 12
  • Pare de administrar e começe a desenvolver sua infraWednesday, December 12, 12
  • Não tenha medo de realizar atualizações, o puppet faz pra você!Wednesday, December 12, 12
  • Você pode fazer deploy de sua APP Você pode controlar a versão de sua APPWednesday, December 12, 12
  • Como é o funcionamento do Puppet em Rede?Wednesday, December 12, 12
  • Puppet Master 8140 TCP 8139 TCP Client SSL Server puppetd -t puppetrun Puppet Client Puppet Visão em RedeWednesday, December 12, 12
  • Arquitetura Cliente/Servidor O agente gera um certificado digital O master precisa autorizar o certificado Sem autorização o agente não pode se comunicar Toda a comunicação entre agente e master é seguraWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do nodeWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização node do puppetWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização Geração de node do puppet CertificadoWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização Geração de node do puppet Certificado Envio de CertificadoWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização Geração de node do puppet Certificado Master Assina Envio de Certificado CertificadoWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização Geração de node do puppet Certificado Agente Master Assina Envio de Sincroniza Certificado CertificadoWednesday, December 12, 12
  • Fluxo Cliente/Servidor Instalação do Inicialização Geração de node do puppet Certificado Agente Master Assina Envio de Sincroniza Certificado Certificado Modalidades de Assinatura de Certificado Assinatura pode ser manual Assinatura pode ser automática por domínio Assinatura pode ser automática em qualquer requisiçãoWednesday, December 12, 12
  • O agente se comunica com o master a cada N minutosWednesday, December 12, 12
  • E quais os recursos disponíveis para gerenciar sistemas e serviços? Como manipulo estados do meu ambiente?Wednesday, December 12, 12
  • Funcionalidades do Puppet Resource Types Parâmetros e Meta-parâmetros Templates e Definições Classes e Módulos Funções e CondicionaisWednesday, December 12, 12
  • Puppet Resource Types Arquivos e Diretórios Yum Repos Usuários Augeas Alias Hosts Pacotes SSH Serviços Cron O puppet oferece 38 tipos de recursos nativos, e você pode estendê-lo.Wednesday, December 12, 12
  • Resource Type: Packages Suporte a 23 tipos de provedores de pacotes Faz a abstração do OS Declare se o pacote deve estar presente ou ausente Declare se o pacote deve sempre estar em sua última versãoWednesday, December 12, 12
  • Resource Type: Services Suporta 11 tipos de sistemas INIT para inicializar serviços Declare se um serviço deve estar sempre rodando Declare se um serviço deve ser carregado no boot Declare se um serviço depende de um pacote ou arquivoWednesday, December 12, 12
  • Resource Type: File Especifique permissões e owners Declare arquivos, diretórios e links Controle de mudanças usando até 15 tipos de checksumsWednesday, December 12, 12
  • ExemplosWednesday, December 12, 12
  • Instala, Configura e Inicia debian-way # aptitude install apache2 # update-rc.d -f apache2 defaults # cp ~/httpd.conf /etc/apache2/ # invoke-rc.d apache2 startWednesday, December 12, 12
  • Instala, Configura e Inicia package { apache2: ensure => present, }   service { apache2: ensure => running, enable => true, } file { httpd.conf: path => “/etc/apache2/httpd.conf”, source => “/etc/puppet/files/httpd.conf”, }Wednesday, December 12, 12
  • Instala, Configura e Inicia package { apache2: ensure => present, } resource type   service { apache2: parameter ensure => running, title enable => true, value } file { httpd.conf: path => “/etc/apache2/httpd.conf”, source => “/etc/puppet/files/httpd.conf”, }Wednesday, December 12, 12
  • Variáveis e Fatos Fatos (facter) domain => hacklab, Variáveis fqdn => puppetmaster.hacklab, hostname => puppetmaster, vimpackage => vim-puppet, interfaces => eth0,eth1,lo, ipaddress_eth0 => 10.0.2.15, apacheservice => apache2, ipaddress_eth1 => 192.168.56.150, ipaddress_lo => 127.0.0.1, ntpconfrhel => ntp.conf.rhel, lsbdistid => debian, lsbdistrelease => 6.0.5,Wednesday, December 12, 12
  • Condicionais case $operatingsystem { CentOS,RedHat: { $package_name = ntp, $service_name = ntpd, $conf_file = ntp.conf.el } Debian,Ubuntu: { $package_name = ntp, $service_name = ntp, $conf_file = ntp.conf.debian, } } ....Wednesday, December 12, 12
  • Definições proxy::squid { ProxyFilial : http_port => 3128, squid_mode => transparent, squid_hostname => proxy.4linux, cache_mem => 2 GB, maximum_object_size_in_memory => 6 MB, maximum_object_size => 128 MB, memory_replacement_policy => heap GDSF, cache_replacement_policy => heap LFUDA, cache_dir => aufs /var/spool/squid 1024 16 256, cache_mgr => monitora@4linux.com.br, cache_effective_user => proxy, cache_effective_group => proxy, dns_nameservers => 127.0.0.1 10.61.12.2 172.16.1.1, ips_squid => 127.0.0.1 192.168.12.3, }Wednesday, December 12, 12
  • Templates Trecho do template postfix/main.cf.erb myorigin = <%= hostname %> mydestination = $myhostname, ..., localhost, <%= fqdn %> Substituição de variáveis por fatos myorigin = servidor.dominio mydestination = $myhostname, ..., localhost, servidor.dominioWednesday, December 12, 12
  • Use uma base class para padronizar seus nodesWednesday, December 12, 12
  • Base Class class linux-server { include sysadmin-utils include zabbix-agent include ntpconf include locales include hosts include users include localmta include vimrc include backup-agent include apt-repos }Wednesday, December 12, 12
  • Como declaro um node e como empurro uma configuração?Wednesday, December 12, 12
  • Declarando um node node “servidor.dominio” { include linux-server include module } node “balancer.dominio” { include linux-server include apache include php5 include mysql }Wednesday, December 12, 12
  • E como acompanho mudanças?Wednesday, December 12, 12
  • Puppet DashboardWednesday, December 12, 12
  • Wednesday, December 12, 12
  • Posso fazer mudanças em tempo real?Wednesday, December 12, 12
  • Marionette Collective Orquestrador de nodes Execução de Tarefas Paralelas Interação com centenas de nodes Inventário descentralizado Leitura de meta-dados do Puppet Similar a Fabric e CapistranoWednesday, December 12, 12
  • Qual o resultado concreto?Wednesday, December 12, 12
  • Documentação InstantâneaWednesday, December 12, 12
  • Restore e backup de mudançasWednesday, December 12, 12
  • Processos bem definidosWednesday, December 12, 12
  • Ambiente PadronizadoWednesday, December 12, 12
  • Tarefas AutomatizadasWednesday, December 12, 12
  • Quais os Benefícios Reais?Wednesday, December 12, 12
  • Benefícios Reais Maior produtividade em menor tempo Poucos SysAdmins para muitos nodes Diminuição de falhas humanas Maior controle de todo o seu parque Diminuição do tempo gasto em mudanças Diminuição do custo de manutençãoWednesday, December 12, 12
  • Tecnologia trabalhando para vocêWednesday, December 12, 12
  • Puppet & Cloud IaaS Cloud Tools (FOSS) Cloud Hosts GanetiWednesday, December 12, 12
  • Boas PráticasWednesday, December 12, 12
  • Use API e recursos do fornecedor seja na nuvem, seja em hypervisor.Wednesday, December 12, 12
  • Insira o Puppet nos templates de seu HypervisorWednesday, December 12, 12
  • Desenvolva sua InfraWednesday, December 12, 12
  • Versione suas configuraçõesWednesday, December 12, 12
  • Reaproveite CódigoWednesday, December 12, 12
  • GitHub & PuppetForgeWednesday, December 12, 12
  • Pesquise!Wednesday, December 12, 12
  • Puppet em números 727 pessoas online no canal #puppet da irc.freenode.net 8.500 repositórios no GitHub 450 módulos no PuppetForge 4457 usuários ativos na lista puppet-users com 7795 tópicos de discussão Dados coletados em 2012-08-06 às 10:34 PMWednesday, December 12, 12
  • Puppet LabsWednesday, December 12, 12
  • Puppet na rede Site/Blog Google Groups http://www.puppetlabs.com Puppet-camp, http://www.puppetlabs.com/blog/ puppet-users, http://puppet-br.org/ puppet-users-br, puppet-dev Twitter @puppetlabs IRC irc.freenode.org GitHub #puppet http://www.github.com/puppelabs #puppet-brWednesday, December 12, 12
  • Perguntas?Wednesday, December 12, 12
  • twitter @gutocarvalho e-mail gutocarvalho@gmail.com slides slideshare.com/gutocarvalho blog gutocarvalho.net code github.com/gutocarvalho Obrigado!Wednesday, December 12, 12