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

Fabric