Om du har precis som mig många servrar som är utspridda på flertalet leverantörer så finns det några smarta hjälpmedel för att underlätta administration och deployment av ny kod. Ett av dessa hjälpmedel heter Fabric och är snarlikt med Capistrano för Ruby.
På en Ubuntu-kärra så är det lättast att bara köra apt-get install fabric så får du prylarna du behöver på ett nafs (alternativt pip install fabric).
Testa sedan med:
$ fab Fatal error: Couldn't find any fabfiles! Remember that -f can be used to specify fabfile path, and use -h for help. Aborting.
Det finns olika sätt att sedan använda fabric för att exekvera kommandon på flertalet servrar. De vanliga är att man skapar fabfiles eller bakar in det man vill göra direkt i sin Python-kod efter en import fabric.
Fabric i Python via import fabric
Rätt enkelt och behövs inte så många rader kod. Vår kod ser ut enligt nedan och startas med python kodnamn.py:
#!env python from fabric.api import run,env,hosts,execute env.key_filename = "/home/jonasl/jonasl.pem" env.user = "ubuntu" @hosts(['79.125.115.128']) def uname(): return run("uname -a") execute(uname)
Ovan kod beskriver först vilken nyckelfil (pem) vi använder. Precis samma sak som att köra ssh -i jonasl.pem. Och env.user berättar vilken användare vi loggar in med.
Sen använder vi en rolig sak i Python som kallas för dekorator (decorator) och den sätter vilken IP-adress vi ska ansluta mot. Denna dekorator behövs inte i nästa exempel som skiljer sig lite.
Fabric direkt via kommandoskal och fabfile
När man använder kommandot fab så läser Fabric direkt en fil som heter fabfile.py i samma katalog som man står i och där kan man placera kommandon såsom ovan uname som ska köras mot olika servrar. Först skapar vi fabfile.py som ser ut så här:
#!env python from fabric.api import run,env,hosts,execute env.key_filename = "/home/jonasl/jonasl.pem" env.user = "ubuntu" def uname(): return run("uname -a")
Sen kör vi bara fab -H ip-nummer uname på följande sätt:
$ fab -H 79.125.115.128 uname [79.125.115.128] Executing task 'uname' [79.125.115.128] run: uname -a [79.125.115.128] out: Linux syslog 3.2.0-53-virtual #81-Ubuntu SMP Thu Aug 22 21:21:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux Done. Disconnecting from 79.125.115.128... done. $
I nästa avsnitt ska jag gå igenom lite mer hur man kan använda olika server-roller för att skjuta utkod via git.
3 reaktioner på ”DevOps med Python Fabric”