Outils personnels

Fabric : installation sur Debian

De wikiGite

Facile ?

apt-get install fabric

Pas si facile !

Comme toujours, les paquets Debian sont âgés. Voire très âgés. La version de Fabric pour Squeeze est une 0.9, sachant que la version stable de Fabric à ce jour (février 2012) est 1.4 ! Entre ces 2 versions, des tas de paramètres bien utiles sont apparus !

Pypi, et pip

Optionnel : installer pip (plus récent que easy_install)

apt-get install python-pip
pip install -U pip

Pour résoudre un bug éventuel de l'upgrade de pip par lui-même :

rm /usr/bin/pip
ln -sv /usr/local/bin/pip-2.6 /usr/bin/pip

Obligatoire : installer gcc et les setuptools

apt-get install gcc python-setuptools 

Sur Debian, installer python-dev :

apt-get install python2.6-dev

Charger le dernier tar.gz sur http://pypi.python.org/pypi/Fabric

wget http://pypi.python.org/packages/source/F/Fabric/Fabric-1.4.1.tar.gz
tar -xvzf Fabric-1.4.1.tar.gz
cd Fabric-1.4.1
pip install .

Si pip n'est pas installé, on peut toujours :

python setup.py install
fab -V

Git

On va donc installer une version plus récente.

apt-get purge fabric
cd /root/install
wget https://github.com/fabric/fabric/tarball/master
mv master fabric.tgz
tar -xvzf fabric.tgz
cd fabric-fabric*

Ces sources ne sont pas obligatoirement celles qu'on va installer. Leur intérêt est de nous fournir le script setup.py, qui lui, va aller chercher la dernière version en ligne et l'installer.

python setup.py install
fab -V

Si l'exécutable fab est introuvable dans la commande ci-dessus, créer un lien.

ln -s /usr/local/bin/fab /usr/bin/fab

Utilisation

création d'un fichier test

vi fabtest.py
from fabric.api import run,env
env.hosts = ['server.domain.net']

def uptime():
   run('uptime')

Echange des clés SSH avec le client, puis :

fab -f fabtest.py uptime

TIPS

APIs

Les fichiers se trouvent dans /usr/share/pyshared/fabric.

Pour charger des fonctions supplémentaires, par exemple "sed", il peut être nécessaire de charger d'autres APIs. En cherchant dans /usr/share/pyshared/fabric, on voit que la fonction sed se trouve dans contrib/files.py. On chargera donc cette API et cette focntion par :

from fabric.contrib.files import sed

Roles

Pour définir des rôles (exemple : des types d'OS), utiliser :

from fabric.api import run,env,roles
env.roledefs = {
   'debian' : ['server1','server2']
   'centos' : ['server3']
}

On pourra alors soit utiliser ces rôles dans le code des fonctions :

@roles('debian')
def inst_mn_deb():
      run('apt-get install munin-node')

@roles('centos')
def inst_mn_cent():
      run('yum install munin-node')

Variables

On peut assigner et utiliser une variable simplement :

opsys = run('uname -s')
if opsys == 'Linux':
  .....

Ou l'assigner à l'exécution. Le code :

def upgrade(do_upgrade=no):
   if do_upgrade='yes':
      run('apt-get upgrade')

exécute un upgrade si on le lance par

fab -f fabtest.py upgrade:do_upgrade=yes