-- 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.
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.
- 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:
# yum install gcc python-devel python-setuptools
# easy_install pip
# pip install fabric
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
# apt-get install python-dev python-setuptools gcc
# easy_install pip
# pip install 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.
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.
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.
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.
- Wiki do Fabric
- Leia alguns exemplos de fabfile.py on gist.github.com.
- Baixe Fabrack, minha biblioteca para integrar o Fabric com a API do Rackspace Cloud.