Date post: | 26-Jun-2015 |
Category: |
Technology |
Upload: | italo-rossi |
View: | 317 times |
Download: | 3 times |
Fabric
Automatizando a manutenção de servidores e o deploy de aplicações
de forma simples
Ítalo Rossi@italorossi
1sábado, 12 de outubro de 13
Ítalo RossiDesenvolvedor, SysAdmin
Co-Founder Evolux
http://www.linkedin.com/in/italorossihttp://twitter.com/italorossi
2sábado, 12 de outubro de 13
BM&F
Varejo
Terceirizadores
TV/Internet
Tecnologia
Saúde
Combustíveis
Call CenterACD & Analytics
3sábado, 12 de outubro de 13
4sábado, 12 de outubro de 13
Tarefas comuns
Verificação de LoadMonitoração de ProcessoCaptura de LogsInstalação de PacotesCompilaçãoAuditoriasTrace sinalização
5sábado, 12 de outubro de 13
DesenvolvimentoAtualização do WebserverUpdate de códigoMigração do BancoRestart nos serviços necessáriosExecução de TestesCriação de ambientes de teste
6sábado, 12 de outubro de 13
SSH + SHELLGo away or I will replace you with a very small shell script!
7sábado, 12 de outubro de 13
Substitua o shell script que subtituiu alguém por um script Python!
8sábado, 12 de outubro de 13
9sábado, 12 de outubro de 13
Fabric
10sábado, 12 de outubro de 13
O que é?
Automatização de tarefas em modo Pythônico!
11sábado, 12 de outubro de 13
Como funciona
Fabric
SSH Client SSH Server
Servidor
Push
12sábado, 12 de outubro de 13
Push and Pull
Simples
Interativo
13sábado, 12 de outubro de 13
Push and Pull
Pull:
Automação
Escalabilidade
14sábado, 12 de outubro de 13
Shell+SSH
# ssh server 'ifconfig'
15sábado, 12 de outubro de 13
Task
#!/usr/bin/env pythonfrom fabric.api import *
def show_interfaces(): run("ifconfig")
16sábado, 12 de outubro de 13
Shell+SSH
# ssh server 'cd /opt; hg clone ...; cd my_project; ./start_my_project'
17sábado, 12 de outubro de 13
Traduzindo...
#!/usr/bin/env pythonfrom fabric.api import run, cd
def deploy(): """Deploy my_project.""" repo_url = "ssh://[email protected]/me/my_project" run("hg clone %s /opt/my_project" % repo_url) with cd("/opt/my_project"): run("./start_my_project")
18sábado, 12 de outubro de 13
Operações Básicas
local
run
sudo
prompt
put
get
19sábado, 12 de outubro de 13
run, local, sudo
#!/usr/bin/env pythonfrom fabric.api import *
def whoami(): local("whoami") run("whoami") sudo("whoami")Connect!
20sábado, 12 de outubro de 13
get, prompt, put#!/usr/bin/env pythonfrom 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)
21sábado, 12 de outubro de 13
Argumentos#!/usr/bin/env pythonfrom fabric.api import *
def show_interface(interface='all'): if interface == 'all': run("ifconfig") else: run("ifconfig %s" % interface)
fab show_interface:eth0 -H host
22sábado, 12 de outubro de 13
Context Managerssettings, hide
#!/usr/bin/env pythonfrom 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.
23sábado, 12 de outubro de 13
Context Managerscd, prefix
#!/usr/bin/env pythonfrom 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")
24sábado, 12 de outubro de 13
Decorators#!/usr/bin/env pythonfrom 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('[email protected]:2222')def apt_clean(): run("apt-get clean")
25sábado, 12 de outubro de 13
File and Directory Management
exists
append
comment
contains
is_link
sed
uncomment
...
from fabric.contrib.files import ...
26sábado, 12 de outubro de 13
Deploy
27sábado, 12 de outubro de 13
Parallel
Vídeo mostrando como rodar funções em vários Evolux!
28sábado, 12 de outubro de 13
Life is good with Automation!
29sábado, 12 de outubro de 13
Perguntas?
30sábado, 12 de outubro de 13
31sábado, 12 de outubro de 13