Fabric – yum, pip, cacher les sorties – stdout

Cet article parle de Fabric1. Depuis Fabric2 est sortie, et a beaucoup changé.

Fabric est franchement un outil vraiment bien branlé pour faire ses déploiements, mais aussi installer ses serveurs.

Par exemple, voici une installation basique:

from fabric.api import *
from fabric.colors import *
 
def install():
    env.user = 'admin'
    print(green('=== Installing basics for Nginx/Uwsgi/MariaDB/RabbitMQ ==='))
    sudo('yum -y -q install epel-release')
    sudo('yum -y -q install nginx python-pip git mariadb mariadb-server mariadb-devel python-devel '
         'rabbitmq-server librabbitmq-devel librabbitmq-tools')
    sudo('yum -y -q group install "Development Tools"')
    sudo('pip install virtualenv virtualenvwrapper uwsgi')

Il suffit par la suite de lancer fabric, mais yum et pip sont très verbeux, malgré l’option -q…

$ fab -H myHost install
[....]
[myHost] out: Collecting uwsgi
[myHost] out:   Downloading uwsgi-2.0.11.2.tar.gz (782kB)
[myHost] out: 
[myHost] out:     0% || 4.1kB 18.0MB/s eta 0:00:01
[myHost] out:     1% || 8.2kB 15.4MB/s eta 0:00:01
[myHost] out:     1% || 12kB 15.1MB/s eta 0:00:01
[myHost] out:     2% || 16kB 11.2MB/s eta 0:00:01
[myHost] out:     2% || 20kB 11.7MB/s eta 0:00:01
[myHost] out:     3% || 24kB 12.5MB/s eta 0:00:01
[myHost] out:     3% |█▏                              | 28kB 13.2MB/s eta 0:00:01
[myHost] out:     4% |█▍                              | 32kB 10.5MB/s eta 0:00:01
[myHost] out:     4% |█▌                              | 36kB 10.4MB/s eta 0:00:01
[myHost] out:     5% |█▊                              | 40kB 10.6MB/s eta 0:00:01
[myHost] out:     5% |█▉                              | 45kB 10.4MB/s eta 0:00:01
[myHost] out:     6% |██                              | 49kB 9.0MB/s eta 0:00:01
[myHost] out:     6% |██▏                             | 53kB 9.0MB/s eta 0:00:01
[myHost] out:     7% |██▍                             | 57kB 9.6MB/s eta 0:00:01
[myHost] out:     7% |██▌                             | 61kB 9.7MB/s eta 0:00:01
[myHost] out:     8% |██▊                             | 65kB 9.1MB/s eta 0:00:01
[myHost] out:     8% |██▉                             | 69kB 8.8MB/s eta 0:00:01
[myHost] out:     9% |███                             | 73kB 10.3MB/s eta 0:00:01
[myHost] out:     9% |███▏                            | 77kB 10.7MB/s eta 0:00:01
[myHost] out:     10% |███▍                            | 81kB 9.9MB/s eta 0:00:01
[myHost] out:     10% |███▌                            | 86kB 9.6MB/s eta 0:00:01
[myHost] out:     11% |███▊                            | 90kB 11.5MB/s eta 0:00:01
[myHost] out:     12% |███▉                            | 94kB 11.7MB/s eta 0:00:01
[myHost] out:     12% |████                            | 98kB 11.8MB/s eta 0:00:01
[myHost] out:     13% |████▏                           | 102kB 11.7MB/s eta 0:00:01
[myHost] out:     13% |████▍                           | 106kB 12.6MB/s eta 0:00:01
[...]

Bon là c’est juste un petit extrait de ce que peut nous sortir pip. Alors quand y’a plein de truc à installer …

Heureusement Frabric nous propose une solution pour éviter de perdre la vue avec autant d’infos : fabric.context_managers.hide

Et voici donc comment faire :

from fabric.api import *
from fabric.colors import *
 
def install():
    env.user = 'admin'
    with hide('stdout'):
        print(green('=== Installing basics for Nginx/Uwsgi/MariaDB/RabbitMQ ==='))
        sudo('yum -y -q install epel-release')
        sudo('yum -y -q install nginx python-pip git mariadb mariadb-server mariadb-devel python-devel '
             'rabbitmq-server librabbitmq-devel librabbitmq-tools')
        sudo('yum -y -q group install "Development Tools"')
        sudo('pip install virtualenv virtualenvwrapper uwsgi')

Et la, c’est quand meme vachement plus agréable !

$ fab -H myHost install
[myHost] Executing task 'install'
=== Installing basics for Nginx/Uwsgi/MariaDB/RabbitMQ ===
[myHost] sudo: yum -y -q install epel-release
[myHost] sudo: yum -y -q install nginx python-pip git mariadb mariadb-server mariadb-devel python-devel rabbitmq-server librabbitmq-devel librabbitmq-tools
[myHost] sudo: yum -y -q group install "Development Tools"
[myHost] sudo: pip install virtualenv virtualenvwrapper uwsgi
=== Install New Relic ===
[myHost] sudo: rpm -Uvh http://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm
[myHost] sudo: yum install newrelic-sysmond -y
[myHost] sudo: nrsysmond-config --set license_key=7e6eb966bf31cf82ab4d9fe5cc0b0d772fa6cee8
[myHost] sudo: /etc/init.d/newrelic-sysmond start
 
Done.
Disconnecting from myHost... done.

La fonction hide peut prendre plusieurs paramètres. Dans notre exemple il n’y a que les sorties de programme qui sont cachées. Pour savoir tout ce que l’on peut cacher c’est ici

Tchuss 😉

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.