Skip to content
forked from mathiasertl/fabric

Simple, Pythonic remote execution and deployment. (Python 2.7/3.4+ fork)

License

Notifications You must be signed in to change notification settings

cruncher/fabric

This branch is 2 commits ahead of mathiasertl/fabric:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Mar 27, 2024
2008803 · Mar 27, 2024
Apr 12, 2022
Feb 11, 2018
Aug 25, 2017
Feb 11, 2018
Feb 25, 2017
Feb 6, 2017
Aug 11, 2014
Apr 7, 2016
Apr 13, 2014
Aug 4, 2014
Jan 1, 2017
Apr 7, 2014
Jul 20, 2019
Aug 6, 2016
Aug 22, 2016
Dec 19, 2016
Aug 22, 2016
Mar 27, 2024
Dec 5, 2016

Repository files navigation

DEPRECRECATED

The excellent Fabric now finally supports Python3, there is thus no longer a use for this project. Please use mainline Fabric instead.

No really, deprecated

Read above.

What it said here before

Fabric3 is a Python (2.7 or 3.4+) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks. This is a fork of the original Fabric (git) with the intention of providing support for Python3, while maintaining support for all non-archaic versions of Python2. Please see below for known differences with the upstream version of Fabric. To switch to Fabric3, simply do:

pip uninstall Fabric
pip install Fabric3

... and don't forget to update any requirements.txt files accordingly:

# Fabric==1.12.0
Fabric3==1.12.0.post1

It provides a basic suite of operations for executing local or remote shell commands (normally or via sudo) and uploading/downloading files, as well as auxiliary functionality such as prompting the running user for input, or aborting execution.

Typical use involves creating a Python module containing one or more functions, then executing them via the fab command-line tool. Below is a small but complete "fabfile" containing a single task:

from fabric.api import run

def host_type():
    run('uname -s')

If you save the above as fabfile.py (the default module that fab loads), you can run the tasks defined in it on one or more servers, like so:

$ fab -H localhost,linuxbox host_type
[localhost] run: uname -s
[localhost] out: Darwin
[linuxbox] run: uname -s
[linuxbox] out: Linux

Done.
Disconnecting from localhost... done.
Disconnecting from linuxbox... done.

In addition to use via the fab tool, Fabric3's components may be imported into other Python code, providing a Pythonic interface to the SSH protocol suite at a higher level than that provided by e.g. the Paramiko library (which Fabric3 itself uses.)

Differences with Fabric

Generally this project aims to be a drop-in replacement for Fabric and will periodically merge any changes from the upstream project. Any differences are noted here:

  • The release installs as Fabric3. Despite its name, this version is tested with Python2.7 and Python 3.4+.
  • Versioning is based on upstream Fabric releases, with a postX appended. So version "1.12.0.post1" is equivalent to Fabrics own "1.12.0" release.
  • fabric.utils.RingBuffer is removed, use collections.deque from the standard library instead.
  • In Python3, Fabric3 implements its own version of contextlib.nested based on contextlib.ExitStack, since it's no longer available in Python3. Please note that it was removed with good reason, we do not encourage you use it.
  • Fabric3 requires the six library for compatibility.
  • Minimum requirements for paramiko have been bumped to 1.17.0.

ChangeLog

This ChangeLog lists changes other then that of the upstream Fabric release.

1.12.0.post1
  • Sync with 1.12.0 upstream release.
  • Fix prompts in Python3.5 (see #18)
1.11.1.post1
  • Require paramiko 1.17.0 or later.
1.10.2.post2 (2016-01-31)
  • Identify as Fabric3 on the command-line (#4).
  • Fix UnicodeDecodeError when receiving remote data (#5).
  • Require paramiko 1.16.0.
1.10.2.post3 (2016-02-07)
  • Cleanup imports in main code base and test suite.
  • Add Python 2/3/3.5 classifiers in setup.py.
  • Remove fabric.utils.RingBuffer with collections.deque from stdlib.
  • Remove with_statement __future__ import, it does nothing in Python 2.6+.

About

Simple, Pythonic remote execution and deployment. (Python 2.7/3.4+ fork)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%