Etikettarkiv: Fabric

Bild CC http://www.flickr.com/photos/lukechanchan/5311384779/

Vad är DevOps?

Du kanske undrar vad DevOps är för något som jag bloggat om? Förutom att det är ett mode-ord och en rörelse som är på tapeten så betyder det också så klart något.

Enklast förklarat är det ett ord som beskriver automatisering av tre olika närbesläktade verksamheter, nämligen:

  • Utveckling
  • Drift
  • Test (QA)

Och tittar vi mer konkret hur vi kan beskriva DevOps så handlar det om att få mer gjort med mindre mankraft. Oftast genom att skriva kod för automatisk deployment och tester och de verktyg som används är oftast:

Men inte att glömma viktiga verktyg såsom:

Med ovan smörgårsbord av verktyg så går det att bygga underbara lösningar som gör utrullning av versionshanterad kod snyggt, snabbt och smidigt.

DevOps omfattar även continuous integration (CI) och verktyg såsom Jenkins.

Favorit ”reactions” Tumblr just nu som är relaterad till detta ämne:

Funderingar, kommentarer? Lämna gärna en kommentar eller kontakta mig.

Docker är kittet i DevOps

Docker

Då och då dyker det upp mjukvara som underlättar livet avsevärt, då man nästan utropar Heureka! När jag först lärde mig använda Fabric så tycke jag att detta var ju guld värt: Att slippa göra samma sak manuellt på flera servrar. DevOps-filosofin i ett nötskal

Men! Nu tog jag mig tid och försökte lära mig Docker. Docker har tagit det hela lite längre och isolerar filer samt processer från underliggande operativsystem samt innehar versionshantering. Vad innebär detta då?

Jo, för sådana som mig som har beroenden långt utanför vad vanliga webbhotell kan leverera såsom Redis, Sphinx och Memcache så är Docker en mjukvara som löser detta.

Man kan kort och gott säga att Docker är ett operativsystem i operativsystemet. Lite som Xen eller Vmware men mycket ”lättare”.

I detta underliggande operativsystem så utgår du från en spegelbild som fungerar som bas och allt du lägger till får en ny revision. Detta gör exempelvis om du vill flytta en webbsajt med Redis, MySQL och Sphinx Search från en server till en annan så behöver du enbart flytta det som ändrats från spegelbilden.

Docker är så klart öppen källkod och helt gratis att använda. Och inte nog med det så är det ett MeetUp om några veckor i Stockholm om just DevOps och Docker med talare från bl.a. Spotify:

GitHubs sökfunktion, en guldgruva

Innan jag fortsätter med nästa inlägg i min serie om DevOps med Python/Fabric så tänkte jag tipsa om Githubs relativt nya avancerade sökfunktion. Denna sökfunktion har räddat mig många gånger då jag funderat hur en viss funktion kan användas eller exempel på kod hur saker kan genomföras.

Om du vill lära dig hur du kan sätta datornamn (hostname) via Fabric så kan följande sökning genomföras:

python fabric

Kolla även in den avancerade sökfunktionen:

DevOps med Python Fabric

DevOpsOm 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.

Vad händer?

blogbackupr

En liten statusuppdatering vad jag pysslar med eftersom jag är så dålig på att uppdatera bloggen:

Håller på att sälja av Blogbackupr + Bloggbackup och kommer snart att läggas upp på Flippa.

Har byggt om lite på https.se så det är lättare att beställa SSL-certifikat. Bl.a. möjligheten att välja faktura direkt och använder Billogram. Dock ej deras API ännu, men det kommer nog.

Förbereder sista delarna på en ny startup som kommer att ha release på Internetdagarna.

Underlättar administration av alla mina servrar med Python + Fabric och försöker bli en ninja på JavaScript.

På det mer personliga planet så har jag anmält mig till IRONMAN Kalmar 2014 och tränar en hel del inför tävlingen.