Slide 1

Slide 1 text

COZINHANDO COM O CHEF RSONRAILS 2013 Gabriel Mazetto blog.gabrielmazetto.eti.br Github: / BrodocK @brodock

Slide 2

Slide 2 text

INÍCIO "Eu tinha um sonho... Conseguir fazer deploy de servidor com um único comando!"

Slide 3

Slide 3 text

ORIGEM

Slide 4

Slide 4 text

PRÉ-HISTÓRIA Mainframes e grandes computadores Configuração manual das máquinas Poucas pessoas com "poder de root" Poucos usuários - Yey!

Slide 5

Slide 5 text

IDADE MÉDIA Computadores interligados em rede Manuais de procedimentos Princípio de boas práticas Scripts em bash

Slide 6

Slide 6 text

IDADE MODERNA Golden Images Princípio de automatização Scripts complexos ps, sed, awk... "Pipe Hell"

Slide 7

Slide 7 text

A NUVEM

Slide 8

Slide 8 text

A QUEDA DO HOMEM "Ta tudo funcionando, ninguem sabe como." "Não está nada funcionando, ninguem sabe como."

Slide 9

Slide 9 text

O PROBLEMA Bash não resolve tudo! Virtualização Crescimento esponencial de "sistemas" Comoditização Não é viável contratar para suprir a demanda

Slide 10

Slide 10 text

MOTIVAÇÃO

Slide 11

Slide 11 text

POR QUE? Padronização Boas práticas Fácil replicação Escalabilidade Alta Disponibilidade Monitoramento OpenSource (suporte comercial) "Eu odeio bash :)"

Slide 12

Slide 12 text

#COMOFAZ?

Slide 13

Slide 13 text

CHEF

Slide 14

Slide 14 text

CONCEITOS IDEMPOTÊNCIA: "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." - Wikipedia

Slide 15

Slide 15 text

CONCEITOS RECIPES: São as instruções do que precisa ser feito... sem detalhar muito sobre como fazer

Slide 16

Slide 16 text

CONCEITOS COOKBOOKS Pacote com receitas, atributos, templates... (é o que você vai versionar e fazer push)

Slide 17

Slide 17 text

CONCEITOS PROVIDERS São as ações da sua receita, o "como fazer" package, directory, cron, file, template...

Slide 18

Slide 18 text

INSTALAÇÃO DO CHEF Com o Ruby instalado na máquina: $ g e m i n s t a l l c h e f b e r k s h e l f

Slide 19

Slide 19 text

COMANDOS knife berks chef-client chef-shell chef-solo

Slide 20

Slide 20 text

CRIANDO UM COOKBOOK $ k n i f e c o o k b o o k c r e a t e d e v m a c h i n e s * * C r e a t i n g c o o k b o o k d e v m a c h i n e s * * C r e a t i n g R E A D M E f o r c o o k b o o k : d e v m a c h i n e s * * C r e a t i n g C H A N G E L O G f o r c o o k b o o k : d e v m a c h i n e s * * C r e a t i n g m e t a d a t a f o r c o o k b o o k : d e v m a c h i n e s $ l s C H A N G E L O G . m d a t t r i b u t e s f i l e s m e t a d a t a . r b r e c i p e s t e m p l a t e s R E A D M E . m d d e f i n i t i o n s l i b r a r i e s p r o v i d e r s r e s o u r c e s

Slide 21

Slide 21 text

RECEITA: EXEMPLO # I n s t a l a o v i m p a c k a g e " v i m " # R e m o v e o a p a c h e p a c k a g e " a p a c h e 2 " { : a c t i o n = > : r e m o v e } # I n s t a l a e m a n t e m o n g i n x a t u a l i z a d o p a c k a g e " n g i n x - f u l l " { : a c t i o n = > : u p g r a d e } # G e r a u m t e m p l a t e b a s e a d o e m t e m p l a t e s / n g i n x . c o n f . e r b t e m p l a t e " / e t c / n g i n x / n g i n x . c o n f " d o s o u r c e " n g i n x . c o n f . e r b " v a r i a b l e s ( : w o r k e r _ p r o c e s s e s = > n o d e [ " n g i n x " ] [ " w o r k e r _ p r o c e s s e s " ] ) e n d

Slide 22

Slide 22 text

RECEITA: EXEMPLO 2 # D e f i n e p a c o t e s e s p e c í f i c o s p r a c a d a p l a t a f o r m a p a c k a g e s = v a l u e _ f o r _ p l a t f o r m ( [ " u b u n t u " , " d e b i a n " ] = > { " d e f a u l t " = > [ " v i m " ] } , [ " c e n t o s " , " f e d o r a " ] = > { " d e f a u l t " = > [ " v i m - m i n i m a l " , " v i m - e n h a n c e d " ] } , " d e f a u l t " = > [ " v i m " ] ) # I n s t a l a e m a n t e m a t u a l i z a d o p a c k a g e s . e a c h d o | p k g | p a c k a g e p k g { : a c t i o n = > : u p g r a d e } e n d

Slide 23

Slide 23 text

EXEMPLO ATTRIBUTES d e f a u l t [ : n g i n x ] [ : d i r ] = " / e t c / n g i n x " d e f a u l t [ : n g i n x ] [ : l o g _ d i r ] = " / v a r / l o g / n g i n x " d e f a u l t [ : n g i n x ] [ : u s e r ] = " w w w - d a t a " d e f a u l t [ : n g i n x ] [ : b i n a r y ] = " / u s r / s b i n / n g i n x " d e f a u l t [ : n g i n x ] [ : i n i t _ s t y l e ] = " i n i t " d e f a u l t [ : n g i n x ] [ : w o r k e r _ p r o c e s s e s ] = c p u [ : t o t a l ] d e f a u l t [ : n g i n x ] [ : w o r k e r _ c o n n e c t i o n s ] = 1 0 2 4

Slide 24

Slide 24 text

CONSIDERAÇÕES FINAIS 1. Comece com um servidor e coloque o client nas máquinas 2. Crie receitas simples que mantenham os pacotes essenciais atualizados 3. Nunca confie nos pacotes oficiais: leia o fonte! 4. Nunca teste em produção, use o Vagrant. 5. RTFM: http://docs.opscode.com/

Slide 25

Slide 25 text

PERGUNTAS?

Slide 26

Slide 26 text

OBRIGADO