Skip to content

Instantly share code, notes, and snippets.

@EmersonSPardo
Forked from DavidWittman/notes.md
Last active November 20, 2015 00:04
Show Gist options
  • Save EmersonSPardo/156f7ba525a42bccffa5 to your computer and use it in GitHub Desktop.
Save EmersonSPardo/156f7ba525a42bccffa5 to your computer and use it in GitHub Desktop.
A Brief Introduction to Fabric

Uma Breve Introdução ao Fabric

-- Tradução de A Brief Introduction to Fabric --

Fabric é um framework para gerenciamento de deployment escrito em Python que torna incrivelmente fácil gerenciar múltiplos servidores. Se você alguma vez já teve que fazer uma mudança para um grupo de servidores então algo assim deve ser familiar:

for s in $(cat servers.txt); do ssh $s service httpd graceful; done

Fabric melhora esse processo provendo um conjunto de funções para executar comandos nos servidores assim como outras funções que não seriam possíveis em um simples loop. Ter conhecimento de Python ajuda ao usar o Fabric mas certamente não é necessário. Este tutorial cobrirá os passos necessários para começar a usar o framework e introduzir como ele pode ser usado para melhorar a administração de grupos de servidores.

Instalando o Fabric

Uma das melhores coisas a respeito do Fabric é que os sistemas que serão administrados remotamente não precisam de nada além de um servidor OpenSSH padrão. Mas o servidor master onde você rodará o Fabric precisa de algumas poucas coisas instaladas antes de começar. Então, vamos começar.

Requisitos

  • Python 2.5+ com os headers de desenvolvimento
  • python-setuptools and pip (opcional, mas preferido)
  • gcc

Se você já tiver todas as dependências instaladas então basta executar pip install fabric e ir para a próxima sessão. Caso contrário, aqui estão algumas instruções para instalá-lo:

CentOS/RHEL 6.x

# yum install gcc python-devel python-setuptools
# easy_install pip
# pip install fabric

CentOS/RHEL 5.x

Nota: Porque o Python 2.5+ é um requisito, versões mais velhas do RHEL e CentOS precisarão usar os repositórios EPEL ou instalar o Python a partir das fontes. Estamos trabalhando sob a suposição de que você já está usando EPEL.

# yum install python26 python26-devel python26-setuptools gcc
# easy_install-2.6 pip
# pip install fabric

Ubuntu 10.04+

# apt-get install python-dev python-setuptools gcc
# easy_install pip
# pip install fabric

Usando o Fabric

Agora vem a parte divertida. O processo de instalação adicionou um script Python chamado fab ao diretório em seu PATH (esperamos). Este é o script que será usado para fazer a mágica acontecer com o Fabric. Entretanto, apenas executando fab na linha de comando não fará nada. Para fazermos algo interessante nós criaremos nosso primeiro fabfile.

Criando um fabfile

O fabfile é onde todas suas funções, papéis (roles), configurações, etc serão definidos. É apenas um pouco de Python que diz ao Fabric exatamente o que ele precisa fazer. Por convenção, este arquivo deve ser chamado fabfile.py, mas você pode nomeá-lo como quiser. Apenas tenha em mente que se o nome for diferente de fabfile.py você precisará especificar o caminho usando fab -f /caminho/ao/seufabfile.py. Aqui está um exemplo simples que executa uptime localmente:

fabfile.py

#!/usr/bin/env python
from fabric.api import local

def uptime():
  local('uptime')

Agora, vamos executar o script chamando a função uptime com fab uptime:

# fab uptime
[localhost] local: uptime
 17:19:31 up 29 min,  1 user,  load average: 0.03, 0.04, 0.06

Done.

Ótimo! Bom, não exatamente. Não há nada de especial em rodar comandos localmente. Vamos aprender um pouco mais sobre como o Fabric pode fazer e colocar esse cara na estrada.

Administração Remota

A API do Fabric usa um dicionário (o equivalente Python de um array associativo ou hash tabl) de configuração conhecido como env para armazenar valores que controlam o comportamento do Fabric. Existe um bom número de opções disponíveis mas para os propósitos deste tutorial vamos focar no env.hosts. env.hosts é uma lista (um array Python) de servidores que você queira conectar quando executar as tarefas do Fabric.

Por exempo, se você quer gerenciar 192.168.1.100-102 com seu fabfile, você pode configurar o seguinte env.hosts:

#!/usr/bin/env python

from fabric.api import env

env.hosts = [ '192.168.1.100', '192.168.1.101', '192.168.1.102' ]

Obviamente, este é apenas um pequeno exemplo. Sem qualquer tarefa definica o Fabric não fará nada. Então, vamos configurar algumas tarefas. Fabric te dá um conjunto de funções que podem ser usadas para interagir com esses servidores remotos. Aqui estão alguns dos mais usados:

  • run - Executa um comando no shell do servidor remoto.
  • sudo - Executa um comando no shell do servidor remoto, com privilégios de superusuário.
  • get - Baixa um ou mais arquivos do servidor remoto.
  • put - Sobe um ou mais arquivos para o servidor remoto.

Veja a Wiki do Fabric para uma lista completa de operações.

Vamos colocar tudo isso junto e criar um fabfile.py básico que executa uptime em cada um dos servidores remotos.

#!/usr/bin/env python

from fabric.api import env, run

env.hosts = [ '192.168.1.100', '192.168.1.101', '192.168.1.102' ]

def uptime():
  run('uptime')

Muito simples, certo? Agora vamos executá-lo chamando fab uptime novamente na linha de comando:

# fab -P uptime
[192.168.1.100] Executing task 'uptime'
[192.168.1.101] Executing task 'uptime'
[192.168.1.102] Executing task 'uptime'
[192.168.1.100] run: uptime
[192.168.1.101] run: uptime
[192.168.1.102] run: uptime
[192.168.1.100] out:  12:42:05 up 15 min,  1 user,  load average: 0.00, 0.02, 0.03

[192.168.1.101] out:  12:42:05 up 16 min,  1 user,  load average: 0.00, 0.01, 0.01

[192.168.1.102] out:  12:42:05 up 16 min,  1 user,  load average: 0.00, 0.01, 0.02


Done.

Você deve ter notado o -P quando eu executei a tarefa. Isso diz ao Fabric para executar os comandos assincronamente (em paralelo). Como qualquer outra aplicação, execute fab -h para uma lista completa de opções de linha de comando.

Conclusões

E é isso que tenho a dizer nesse curso rápido sobre Fabric. Busque informações para aprender mais sobre o Fabric na lista de leituras adicionais.

Leitura adicional

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment