What is Fabric?
You can visit the fabric site . It gives the most apt description of what fabric is.Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
More specifically, 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.
Prerequisites
- Assuming you have fair knowledge of python basics. If not please go over the basics in the tutorial - The Python Tutorial
- Also you mus have python installed. If not refer to the guide - The Hitchhiker’s Guide to Python!
Installing Fabric
Before you install Fabric you need to install modules needed to install other modules. For that you can either install -
- pip or
- setuptools
pip install fabric
and your fabric should be installed. You can see various related installation ways here. You can see the installed module in
- <Python installation directory>\Lib\site-packages .
For me it is located in
- C:\Python34\Lib\site-packages\fabric
- C:\Python34\Scripts
which we have already added in the PATH environment variable [This is the same place where you have pip and easy_install executable]
Getting Started
Lets start with our usual "Hello World!" example. Create a file called fabfile.py and add following content in it -
def helloworld(): """This is a test hello world fab method""" print("Hello World!")
To see list of available fabric commands do -
- fab -l
For above file you should see something like -
[athakur@localhost athakur]$ fab -l
Available commands:
helloworld This is a test hello world fab method
Available commands:
helloworld This is a test hello world fab method
Next it's time to execute the command itself. Execute
- fab helloworld
and you should see Hello World! printed on the console.
Note : Any method that starts with an underscore (_) is a private method and cannot be used directly as fab command. It will even not be listed in fab -l command.
Consider following code -
def helloworld(): """This is a test hello world fab method""" print("Hello World") _private_helloworld() def _private_helloworld(): """ This is private method and should not be listed with fab -l""" print("Private hello World")
Execute fab -l and you should again see the same output as above i.e you should not see _private_helloworld method listed there.
Executing fab helloworld should print following now -
[athakur@localhost athakur]$ fab helloworld
Hello World
Private hello World
Done.
Hello World
Private hello World
Done.
Note : The fab tool simply imports your fabfile and executes the function or functions you instruct it to. There’s nothing magic about it – anything you can do in a normal Python script can be done in a fabfile!
Fabfile discovery
Fabric is capable of loading Python modules (e.g. fabfile.py) or packages (e.g. a fabfile/ directory containing an __init__.py). By default, it looks for something named (to Python’s import machinery) fabfile - so either fabfile/ or fabfile.py.
The fabfile discovery algorithm searches in the invoking user’s current
working directory or any parent directories. Thus, it is oriented around
“project” use, where one keeps e.g. a fabfile.py at the root of a
source code tree. Such a fabfile will then be discovered no matter where
in the tree the user invokes fab.
Fabric Tasks with arguments
Put the following content in fabfile.py
def helloworld(name="Aniket"): """This is a test hello world fab method. Syntax : fab helloworld:name=<your name>""" print("Hello World from %s!" %name) _private_helloworld() def _private_helloworld(): """ This is private method and should not be listed with fab -l""" print("Private hello World")
and run
- fab helloworld
[athakur@localhost athakur]$ fab helloworld
Hello World from Aniket!
Private hello World
Done.
Or you can execute by giving name argument as
- fab helloworld:name="John" or simply
- fab helloworld:"John"
and you should get output as
[athakur@localhost athakur]$ fab helloworld:"John"
Hello World from John!
Private hello World
Done.
Hello World from John!
Private hello World
Done.
Running fabric tasks on other machines
Replace your fabfile with following contents :
from fabric.api import run def host_name(): run('uname -a')
and then run it. You should br prompted for hostname and then password for the user you are already logged in as.
[athakur@localhost athakur]$ fab host_name
No hosts found. Please specify (single) host string for connection: localhost
[localhost] run: uname -a
[localhost] Login password for 'athakur':
[localhost] out: Linux localhost 2.6.32-504.8.1.el6.x86_64 #1 SMP Wed Jan 28 21:11:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Done.
Disconnecting from localhost... done.
No hosts found. Please specify (single) host string for connection: localhost
[localhost] run: uname -a
[localhost] Login password for 'athakur':
[localhost] out: Linux localhost 2.6.32-504.8.1.el6.x86_64 #1 SMP Wed Jan 28 21:11:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Done.
Disconnecting from localhost... done.
Troubleshooting
In Windows while installing Fabric you may get following error -
building 'Crypto.Random.OSRNG.winrandom' extension
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath
error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat).
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath
error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat).
If you get this you will have to install Microsoft Visual C++ compiler. See Stack overflow answers in the 1st link of related Sections. This is windows specific issue. If you are using Linux this should not occur.
Or You can install MinGW (Minimalist GNU for Windows) as I did. You need to install msys package under MinGW
and add following entries in your PATH env variable.
- C:\MinGW\bin
- C:\MinGW\msys\1.0\bin [This is where you will find chmod executable]
Then run your command from normal windows command prompt.
No comments:
Post a Comment