SlideShare uma empresa Scribd logo
Fabric
Automatizando a manutenção de
servidores e o deploy de aplicações
de forma simples

Ítalo Rossi
@italorossi
italorossib@gmail.com

sábado, 12 de outubro de 13

1
Ítalo Rossi
Desenvolvedor, SysAdmin
Co-Founder Evolux

http://www.linkedin.com/in/italorossi
http://twitter.com/italorossi

sábado, 12 de outubro de 13

2
BM&F
Varejo
Call Center
ACD & Analytics

Terceirizadores
TV/Internet
Tecnologia
Saúde
Combustíveis

sábado, 12 de outubro de 13

3
sábado, 12 de outubro de 13

4
Tarefas comuns
Verificação de Load
Monitoração de Processo
Captura de Logs
Instalação de Pacotes
Compilação
Auditorias
Trace sinalização

sábado, 12 de outubro de 13

5
Desenvolvimento
Atualização do Webserver
Update de código
Migração do Banco
Restart nos serviços necessários
Execução de Testes
Criação de ambientes de teste

sábado, 12 de outubro de 13

6
SSH + SHELL

Go away or I will replace you with a very small shell script!

sábado, 12 de outubro de 13

7
Substitua o shell script que subtituiu alguém
por um script Python!

sábado, 12 de outubro de 13

8
sábado, 12 de outubro de 13

9
Fabric

sábado, 12 de outubro de 13

10
O que é?
Automatização de tarefas em modo Pythônico!

sábado, 12 de outubro de 13

11
Como funciona
Fabric

Servidor

Push

SSH Client

sábado, 12 de outubro de 13

SSH Server

12
Push and Pull

Simples
Interativo

sábado, 12 de outubro de 13

13
Push and Pull
Pull:
Automação
Escalabilidade

sábado, 12 de outubro de 13

14
# ssh server 'ifconfig'

Shell+SSH

sábado, 12 de outubro de 13

15
Task
#!/usr/bin/env python
from fabric.api import *
def show_interfaces():
run("ifconfig")

sábado, 12 de outubro de 13

16
# ssh server 'cd /opt; hg clone ...; cd my_project; ./start_my_project'

Shell+SSH

sábado, 12 de outubro de 13

17
Traduzindo...

#!/usr/bin/env python
from fabric.api import run, cd

def deploy():
"""Deploy my_project."""
repo_url = "ssh://hg@bitbucket.org/me/my_project"
run("hg clone %s /opt/my_project" % repo_url)
with cd("/opt/my_project"):
run("./start_my_project")

sábado, 12 de outubro de 13

18
Operações Básicas
local
run
sudo
prompt
put
get

sábado, 12 de outubro de 13

19
run, local, sudo
#!/usr/bin/env python
from fabric.api import *

Connect!

sábado, 12 de outubro de 13

def whoami():
local("whoami")
run("whoami")
sudo("whoami")

20
get, prompt, put
#!/usr/bin/env python
from fabric.api import *
def get_and_put_file():
file_path = prompt("GET: Which file?")
if file_path:
get(file_path)
file_path = prompt("PUT: Which file?")
if file_path:
put(file_path)

sábado, 12 de outubro de 13

21
Argumentos
#!/usr/bin/env python
from fabric.api import *
def show_interface(interface='all'):
if interface == 'all':
run("ifconfig")
else:
run("ifconfig %s" % interface)

fab show_interface:eth0 -H host

sábado, 12 de outubro de 13

22
Context Managers
settings, hide
#!/usr/bin/env python
from fabric.api import *
def ls_etc():
with settings(
hide('running', 'stdout'),
warn_only=True):
run("ls /etc")

As configurações são revertidas após a saída do with.
sábado, 12 de outubro de 13

23
Context Managers
cd, prefix
#!/usr/bin/env python
from fabric.api import *
def show_pip_freeze():
source_env = "/usr/local/pythonenv/pybr9"
with prefix("source %s/bin/activate" % source_env):
run("pip freeze")
with cd(source_env):
run("pwd")
run("ls")
print "-- After with block --"
run("pwd")

sábado, 12 de outubro de 13

24
Decorators
#!/usr/bin/env python
from fabric.api import *
env.roledefs = {
'development': ['172.31.31.31'],
'production': ['my.prod.server'],
'databases': ['10.10.10.10']
}

@roles('development')
def apt_update():
run("apt-get update")

@hosts('root@172.31.31.31:2222')
def apt_clean():
run("apt-get clean")

sábado, 12 de outubro de 13

25
File and Directory
Management
exists
append
comment
contains
from fabric.contrib.files import ...

is_link
sed
uncomment
...

sábado, 12 de outubro de 13

26
Deploy

sábado, 12 de outubro de 13

27
Parallel
Vídeo mostrando como rodar funções em vários Evolux!

sábado, 12 de outubro de 13

28
Life is good with
Automation!

sábado, 12 de outubro de 13

29
Perguntas?

sábado, 12 de outubro de 13

30
sábado, 12 de outubro de 13

31

Mais conteúdo relacionado

PDF
Turbolinks 5 + PWA (Progressive Web Apps)
Rodrigo Serradura
 
PDF
A explosão do Node.js: JavaScript é o novo preto
Nando Vieira
 
PDF
Presentta: usando Node.js na prática
Nando Vieira
 
