- Update to 3.0.1
* [Bug] #2241: A typo prevented Fabric’s command runner from properly
calling its superclass stop() method, which in tandem with a related
Invoke bug meant messy or long shutdowns in many scenarios.
- Changes from 3.0.0
* [Feature]: Change the default configuration value for inline_ssh_env
from False to True, to better align with the practicalities of common
SSH server configurations.
- Warning
This change is backwards incompatible if you were using
environment-variable-setting kwargs or config settings,
such as Connection.run(command, env={'SOME': 'ENV VARS'}),
and were not already explicitly specifying the value of inline_ssh_env.
* [Bug] #1981: (fixed in #2195) Automatically close any open SFTP session
during fabric.connection.Connection.close; this avoids issues encountered
upon re-opening a previously-closed connection object.
* [Support]: Drop support for Python <3.6, including Python 2.
- Warning
This is a backwards incompatible change if you are not yet on
Python 3.6 or above; however, pip shouldn’t offer you this
version of Fabric as long as your pip version understands
python_requires metadata.
- Drop remove-mock.patch because now in upstream.
- Drop remove-pathlib2.patch because now in upstream.
OBS-URL: https://build.opensuse.org/request/show/1096368
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=83
* Add ~fabric.connection.Connection.shell, a belated port of the v1
open_shell() feature.
* Forward local terminal resizes to the remote end, when applicable.
(For the technical: this means we now turn SIGWINCH into SSH
window-change messages.)
* Update ~fabric.connection.Connection temporarily so that it doesn't
incidentally apply replace_env=True to local shell commands, only
remote ones.
- Add patch remove-mock.patch:
* Use unittest.mock, instead of mock
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=73
- Update to 2.6.0:
* [Feature] #1999: Add sudo support to Group. Thanks to Bonnie Hardin for
the report and to Winston Nolan for an early patchset.
* [Feature] #1810: Add put/get support to Group.
* [Feature] #1868: Ported a feature from v1: interpolating the local path
argument in Transfer.get with connection and remote filepath attributes.
For example, cxn.get(remote="/var/log/foo.log", local="{host}/") is now
feasible for storing a file in per-host-named directories or files, and
in fact Group.get does this by default.
* [Feature]: When the local path argument to Transfer.get contains nonexistent
directories, they are now created instead of raising an error.
Warning: This change introduces a new runtime dependency: pathlib2.
* [Bug]: Fix a handful of issues in the handling and mocking of SFTP local paths
and os.path members within fabric.testing; this should remove some occasional
“useless Mocks” as well as hewing closer to the real behavior of things like
os.path.abspath re: path normalization.
- Update Requires from setup.py
OBS-URL: https://build.opensuse.org/request/show/911821
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=69
* [Feature] #1989: Reinstate command timeouts, by supporting the
implementation of that feature in Invoke
* [Feature]: Allow specifying connection timeouts
* [Feature] #1985: Add support for explicitly closing remote subprocess’
stdin when local stdin sees an EOF, by implementing a new command-runner
method recently added to Invoke; this prevents remote programs that
‘follow’ stdin from blocking forever.
* [Bug]: Anonymous/’remainder’ subprocess execution (eg fab -H host --
command, as opposed to the use of Connection.run inside tasks)
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=61
- Version update to 2.4.0:
* [Feature] #1709: Add Group.close to allow closing an entire group’s
worth of connections at once. Patch via Johannes Löthberg.
* [Feature] #1780: Add context manager behavior to Group, to match
the same feature in Connection. Feature request by István Sárándi.
* [Feature] #1849: Add Connection.from_v1 (and Config.from_v1) for
easy creation of modern Connection/Config objects from the currently
configured Fabric 1.x environment. Should make upgrading piecemeal
much easier for many use cases.
- additional changes from version 2.3.2:
* [Bug] #1852: Grant internal Connection objects created during
ProxyJump based gateways/proxies a copy of the outer Connection’s
configuration object. This was not previously done, which among
other things meant one could not fully disable SSH config file
loading (as the internal Connection objects would revert to the
default behavior). Thanks to Chris Adams for the report.
* [Bug]: Some debug logging was reusing Invoke’s logger object,
generating log messages “named” after invoke instead of fabric.
This has been fixed by using Fabric’s own logger everywhere instead.
* [Bug] #1850: Skip over ProxyJump configuration directives in SSH
config data when they would cause self-referential RecursionError
(e.g. due to wildcard-using Host stanzas which include the jump
server itself). Reported by Chris Adams.
* [Bug]: Fix a bug preventing tab completion (using the Invoke-level
--complete flag) from completing task names correctly (behavior was
to act as if there were never any tasks present, even if there was
a valid fabfile nearby).
- Add sed expresion to spec file to remove all vendoring from imports
- Run testsuite using the new %pytest macro
OBS-URL: https://build.opensuse.org/request/show/692485
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=58
- update to version 1.10.2:
* Fix issue with ssh/config not having a cross-platform default path.
* Recursively unwrap decorators instead of only unwrapping a single
decorator level, when obtaining task docstrings.
* Fix “NameError: free variable referenced before assignment in
enclosing scope”.
* Redirect output of cd to /dev/null so users enabling bash’s
CDPATH (or similar features in other shells) don’t have polluted
output captures.
* Fix a couple minor issues with the operation of & demo code for
the JobQueue class.
* Update functionality added in #1213 so abort error messages don’t
get printed twice (once by us, once by sys.exit) but the annotated
exception error message is retained.
OBS-URL: https://build.opensuse.org/request/show/360172
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=48
+ [Feature] #925: Added contrib.files.is_link. Thanks to @jtangas for the patch.
+ [Feature] #922: Task argument strings are now displayed when using fab -d. Thanks to Kevin Qiu for the patch.
+ [Bug] #912: Leaving template_dir un-specified when using upload_template in Jinja mode used to cause 'NoneType' has no attribute 'startswith' errors. This has been fixed. Thanks to Erick Yellott for catch & to Erick Yellott + Kevin Williams for patches.
+ [Feature] #924: Add new env var option colorize_errors to enable coloring errors and warnings. Thanks to Aaron Meurer for the patch.
+ [Bug] #593: Non-ASCII character sets in Jinja templates rendered within upload_template would cause UnicodeDecodeError when uploaded. This has been addressed by encoding as utf-8 prior to upload. Thanks to Sébastien Fievet for the catch.
+ [Feature] #908: Support loading SSH keys from memory. Thanks to Caleb Groom for the patch.
+ [Bug] #171: Added missing cross-references from env variables documentation to corresponding command-line options. Thanks to Daniel D. Beck for the contribution.
+ [Bug] #884: The password cache feature was not working correctly with password-requiring SSH gateway connections. That’s fixed now. Thanks to Marco Nenciarini for the catch.
+ [Feature] #826: Enable sudo extraction of compressed archive via use_sudo kwarg in upload_project. Thanks to @abec for the patch.
+ [Bug] #694: Allow users to work around ownership issues in the default remote login directory: add temp_dir kwarg for explicit specification of which “bounce” folder to use when calling put with use_sudo=True. Thanks to Devin Bayer for the report & Dieter Plaetinck / Jesse Myers for suggesting the workaround.
+ [Bug] #882: Fix a get bug regarding spaces in remote working directory names. Thanks to Chris Rose for catch & patch.
- Changes from version 1.6.1:
+ [Bug] #868: Substantial speedup of parallel tasks by removing an unnecessary blocking timeout in the JobQueue loop. Thanks to Simo Kinnunen for the patch.
+ [Bug] #328: lcd was no longer being correctly applied to upload_template; this has been fixed. Thanks to Joseph Lawson for the catch.
+ [Feature] #812: Add use_glob option to put so users trying to upload real filenames containing glob patterns (*, [ etc) can disable the default globbing behavior. Thanks to Michael McHugh for the patch.
+ [Bug] #844: Allow users to disable Fabric’s auto-escaping in run/sudo. Thanks to Christian Long and Michael McHugh for the patch.
+ [Bug] #84: Fixed problem with missing -r flag in Mac OS X sed version.
+ [Bug] #870: Changes to shell env var escaping highlighted some extraneous and now damaging whitespace in with path():. This has been removed and a regression test added.
+ [Bug] #871: Use of string mode values in put(local, remote, mode="NNNN") would sometimes cause Unsupported operand errors. This has been fixed.
+ [Bug] #84: Fixed problem with missing -r flag in Mac OS X sed version. Thanks to Konrad Hałas for the patch.
+ [Bug] #861: Gracefully handle situations where users give a single string literal to env.hosts. Thanks to Bill Tucker for catch & patch.
+ [Bug] #367: Expand paths with tilde inside (contrib.files). Thanks to Konrad Hałas for catch & patch.
+ [Feature] #845: Downstream synchronization option implemented for rsync_project. Thanks to Antonio Barrero for the patch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=40
- [Bug] #844: Account for SSH config overhaul in Paramiko 1.10
by e.g. updating treatment of IdentityFile to handle multiple
values. This and related SSH config parsing changes are
backwards incompatible; we are including them in this release
because they do fix incorrect, off-spec behavior.
- [Bug] #843: Ensure string pool_size values get run through
int() before deriving final result (stdlib min() has odd
behavior here...). Thanks to Chris Kastorff for the catch.
- [Bug] #839: Fix bug in rsync_project where IPv6 address were
not always correctly detected. Thanks to Antonio Barrero for
catch & patch.
- [Bug] #587: Warn instead of aborting when env.use_ssh_config
is True but the configured SSH conf file doesn’t exist. This
allows multi-user fabfiles to enable SSH config without causing
hard stops for users lacking SSH configs. Thanks to Rodrigo
Pimentel for the report.
- [Feature] #821: Add remote_tunnel to allow reverse SSH
tunneling (exposing locally-visible network ports to the
remote end). Thanks to Giovanni Bajo for the patch.
- [Feature] #823: Add env.remote_interrupt which controls
whether Ctrl-C is forwarded to the remote end or is captured
locally (previously, only the latter behavior was
implemented). Thanks to Geert Jansen for the patch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=38
- [Bug] #806: Force strings given to getpass during password
prompts to be ASCII, to prevent issues on some platforms when
Unicode is encountered. Thanks to Alex Louden for the patch.
- [Feature] #805: Update shell_env to play nice with Windows
(7, at least) systems. Thanks to Fernando Macedo for the patch.
- [Bug] #654: Parallel runs whose sum total of returned data was
large (e.g. large return values from the task, or simply a
large number of hosts in the host list) were causing
frustrating hangs. This has been fixed.
- [Bug] #791: Cast reboot‘s wait parameter to a numeric type in
case the caller submitted a string by mistake. Thanks to
Thomas Schreiber for the patch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=36
- [Bug] #766: Use the variable name of a new-style fabric.tasks.Task
subclass object when the object name attribute is undefined.
Thanks to @todddeluca for the patch.
- [Bug] #604: Fixed wrong treatment of backslashes in put operation
when uploading directory tree on Windows. Thanks to Jason Coombs
for the catch and @diresys & Oliver Janik for the patch. for the patch.
- [Bug] #792: The newish shell_env context manager was incorrectly
omitted from the fabric.api import endpoint. This has been
remedied. Thanks to Vishal Rana for the catch.
- [Bug] #775: Shell escaping was incorrectly applied to the value
of $PATH updates in our shell environment handling, causing
(at the very least) local binary paths to become inoperable
in certain situations. This has been fixed.
- Added current host string to prompt abort error messages.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=35
- [Feature] #684: Update how task wraps task functions to preserve
additional metadata; this allows decorated functions to play nice
with Sphinx autodoc. Thanks to Jaka Hudoklin for catch & patch.
- [Bug] #749: Gracefully work around calls to fabric.version on
systems lacking /bin/sh (which causes an OSError in
subprocess.Popen calls.)
- [Bug] #718: isinstance(foo, Bar) is used in main instead of
type(foo) == Bar in order to fix some edge cases. Thanks to
Mikhail Korobov.
- [Bug] #693: Fixed edge case where abort driven failures within
parallel tasks could result in a top level exception (a KeyError)
regarding error handling. Thanks to Marcin Kuźmiński for the report.
- [Support] #681: Fixed outdated docstring for runs_once which
claimed it would get run multiple times in parallel mode. That
behavior was fixed in an earlier release but the docs were not
updated. Thanks to Jan Brauer for the catch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=28
* [Bug] #671 reject-unknown-hosts sometimes resulted in a password
prompt instead of an abort. This has been fixed. Thanks to Roy Smith for the
report.
* [Bug] #659 Update docs to reflect that fabric.operations.local currently
honors 'env.path <env-path>'. Thanks to @floledermann for the catch.
* [Bug] #652 Show available commands when aborting on invalid command names.
* [Support] #651 Added note about nesting 'with' statements on Python 2.6+.
Thanks to Jens Rantil for the patch.
* [Bug] #649 Don't swallow non-`abort`-driven exceptions in parallel mode.
Fabric correctly printed such exceptions, and returned them from
fabric.tasks.execute, but did not actually cause the child or parent
processes to halt with a nonzero status. This has been fixed.
fabric.tasks.execute now also honors env.warn_only <warn-only> so
users may still opt to call it by hand and inspect the returned exceptions,
instead of encountering a hard stop. Thanks to Matt Robenolt for the catch.
* [Support] #645 Update Sphinx docs to work well when run out of a source
tarball as opposed to a Git checkout. Thanks again to @Arfrever for the
catch.
* [Support] #640 (also #644) Update packaging manifest so sdist
tarballs include all necessary test & doc files. Thanks to Mike Gilbert and
@Arfrever for catch & patch.
* [Support] #634 Clarified that fabric.context_managers.lcd does no special
handling re: the user's current working directory, and thus relative paths
given to it will be relative to os.getcwd(). Thanks to @techtonik
for the catch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=26
- [Bug] #562: Agent forwarding would error out or freeze when
multiple uses of the forwarded agent were used per remote
invocation (e.g. a single run command resulting in multiple Git
or SVN checkouts.) This has been fixed thanks to Steven
McDonald and GitHub user @lynxis.
- [Support] #626: Clarity updates to the tutorial. Thanks to
GitHub user m4z for the patches.
- [Bug] #625: hide/show did not correctly restore prior display
settings if an exception was raised inside the block. This has
been fixed.
- [Bug] #624: Login password prompts did not always display the
username being authenticated for. This has been fixed. Thanks
to Nick Zalutskiy for catch & patch.
- [Bug] #617: Fix the clean_revert behavior of settings so it
doesn’t KeyError for newly created settings keys. Thanks to
Chris Streeter for the catch.
- [Bug] #616: Add port number to the error message displayed upon
connection failures.
- [Bug] #609: (and #564) Document and clean up env.sudo_prefix so
it can be more easily modified by users facing uncommon use
cases. Thanks to GitHub users 3point2 for the cleanup and
SirScott for the documentation catch.
- [Bug] #610: Change detection of env.key_filename‘s type
(added as part of SSH config support in 1.4) so it supports
arbitrary iterables. Thanks to Brandon Rhodes for the catch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=24
* Add ``capture`` kwarg to `~fabric.contrib.project.rsync_project`
to aid in debugging rsync problems.
* Allow `~fabric.operations.local` to display stdout/stderr when it
warns/aborts, if it was capturing them.
* Added :ref:`an FAQ entry <init-scripts-pty>` detailing how to
handle init scripts which misbehave when a pseudo-tty is allocated.
* `~fabric.tasks.execute` allowed too much of its internal state
changes (to variables such as ``env.host_string`` and ``env.parallel``) to
persist after execution completed; this caused a number of different
incorrect behaviors. `~fabric.tasks.execute` has been overhauled to clean up
its own state changes -- while preserving any state changes made by the task
being executed.
* `~fabric.contrib.project.upload_project` did not take explicit
remote directory location into account when untarring, and now uses
`~fabric.context_managers.cd` to address this. Thanks to Ben Burry for the
patch.
* `~fabric.decorators.with_settings` did not perfectly match
`~fabric.context_managers.settings`, re: ability to inline additional context
managers. This has been corrected. Thanks to Rory Geoghegan for the patch.
* `contrib.files.first <fabric.contrib.files.first>` used an
outdated function signature in its wrapped `~fabric.contrib.files.exists`
call. This has been fixed. Thanks to Massimiliano Torromeo for catch & patch.
* `--list <-l>` output now detects terminal window size
and truncates (or doesn't truncate) accordingly. Thanks to Horacio G. de Oro
for the initial pull request.
* Parallel task aborts (as oppposed to unhandled exceptions) now
correctly print their abort messages instead of tracebacks, and cause the
parent process to exit with the correct (nonzero) return code. Thanks to Ian
Langworth for the catch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=22
* 🐛495 Fixed documentation example showing how to subclass
~fabric.tasks.Task. Thanks to Brett Haydon for the catch and Mark Merritt
for the patch.
* 🐛410 Fixed a bug where using the ~fabric.decorators.task decorator
inside/under another decorator such as ~fabric.decorators.hosts could cause
that task to become invalid when invoked by name (due to how old-style vs
new-style tasks are detected.) Thanks to Dan Colish for the initial patch.
* :feature:559 ~fabric.contrib.project.rsync_project now allows users to
append extra SSH-specific arguments to rsync's --rsh flag.
* :feature:138 :ref:env.port <port> may now be written to at fabfile module
level to set a default nonstandard port number. Previously this value was
* :feature:3 Fabric can now load a subset of SSH config functionality
directly from your local ~/.ssh/config if :ref:env.use_ssh_config
<use-ssh-config> is set to True. See :ref:ssh-config for details.
Thanks to Kirill Pinchuk for the initial patch.
* :feature:12 Added the ability to try connecting multiple times to
temporarily-down remote systems, instead of immediately failing. (Default
behavior is still to only try once.) See :ref:env.timeout <timeout> and
:ref:env.connection_attempts <connection-attempts> for controlling both
connection timeouts and total number of attempts. ~fabric.operations.reboot
has also been overhauled (but practically deprecated -- see its updated
docs.)
* :feature:474 ~fabric.tasks.execute now allows you to access the executed
task's return values, by itself returning a dictionary whose keys are the
* 🐛487 Overhauled the regular expression escaping performed in
~fabric.contrib.files.append and ~fabric.contrib.files.contains to try
and handle more corner cases. Thanks to Neilen Marais for the patch.
* :support:532 Reorganized and cleaned up the output of fab --help.
* :feature:8 Added :option:--skip-bad-hosts/:ref:env.skip_bad_hosts
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=17
- [Bug] #495: Fixed documentation example showing how to subclass Task.
Thanks to Brett Haydon for the catch and Mark Merritt for the patch.
- [Bug] #410: Fixed a bug where using the task decorator inside/under
another decorator such as hosts could cause that task to become invalid
when invoked by name (due to how old-style vs new-style tasks are
detected.) Thanks to Dan Colish for the initial patch.
- [Feature] #559: rsync_project now allows users to append extra
SSH-specific arguments to rsync‘s --rsh flag.
- [Feature] #138: env.port may now be written to at fabfile module level
to set a default nonstandard port number. Previously this value was
read-only.
- [Feature] #3: Fabric can now load a subset of SSH config functionality
directly from your local ~/.ssh/config if env.use_ssh_config is set
to True. See Leveraging native SSH config files for details. Thanks
to Kirill Pinchuk for the initial patch.
- [Feature] #12: Added the ability to try connecting multiple times to
temporarily-down remote systems, instead of immediately failing.
(Default behavior is still to only try once.) See env.timeout and
env.connection_attempts for controlling both connection timeouts and
total number of attempts. reboot has also been overhauled (but
practically deprecated – see its updated docs.)
- [Feature] #474: execute now allows you to access the executed task’s
return values, by itself returning a dictionary whose keys are the
host strings executed against.
- [Bug] #487: Overhauled the regular expression escaping performed in
append and contains to try and handle more corner cases. Thanks to
Neilen Marais for the patch.
- [Support] #532: Reorganized and cleaned up the output of fab --help.
- [Feature] #8: Added --skip-bad-hosts/env.skip_bad_hosts option to
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=14
- [Bug] #492: @parallel did not automatically trigger linewise
output, as was intended. This has been fixed. Thanks to Brandon
Huey for the catch.
- [Bug] #510: Parallel mode is incompatible with user input, such
as password/hostname prompts, and was causing cryptic Operation
not supported by device errors when such prompts needed to be
displayed. This behavior has been updated to cleanly and obviously
abort instead.
- [Bug] #494: Fixed regression bug affecting some env values such
as env.port under parallel mode. Symptoms included rsync_project
bailing out due to a None port value when run under @parallel.
Thanks to Rob Terhaar for the report.
- [Bug] #339: Don’t show imported colors members in --list output.
Thanks to Nick Trew for the report.
- Update to 1.3.3:
- [Bug] #441: Specifying a task module as a task on the command
line no longer blows up but presents the usual “no task by that
name” error message instead. Thanks to Mitchell Hashimoto for
the catch.
- [Bug] #475: Allow escaping of equals signs in per-task args/kwargs.
- [Bug] #450: Improve traceback display when handling
``ImportError``s for dependencies. Thanks to David Wolever for the patches.
- [Bug] #446: Add QNX to list of secondary-case sed targets.
Thanks to Rodrigo Madruga for the tip.
- [Bug] #443: exists didn’t expand tildes; now it does. Thanks to
Riccardo Magliocchetti for the patch.
- [Bug] #437: with_settings now correctly preserves the wrapped
function’s docstring and other attributes. Thanks to Eric Buckley for the catch and Luke Plant for the patch.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=13
- 2011-07-12: released Fabric 1.2.0
- [Feature] #22: Enhanced @task to add aliasing, per-module default
tasks, and control over the wrapping task class. Thanks to Travis
Swicegood for the initial work and collaboration.
- [Bug] #380: Improved unicode support when testing objects for being
string-like. Thanks to Jiri Barton for catch & patch.
- [Support] #382: Experimental overhaul of changelog formatting &
process to make supporting multiple lines of development less of a
hassle.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=4
- Now BuildRequires and Requires python-distribute instead of
python-setuptools.
- Update to 1.0.1:
- #301: Fixed a bug in local‘s behavior when capture=False and
output.stdout (or .stderr) was also False. Thanks to Chris Rose
for the catch.
- #310: Update edge case in put where using the mode kwarg
alongside use_sudo=True runs a hidden sudo command. The mode
kwarg needs to be octal but was being interpolated in the sudo
call as a string/integer. Thanks to Adam Ernst for the catch
and suggested fix.
- #311: append was supposed to have its partial kwarg’s default
flipped from True to False. However, only the documentation was
altered. This has been fixed. Thanks to Adam Ernst for bringing
it to our attention.
- #312: Tweak internal I/O related loops to prevent high CPU
usage and poor screen-printing behavior on some systems. Thanks
to Kirill Pinchuk for the initial patch.
- #320: Some users reported problems with dropped input,
particularly while entering sudo passwords. This was fixed via
the same change as for #312.
- Regenerate spec file with py2pack;
- Add README file as documentation.
- Update to 1.0.0:
- #7: run/sudo now allow full interactivity with the remote end.
You can interact with remote prompts and similar interfaces,
making certain tasks much easier, and freeing you from the
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-Fabric?expand=0&rev=2