less than 1 minute read

Fabric is a tidy tool for deployment that neatly wraps up fussy, manual tasks into a tidy Python syntax. The simple API wraps up most of your common deployment tasks into contexts which allow you to perform tasks either locally or sequentially on remote servers, using a transparent SSH mechanism.  Magic.

Because its all Python syntax, my temptation was to perform local tasks like directory creation using native Python. To initiate a local ‘build’ directory, I tried:

from fabric.api import * 
import os  

def init():  
    build_directory = "./build"     
    dir = os.path.dirname(build_directory) 

    if not os.path.exists(dir):         
        output = os.mkdir(dir)

For reasons that are not immediately apparent to me, this process fails rather silently. But reading the Fabric manual, it does specify that Fabric is:

  • A tool that lets you execute arbitrary Python functions via the command line
  • A library of subroutines (built on top of a lower-level library) to make executing shell commands over SSH easy and Pythonic.

As it turns out, the preferred way of doing this, is to use a local() task to drive the command line tools more directly. So instead, our fabfile looks like:

from fabric.api import *   

def init():     
    local('mkdir ./build') 

Simple, straightforward and pretty intuitive.