PDF
Poco Bibliotecas C++
Uilian Ries
 
PDF
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
garux
 
PDF
Um site em 5 minutos com bottle.py
Giovane Liberato
 
PPT
Como migrar seu ambiente de desenvolvimento para Linux
Marcelo Sabadini
 
ODP
Conectando o Android a outros sistemas
Elias Junior
 
Turbolinks 5 + PWA (Progressive Web Apps)
Rodrigo Serradura
 
A explosão do Node.js: JavaScript é o novo preto
Nando Vieira
 
Presentta: usando Node.js na prática
Nando Vieira
 
Poco Bibliotecas C++
Uilian Ries
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
garux
 
Um site em 5 minutos com bottle.py
Giovane Liberato
 
Como migrar seu ambiente de desenvolvimento para Linux
Marcelo Sabadini
 
Conectando o Android a outros sistemas
Elias Junior
 

Mais procurados (12)

ODP
OpenSolaris a Céu Aberto
José Maria Silveira Neto
 
PDF
Vagrant + Puppet
Gustavo Chaves
 
PDF
Desenvolvimento Web com Django
Allisson Azevedo
 
PDF
Seja burro e preguiçoso! v2
s4nx
 
PDF
Os camaradas Grunt e Bower
A2 Comunicação
 
PDF
Dicas de sobrevivência de um DBA sem mouse
Dickson S. Guedes
 
PPT
MigraçãO
guest8e92c0d9
 
PDF
Php além do LAMP
Thiago Paes
 
ODP
Gerenciamento de dependências em python
Patrick Porto
 
PDF
Drupal + Rex
paulo_graca
 
PDF
Nossa experiência com TDD
Nelson Senna do Amaral
 
PDF
TDD - Test Driven Development (em PHP)
Augusto Pascutti
 
OpenSolaris a Céu Aberto
José Maria Silveira Neto
 
Vagrant + Puppet
Gustavo Chaves
 
Desenvolvimento Web com Django
Allisson Azevedo
 
Seja burro e preguiçoso! v2
s4nx
 
Os camaradas Grunt e Bower
A2 Comunicação
 
Dicas de sobrevivência de um DBA sem mouse
Dickson S. Guedes
 
MigraçãO
guest8e92c0d9
 
Php além do LAMP
Thiago Paes
 
Gerenciamento de dependências em python
Patrick Porto
 
Drupal + Rex
paulo_graca
 
Nossa experiência com TDD
Nelson Senna do Amaral
 
TDD - Test Driven Development (em PHP)
Augusto Pascutti
 
Anúncio

Semelhante a Fabric (20)

PDF
DevOps com Python
Henrique Gabriel Gularte Pereira
 
PDF
Python e suas aplicações
Izabela Guerreiro
 
PPTX
De 0 a DevOps
Amazon Web Services LATAM
 
PDF
Python no iG
Eduardo Scarpellini
 
PDF
Flask e Docker - rumo a AWS!
Ryan Padilha
 
PDF
Vagrant você deveria está usando
Hudson Brendon
 
PPTX
Ligando uma cafeteira com Micropython, Mqtt e Android
GDGFoz
 
PDF
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
iG - Internet Group do Brasil S/A
 
PDF
Começando com o Linux.pdf
AdilsonMelodeMoura1
 
PDF
Prototipação rápida - Rails e Arduino
Daner dos Reis
 
PDF
Primeiros passos com Openstack
Dalton Valadares
 
PDF
Escalando aplicação Python usando Getup OpenShift
Getup Cloud
 
PDF
Gentoo
Freedom DayMS
 
PDF
Vagrant vs docker? Melhor vagrant + docker
Wellington Silva
 
PDF
Yocto: Treinamento em Português
Otavio Salvador
 
PDF
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
iMasters
 
PDF
12 factor app. Melhor com Docker
Wellington Silva
 
PDF
Automação de Data Center
Eduardo Scarpellini
 
PDF
O que podemos fazer com Python?
Izabela Guerreiro
 
PDF
Vagrant - ambiente de desenvolvimento virtualizado
Vinícius Krolow
 
Python e suas aplicações
Izabela Guerreiro
 
Python no iG
Eduardo Scarpellini
 
Flask e Docker - rumo a AWS!
Ryan Padilha
 
Vagrant você deveria está usando
Hudson Brendon
 
Ligando uma cafeteira com Micropython, Mqtt e Android
GDGFoz
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
iG - Internet Group do Brasil S/A
 
Começando com o Linux.pdf
AdilsonMelodeMoura1
 
Prototipação rápida - Rails e Arduino
Daner dos Reis
 
Primeiros passos com Openstack
Dalton Valadares
 
Escalando aplicação Python usando Getup OpenShift
Getup Cloud
 
Vagrant vs docker? Melhor vagrant + docker
Wellington Silva
 
Yocto: Treinamento em Português
Otavio Salvador
 
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
iMasters
 
12 factor app. Melhor com Docker
Wellington Silva
 
Automação de Data Center
Eduardo Scarpellini
 
O que podemos fazer com Python?
Izabela Guerreiro
 
Vagrant - ambiente de desenvolvimento virtualizado
Vinícius Krolow
 
Anúncio

Último (17)

PPTX
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
PPTX
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
PPTX
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PPTX
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PPTX
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
PPTX
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
PPTX
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PPTX
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 
PPTX
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 

Fabric