Changelog (1.x)¶
Note
This is the changelog for the legacy 1.x version of Fabric. For the current (2.0+) changelog, please see the main changelog.
1.15.0 2022-04-07
[Support]: Update packaging metadata so wheel archives include the
LICENSE
file.[Support]: Merge the longstanding
fabric3
fork back into our v1 branch so users who’d rather port Fabric 1.x code to Python 3 before upgrading to Fabric 2.x, are able to do so in a “blessed” manner.This change includes making sure that the delta between the fork and our v1 branch still functions correctly & passes tests on both interpreters. It also includes a basic CircleCI configuration to test on 3.6, 3.7 and 3.8, not that we expect to be hosting many future commits on this side…
Major major thanks to Mathias Ertl for his work on the fork, all the contributors on his side of the house during that time, and to Zachary Vance for getting the reconciliation process rolling.
The changes folded in as part of this work (mostly taken from Mathias’ changelog) are as follows:
Installation now requires Paramiko 1.17.0 or later.
Fix
UnicodeDecodeError
when receiving remote data.Clean up imports in main code base and test suite.
Add Python 2/3/3.5 classifiers in
setup.py
.Replace
fabric.utils.RingBuffer
withcollections.deque
from stdlib.Under Python 3, Fabric implements its own version of
contextlib.nested
based oncontextlib.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.
1.14.1 2018-11-27
[Bug] #983: Move a
getpass
import inside a Windows-orientedtry
/except ImportError
so password prompting is less likely to explode on certain systems. Thanks to@dongweiming
for the patch.[Bug] #1227: Remove a bash/zsh-ism from
upload_template
when backing up the target file, preventing issues on simpler remote shells. Patch courtesy of Paul Chakravarti.[Bug] #1242: (via #1243)
rsync_project
: only supply the-p <number>
option to generatedrsync
commands when the port number differs from the default; this allows removing--rsh
entirely most of the time, and thus enables things like using rsync’s daemon mode on the remote end. Reported & patched by Arnaud Rocher.[Bug] #1341: (via #1586) Attempt to
rm -f
the temporary file used byput
’s sudo mode, when exceptions are encountered; previously, the internalsudo mv
call could potentially fail and leave the file around. Thanks to Andrei Sura for the report and Uku Loskit for the fix.[Support]: Update packaging metadata so wheel archives include the
LICENSE
file.
1.14.0 2017-08-25
[Feature] #1475: Honor
env.timeout
when opening new remote sessions (as opposed to the initial overall connection, which already honored timeout settings.) Thanks to@EugeniuZ
for the report &@jrmsgit
for the first draft of the patch.Note
This feature only works with Paramiko 1.14.3 and above; if your Paramiko version is older, no timeout can be set, and the previous behavior will occur instead.
[Support] #1539: Add documentation for
env.output_prefix
. Thanks@jphalip
.[Support] #1416: Add explicit “Python 2 only” note to
setup.py
trove classifiers to help signal that fact to various info-gathering tools. Patch courtesy of Gavin Bisesi.[Support]: Backport #1462 to 1.12.x (was previously only backported to 1.13.x.)
[Support] #1590: Replace a reference to
fab
in a test subprocess, to use thepython -m <package>
style instead; this allowspython setup.py test
to run the test suite without having Fabric already installed. Thanks to@BenSturmfels
for catch & patch.[Support] #1065: Fix incorrect SSH config reference in the docs for
env.keepalive
; it corresponds toServerAliveInterval
, notClientAliveInterval
. Credit: Harry Percival.
1.13.2 2017-04-24
[Bug] #1514: Compatibility with Python 2.5 was broken by using the
format()
method of a string (only in 1.11+). Report by@pedrudehuere
.[Bug] #1526: Disable use of PTY and shell for a background command execution within
contrib.sed
, preventing a small class of issues on some platforms/environments. Thanks to@doflink
for the report and Pierce Lopez for the final patch.[Bug] #1574:
upload_project
failed for folder in current directory specified without any path separator. Thanks@aidanmelen
for the report and Pierce Lopez for the patch.[Bug] #1294: fix text escaping for
contains
andappend
which would fail if the text contained e.g.>
. Thanks to@ecksun
for report & Pierce Lopez for the patch.[Bug] #1427: (via #1428) Locate
.pyc
files when searching for fabfiles to load; previously we only used the presence of.py
files to determine whether loading should be attempted. Credit: Ray Chen.[Bug] #1555: Multiple simultaneous
get
and/orput
withuse_sudo=True
and for the same remote host and path could fail unnecessarily. Thanks@arnimarj
for the report and Pierce Lopez for the patch.[Bug] #1542: (via #1543) Catch Paramiko-level gateway connection errors (
ChannelError
) when raisingNetworkError
; this prevents an issue where gateway related issues were being treated as authentication errors. Thanks to Charlie Stanley for catch & patch.[Support] #1539: Add documentation for
env.output_prefix
. Thanks@jphalip
.[Support] #1416: Add explicit “Python 2 only” note to
setup.py
trove classifiers to help signal that fact to various info-gathering tools. Patch courtesy of Gavin Bisesi.[Support]: Backport #1462 to 1.12.x (was previously only backported to 1.13.x.)
[Support] #1590: Replace a reference to
fab
in a test subprocess, to use thepython -m <package>
style instead; this allowspython setup.py test
to run the test suite without having Fabric already installed. Thanks to@BenSturmfels
for catch & patch.[Support] #1065: Fix incorrect SSH config reference in the docs for
env.keepalive
; it corresponds toServerAliveInterval
, notClientAliveInterval
. Credit: Harry Percival.
1.12.2 2017-04-24
[Bug] #1462: Make a PyCrypto-specific import and method call optional to avoid
ImportError
problems under Paramiko 2.x. Thanks to Alex Gaynor for catch & patch![Bug] #1514: Compatibility with Python 2.5 was broken by using the
format()
method of a string (only in 1.11+). Report by@pedrudehuere
.[Bug] #1526: Disable use of PTY and shell for a background command execution within
contrib.sed
, preventing a small class of issues on some platforms/environments. Thanks to@doflink
for the report and Pierce Lopez for the final patch.[Bug] #1574:
upload_project
failed for folder in current directory specified without any path separator. Thanks@aidanmelen
for the report and Pierce Lopez for the patch.[Bug] #1294: fix text escaping for
contains
andappend
which would fail if the text contained e.g.>
. Thanks to@ecksun
for report & Pierce Lopez for the patch.[Bug] #1427: (via #1428) Locate
.pyc
files when searching for fabfiles to load; previously we only used the presence of.py
files to determine whether loading should be attempted. Credit: Ray Chen.[Bug] #1555: Multiple simultaneous
get
and/orput
withuse_sudo=True
and for the same remote host and path could fail unnecessarily. Thanks@arnimarj
for the report and Pierce Lopez for the patch.[Bug] #1542: (via #1543) Catch Paramiko-level gateway connection errors (
ChannelError
) when raisingNetworkError
; this prevents an issue where gateway related issues were being treated as authentication errors. Thanks to Charlie Stanley for catch & patch.[Support] #1539: Add documentation for
env.output_prefix
. Thanks@jphalip
.[Support] #1416: Add explicit “Python 2 only” note to
setup.py
trove classifiers to help signal that fact to various info-gathering tools. Patch courtesy of Gavin Bisesi.[Support]: Backport #1462 to 1.12.x (was previously only backported to 1.13.x.)
[Support] #1590: Replace a reference to
fab
in a test subprocess, to use thepython -m <package>
style instead; this allowspython setup.py test
to run the test suite without having Fabric already installed. Thanks to@BenSturmfels
for catch & patch.[Support] #1065: Fix incorrect SSH config reference in the docs for
env.keepalive
; it corresponds toServerAliveInterval
, notClientAliveInterval
. Credit: Harry Percival.
1.13.1 2016-12-09
[Bug] #1462: Make a PyCrypto-specific import and method call optional to avoid
ImportError
problems under Paramiko 2.x. Thanks to Alex Gaynor for catch & patch!
1.13.0 2016-12-09
[Feature] #1495: Update the internals of
fabric.contrib.files
so its members work with SSH servers running on Windows. Thanks to Hamdi Sahloul for the patch.[Support] #1379: (also #1464) Clean up a lot of unused imports and similar cruft (many found via
flake8 --select E4
). Thanks to Mathias Ertl for the original patches.[Support] #1483: (also re: #1386, #1374, #1300) Add an FAQ about quote problems in remote
csh
causing issues with Fabric’s shell-wrapping and quote-escaping. Thanks to Michael Radziej for the update.[Support] #1461: Update setup requirements to allow Paramiko 2.x, now that it’s stable and been out in the wild for some time. Paramiko 1.x still works like it always did; the only change to Paramiko 2 was the backend moving from PyCrypto to Cryptography.
Warning
If you are upgrading an existing environment, the install dependencies have changed; please see Paramiko’s installation docs for details: http://www.paramiko.org/installing.html
1.12.1 2016-12-05
[Bug] #1458: Detect
known_hosts
-related instances ofparamiko.SSHException
and prevent them from being handled like authentication errors (which is the default behavior). This fixes issues with incorrect password prompts or prompt-related exceptions when usingreject_unknown_hosts
and encountering missing or badknown_hosts
entries. Thanks to Lukáš Doktor for catch & patch.[Bug] #1470: When using
fabric.operations.get
with glob expressions, a lack of matches for the glob would result in an empty file named after the glob expression (in addition to raising an error). This has been fixed so the empty file is no longer generated. Thanks to Georgy Kibardin for the catch & initial patch.[Support] #1379: (also #1464) Clean up a lot of unused imports and similar cruft (many found via
flake8 --select E4
). Thanks to Mathias Ertl for the original patches.[Support] #1483: (also re: #1386, #1374, #1300) Add an FAQ about quote problems in remote
csh
causing issues with Fabric’s shell-wrapping and quote-escaping. Thanks to Michael Radziej for the update.
1.11.3 2016-12-05
[Bug] #1458: Detect
known_hosts
-related instances ofparamiko.SSHException
and prevent them from being handled like authentication errors (which is the default behavior). This fixes issues with incorrect password prompts or prompt-related exceptions when usingreject_unknown_hosts
and encountering missing or badknown_hosts
entries. Thanks to Lukáš Doktor for catch & patch.[Bug] #1470: When using
fabric.operations.get
with glob expressions, a lack of matches for the glob would result in an empty file named after the glob expression (in addition to raising an error). This has been fixed so the empty file is no longer generated. Thanks to Georgy Kibardin for the catch & initial patch.[Support] #1379: (also #1464) Clean up a lot of unused imports and similar cruft (many found via
flake8 --select E4
). Thanks to Mathias Ertl for the original patches.[Support] #1483: (also re: #1386, #1374, #1300) Add an FAQ about quote problems in remote
csh
causing issues with Fabric’s shell-wrapping and quote-escaping. Thanks to Michael Radziej for the update.
1.10.5 2016-12-05
[Bug] #1458: Detect
known_hosts
-related instances ofparamiko.SSHException
and prevent them from being handled like authentication errors (which is the default behavior). This fixes issues with incorrect password prompts or prompt-related exceptions when usingreject_unknown_hosts
and encountering missing or badknown_hosts
entries. Thanks to Lukáš Doktor for catch & patch.[Bug] #1470: When using
fabric.operations.get
with glob expressions, a lack of matches for the glob would result in an empty file named after the glob expression (in addition to raising an error). This has been fixed so the empty file is no longer generated. Thanks to Georgy Kibardin for the catch & initial patch.[Support] #1379: (also #1464) Clean up a lot of unused imports and similar cruft (many found via
flake8 --select E4
). Thanks to Mathias Ertl for the original patches.[Support] #1483: (also re: #1386, #1374, #1300) Add an FAQ about quote problems in remote
csh
causing issues with Fabric’s shell-wrapping and quote-escaping. Thanks to Michael Radziej for the update.
1.12.0 2016-07-25
[Feature] #1491: Implement
sudo
-specific password caching. This can be used to work around issues where over-eager submission ofenv.password
at login time causes authentication problems (e.g. during two-factor auth).
1.11.2 2016-07-25
[Bug] #1447: Fix a relative import in
fabric.network
to be correctly/consistently absolute instead. Thanks to@bildzeitung
for catch & patch.
1.10.4 2016-07-25
[Bug] #1447: Fix a relative import in
fabric.network
to be correctly/consistently absolute instead. Thanks to@bildzeitung
for catch & patch.
1.11.1 2016-04-09
[Bug]: Bumped version to
1.11.1
due to apparently accidentally uploading a false1.11.0
to PyPI sometime in the past (PyPI is secure & prevents reusing deleted filenames.) We have no memory of this, but databases don’t lie!
1.11.0 2016-04-09
[Feature] #1200: Introduced
exceptions
output level, so users don’t have to deal with the debug output just to see tracebacks.[Feature] #1388: Expose Jinja’s
keep_trailing_newline
parameter infabric.contrib.files.upload_template
so users can force template renders to preserve trailing newlines. Thanks to Chen Lei for the patch.[Feature] #1326: Make
fabric.contrib.project.rsync_project
aware ofenv.gateway
, using aProxyCommand
under the hood. Credit: David Rasch.[Feature] #1271: Allow users whose fabfiles use
fabric.colors
to disable colorization at runtime by specifyingFABRIC_DISABLE_COLORS=1
(or any other non-empty value). Credit: Eric Berg.[Feature] #1261: Expose Paramiko’s Kerberos functionality as Fabric config vars & command-line options. Thanks to Ramanan Sivaranjan for catch & patch, and to Johannes Löthberg & Michael Bennett for additional testing.
[Feature] #932: Add a
temp_dir
kwarg tofabric.contrib.files.upload_template
which is passed into its innerfabric.operations.put
call. Thanks to@nburlett
for the patch.[Feature] #1161: Add
use_sudo
kwarg tofabric.operations.reboot
. Credit: Bryce Verdier.[Feature] #800: Add
capture_buffer_size
kwarg tofabric.operations.run
/fabric.operations.sudo
so users can limit memory usage in situations where subprocesses generate very large amounts of stdout/err. Thanks to Jordan Starcher for the report & Omri Bahumi for an early version of the patchset.[Feature] #1203: (via #1240) Add a
case_sensitive
kwarg tofabric.contrib.files.contains
(which toggles use ofegrep -i
). Report by@xoul
, patch by Curtis Mattoon.[Bug] #1389: Gently overhaul SSH port derivation so it’s less surprising; previously, any non-default value stored in
env.port
was overriding all SSH-config derived values. See the API docs forfabric.network.normalize
for details on how it now behaves. Thanks to Harry Weppner for catch & patch.[Support] #1229: Add some missing API doc hyperlink references. Thanks to Tony Narlock.
[Support] #958: Remove the Git SHA portion of our version string generation; it was rarely useful & occasionally caused issues for users with non-Git-based source checkouts.
[Support] #1213: Add useful exception message to the implicit
SystemExit
raised by Fabric’s use ofsys.exit
inside thefabric.api.abort
function. This allows client code catchingSystemExit
to have better introspection into the error. Thanks to Ioannis Panousis.[Support] #1239: Update README to work better under raw docutils so the example code block is highlighted as Python on PyPI (and not just on our Sphinx-driven website). Thanks to Marc Abramowitz.
[Support] #1325: Clarify
fabric.operations.put
docs re: themode
argument. Thanks to@mjmare
for the catch.[Support] #1454: Remove use of
:option:
directives in the changelog, it’s currently broken in modern Sphinx & doesn’t seem to have actually functioned on Renaissance-era Sphinx either.[Support] #1359: Add a more-visible top-level
CHANGELOG.rst
pointing users to the actual changelog stored within the Sphinx directory tree. Thanks to Jonathan Vanasco for catch & patch.[Support] #1257: Add notes to the usage docs for
fab
regarding the program’s exit status. Credit:@koalaman
.[Support] #943: Tweak
env.warn_only
docs to note that it applies to all operations, not justrun
/sudo
. Thanks@akitada
.
1.10.3 2016-04-09
[Bug] #1348: (via #1361) Fix a bug in
fabric.operations.get
where remote file paths containing Python string formatting escape codes caused an exception. Thanks to@natecode
for the report and Bradley Spink for the fix.[Bug] #1365: (via #1372) Classic-style fabfiles (ones not using
@task
) erroneously included custom exception subclasses when collecting tasks. This is now fixed thanks to@mattvonrocketstein
.[Bug] #1135: (via #1241) Modified order of operations in
fabric.operations.run
/fabric.operations.sudo
to apply environment vars before prefixing commands (instead of after). Report by@warsamebashir
, patch by Curtis Mattoon.[Support] #1454: Remove use of
:option:
directives in the changelog, it’s currently broken in modern Sphinx & doesn’t seem to have actually functioned on Renaissance-era Sphinx either.[Support] #1257: Add notes to the usage docs for
fab
regarding the program’s exit status. Credit:@koalaman
.[Support] #943: Tweak
env.warn_only
docs to note that it applies to all operations, not justrun
/sudo
. Thanks@akitada
.
1.10.2 2015-06-19
[Bug] #1273: Fix issue with ssh/config not having a cross-platform default path. Thanks to
@SamuelMarks
for catch & patch.[Bug] #1286: (also #971, #1032) Recursively unwrap decorators instead of only unwrapping a single decorator level, when obtaining task docstrings. Thanks to Avishai Ish-Shalom for the original report & Max Kovgan for the patch.
[Bug] #1289: Fix “NameError: free variable referenced before assignment in enclosing scope”. Thanks to
@SamuelMarks
for catch & patch.[Bug] #980: (also #1312) Redirect output of
cd
to/dev/null
so users enabling bash’sCDPATH
(or similar features in other shells) don’t have polluted output captures. Thanks to Alex North-Keys for the original report & Steve Ivy for the fix.[Bug] #1305: (also #1313) Fix a couple minor issues with the operation of & demo code for the
JobQueue
class. Thanks to@dioh
and Horst Gutmann for the report & Cameron Lane for the patch.[Bug] #1318: 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. Thanks to Felix Almeida for the report.
1.10.1 2014-12-19
[Bug] #1226: Update
fabric.operations.get
to ensure thatenv.user
has access to tempfiles before changing permissions. Also corrected permissions from 404 to 0400 to match comment. Patch by Curtis Mattoon; original report from Daniel Watkins.[Bug] #1180: Fix issue with unicode steam outputs crashing if stream encoding type is None. Thanks to
@joekiller
for catch & patch.[Bug] #1228: Update the
CommandTimeout
class so it has a usefulstr
instead of appearing blank when caught by Fabric’s top level exception handling. Catch & patch from Tomaz Muraus.[Bug] #1019: (also #1022, #1186) Fix “is a tty” tests in environments where streams (eg
sys.stdout
) have been replaced with objects lacking a.isatty()
method. Thanks to Miki Tebeka for the original report, Lele Long for a subsequent patch, and Julien Phalip for the final/merged patch.[Bug] #1201: Don’t naively glob all
fabric.operations.get
targets - only glob actual directories. This avoids incorrectly yielding permission errors in edge cases where a requested file is within a directory lacking the read permission bit. Thanks to Sassa Nf for the original report.[Support] #1229: Add some missing API doc hyperlink references. Thanks to Tony Narlock.
[Support] #958: Remove the Git SHA portion of our version string generation; it was rarely useful & occasionally caused issues for users with non-Git-based source checkouts.
[Support] #1213: Add useful exception message to the implicit
SystemExit
raised by Fabric’s use ofsys.exit
inside thefabric.api.abort
function. This allows client code catchingSystemExit
to have better introspection into the error. Thanks to Ioannis Panousis.
1.9.2 2014-12-19
[Bug] #1226: Update
fabric.operations.get
to ensure thatenv.user
has access to tempfiles before changing permissions. Also corrected permissions from 404 to 0400 to match comment. Patch by Curtis Mattoon; original report from Daniel Watkins.[Bug] #1180: Fix issue with unicode steam outputs crashing if stream encoding type is None. Thanks to
@joekiller
for catch & patch.[Bug] #1228: Update the
CommandTimeout
class so it has a usefulstr
instead of appearing blank when caught by Fabric’s top level exception handling. Catch & patch from Tomaz Muraus.[Bug] #1019: (also #1022, #1186) Fix “is a tty” tests in environments where streams (eg
sys.stdout
) have been replaced with objects lacking a.isatty()
method. Thanks to Miki Tebeka for the original report, Lele Long for a subsequent patch, and Julien Phalip for the final/merged patch.[Bug] #1201: Don’t naively glob all
fabric.operations.get
targets - only glob actual directories. This avoids incorrectly yielding permission errors in edge cases where a requested file is within a directory lacking the read permission bit. Thanks to Sassa Nf for the original report.[Support] #1229: Add some missing API doc hyperlink references. Thanks to Tony Narlock.
[Support] #958: Remove the Git SHA portion of our version string generation; it was rarely useful & occasionally caused issues for users with non-Git-based source checkouts.
[Support] #1213: Add useful exception message to the implicit
SystemExit
raised by Fabric’s use ofsys.exit
inside thefabric.api.abort
function. This allows client code catchingSystemExit
to have better introspection into the error. Thanks to Ioannis Panousis.
1.10.0 2014-09-04
[Feature] #975: Fabric can now be invoked via
python -m fabric
in addition to the typical use of thefab
entrypoint. Patch courtesy of Jason Coombs.Note
This functionality is only available under Python 2.7.
[Feature] #1090: Add option to skip unknown tasks. Credit goes to Jonas Lundberg.
[Feature] #1098: Add support for dict style roledefs. Thanks to Jonas Lundberg.
[Feature] #700: Added
use_sudo
andtemp_dir
params tofabric.operations.get
. This allows downloading files normally not accessible to the user usingsudo
. Thanks to Jason Coombs for initial report and to Alex Plugaru for the patch (#1121).[Bug] #1188: Update
fabric.operations.local
to close non-pipe file descriptors in the child process so subsequent calls tofabric.operations.local
aren’t blocked on e.g. already-connected network sockets. Thanks to Tolbkni Kao for catch & patch.
1.9.1 2014-08-06
[Bug] #1167: Add Jinja to
test_requires
insetup.py
for the couple of newish tests that now require it. Thanks to Kubilay Kocak for the catch.[Bug] #600: Clear out connection caches in full when prepping parallel-execution subprocesses. This avoids corner cases causing hangs/freezes due to client/socket reuse. Thanks to Ruslan Lutsenko for the initial report and Romain Chossart for the suggested fix.
[Bug] #1026: Fix a typo preventing quiet operation of
fabric.contrib.files.is_link
. Caught by@dongweiming
.[Bug] #1059: Update IPv6 support to work with link-local address formats. Fix courtesy of
@obormot
.[Bug] #1096: Encode Unicode text appropriately for its target stream object to avoid issues on non-ASCII systems. Thanks to Toru Uetani for the original patch.
[Bug] #852: Fix to respect
template_dir
for non Jinja2 templates infabric.contrib.files.upload_template
. Thanks to Adam Kowalski for the patch and Alex Plugaru for the initial test case.[Bug] #1134: Skip bad hosts when the tasks are executed in parallel. Thanks to Igor Maravić
@i-maravic
.[Bug] #1146: Fix a bug where
fabric.contrib.files.upload_template
failed to honorlcd
whenmirror_local_mode
isTrue
. Thanks to Laszlo Marai for catch & patch.[Bug] #1147: Use
stat
instead oflstat
when testing directory-ness in the SFTP module. This allows recursive downloads to avoid recursing into symlinks unexpectedly. Thanks to Igor Kalnitsky for the patch.[Bug] #1165: Prevent infinite loop condition when a gateway host is enabled & the same host is in the regular target host list. Thanks to
@CzBiX
for catch & patch.
1.8.5 2014-08-06
[Bug] #1167: Add Jinja to
test_requires
insetup.py
for the couple of newish tests that now require it. Thanks to Kubilay Kocak for the catch.[Bug] #600: Clear out connection caches in full when prepping parallel-execution subprocesses. This avoids corner cases causing hangs/freezes due to client/socket reuse. Thanks to Ruslan Lutsenko for the initial report and Romain Chossart for the suggested fix.
[Bug] #1026: Fix a typo preventing quiet operation of
fabric.contrib.files.is_link
. Caught by@dongweiming
.[Bug] #1059: Update IPv6 support to work with link-local address formats. Fix courtesy of
@obormot
.[Bug] #1096: Encode Unicode text appropriately for its target stream object to avoid issues on non-ASCII systems. Thanks to Toru Uetani for the original patch.
[Bug] #852: Fix to respect
template_dir
for non Jinja2 templates infabric.contrib.files.upload_template
. Thanks to Adam Kowalski for the patch and Alex Plugaru for the initial test case.[Bug] #1134: Skip bad hosts when the tasks are executed in parallel. Thanks to Igor Maravić
@i-maravic
.[Bug] #1146: Fix a bug where
fabric.contrib.files.upload_template
failed to honorlcd
whenmirror_local_mode
isTrue
. Thanks to Laszlo Marai for catch & patch.[Bug] #1147: Use
stat
instead oflstat
when testing directory-ness in the SFTP module. This allows recursive downloads to avoid recursing into symlinks unexpectedly. Thanks to Igor Kalnitsky for the patch.[Bug] #1165: Prevent infinite loop condition when a gateway host is enabled & the same host is in the regular target host list. Thanks to
@CzBiX
for catch & patch.
1.7.5 2014-08-06
[Bug] #1167: Add Jinja to
test_requires
insetup.py
for the couple of newish tests that now require it. Thanks to Kubilay Kocak for the catch.[Bug] #600: Clear out connection caches in full when prepping parallel-execution subprocesses. This avoids corner cases causing hangs/freezes due to client/socket reuse. Thanks to Ruslan Lutsenko for the initial report and Romain Chossart for the suggested fix.
[Bug] #1026: Fix a typo preventing quiet operation of
fabric.contrib.files.is_link
. Caught by@dongweiming
.[Bug] #1059: Update IPv6 support to work with link-local address formats. Fix courtesy of
@obormot
.[Bug] #1096: Encode Unicode text appropriately for its target stream object to avoid issues on non-ASCII systems. Thanks to Toru Uetani for the original patch.
[Bug] #852: Fix to respect
template_dir
for non Jinja2 templates infabric.contrib.files.upload_template
. Thanks to Adam Kowalski for the patch and Alex Plugaru for the initial test case.[Bug] #1134: Skip bad hosts when the tasks are executed in parallel. Thanks to Igor Maravić
@i-maravic
.[Bug] #1146: Fix a bug where
fabric.contrib.files.upload_template
failed to honorlcd
whenmirror_local_mode
isTrue
. Thanks to Laszlo Marai for catch & patch.[Bug] #1147: Use
stat
instead oflstat
when testing directory-ness in the SFTP module. This allows recursive downloads to avoid recursing into symlinks unexpectedly. Thanks to Igor Kalnitsky for the patch.[Bug] #1165: Prevent infinite loop condition when a gateway host is enabled & the same host is in the regular target host list. Thanks to
@CzBiX
for catch & patch.
1.9.0 2014-06-08
[Feature] #741: Add
env.prompts
dictionary, allowing users to set up custom prompt responses (similar to the built-in sudo prompt auto-responder.) Thanks to Nigel Owens and David Halter for the patch.[Feature] #1082: Add
pty
passthrough kwarg tofabric.contrib.files.upload_template
.[Feature] #1101: Reboot operation now supports custom command. Thanks to Jonas Lejon.
[Feature] #938: Add an env var
env.effective_roles
specifying roles used in the currently executing command. Thanks to Piotr Betkier for the patch.[Feature] #1078: Add
.command
and.real_command
attributes tolocal
return value. Thanks to Alexander Teves (@alexanderteves
) and Konrad Hałas (@konradhalas
).[Bug] #965: Tweak IO flushing behavior when in linewise (& thus parallel) mode so interwoven output is less frequent. Thanks to
@akidata
for catch & patch.[Support]: Modified packaging data to reflect that Fabric requires Paramiko < 1.13 (which dropped Python 2.5 support.)
[Support] #1105: Enhance
setup.py
to allow Paramiko 1.13+ under Python 2.6+. Thanks to to@Arfrever
for catch & patch.[Support] #1106: Fix a misleading/ambiguous example snippet in the
fab
usage docs to be clearer. Thanks to@zed
.
1.8.4 2014-06-08
1.7.4 2014-06-08
1.8.3 2014-03-21
[Support]: Modified packaging data to reflect that Fabric requires Paramiko < 1.13 (which dropped Python 2.5 support.)
1.7.3 2014-03-21
[Support]: Modified packaging data to reflect that Fabric requires Paramiko < 1.13 (which dropped Python 2.5 support.)
1.8.2 2014-02-14
[Bug] #1046: Fix typo preventing use of ProxyCommand in some situations. Thanks to Keith Yang.
[Bug] #917: Correct an issue with
put(use_sudo=True, mode=xxx)
where thechmod
was trying to apply to the wrong location. Thanks to Remco (@nl5887
) for catch & patch.[Bug] #955: Quote directories created as part of
put
’s recursive directory uploads whenuse_sudo=True
so directories with shell meta-characters (such as spaces) work correctly. Thanks to John Harris for the catch.
1.7.2 2014-02-14
[Bug] #1046: Fix typo preventing use of ProxyCommand in some situations. Thanks to Keith Yang.
[Bug] #917: Correct an issue with
put(use_sudo=True, mode=xxx)
where thechmod
was trying to apply to the wrong location. Thanks to Remco (@nl5887
) for catch & patch.[Bug] #955: Quote directories created as part of
put
’s recursive directory uploads whenuse_sudo=True
so directories with shell meta-characters (such as spaces) work correctly. Thanks to John Harris for the catch.
1.8.1 2013-12-24
[Bug] #948: Handle connection failures due to server load and try connecting to hosts a number of times specified in
env.connection_attempts
.[Bug] #957: Fix bug preventing use of
env.gateway
with targets requiring password authentication. Thanks to Daniel González,@Bengrunt
and@adrianbn
for their bug reports.[Bug] #956: Fix pty size detection when running inside Emacs. Thanks to
@akitada
for catch & patch.
1.7.1 2013-12-24
[Bug] #948: Handle connection failures due to server load and try connecting to hosts a number of times specified in
env.connection_attempts
.[Bug] #957: Fix bug preventing use of
env.gateway
with targets requiring password authentication. Thanks to Daniel González,@Bengrunt
and@adrianbn
for their bug reports.[Bug] #956: Fix pty size detection when running inside Emacs. Thanks to
@akitada
for catch & patch.[Support] #984: Make this changelog easier to read! Now with per-release sections, generated automatically from the old timeline source format.
1.6.4 2013-12-24
1.5.5 2013-12-24
1.8.0 2013-09-20
[Feature] #910: Added a keyword argument to rsync_project to configure the default options. Thanks to
@moorepants
for the patch.[Feature] #931: Allow overriding of
abort
behavior via a custom exception-returning callable set asenv.abort_exception
. Thanks to Chris Rose for the patch.[Support] #984: Make this changelog easier to read! Now with per-release sections, generated automatically from the old timeline source format.
1.7.0 2013-07-26
[Feature] #845: Downstream synchronization option implemented for
fabric.contrib.project.rsync_project
. Thanks to Antonio Barrero for the patch.[Feature] #812: Add
use_glob
option toput
so users trying to upload real filenames containing glob patterns (*
,[
etc) can disable the default globbing behavior. Thanks to Michael McHugh for the patch.[Feature] #826: Enable sudo extraction of compressed archive via
use_sudo
kwarg inupload_project
. Thanks to@abec
for the patch.[Feature] #908: Support loading SSH keys from memory. Thanks to Caleb Groom for the patch.
[Feature] #924: Add new env var option
colorize-errors
to enable coloring errors and warnings. Thanks to Aaron Meurer for the patch.[Feature] #922: Task argument strings are now displayed when using
fab -d
. Thanks to Kevin Qiu for the patch.[Feature] #925: Added
contrib.files.is_link
. Thanks to@jtangas
for the patch.[Bug] #84: Fixed problem with missing -r flag in Mac OS X sed version. Thanks to Konrad Hałas for the patch.
[Bug] #864: Allow users to disable Fabric’s auto-escaping in
run
/sudo
. Thanks to Christian Long and Michael McHugh 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 callingput
withuse_sudo=True
. Thanks to Devin Bayer for the report & Dieter Plaetinck / Jesse Myers for suggesting the workaround.
1.6.2 2013-07-26
[Bug] #882: Fix a
get
bug regarding spaces in remote working directory names. Thanks to Chris Rose for catch & patch.[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.
[Bug] #171: Added missing cross-references from
env
variables documentation to corresponding command-line options. Thanks to Daniel D. Beck for the contribution.[Bug] #593: Non-ASCII character sets in Jinja templates rendered within
upload_template
would causeUnicodeDecodeError
when uploaded. This has been addressed by encoding asutf-8
prior to upload. Thanks to Sébastien Fievet for the catch.[Bug] #912: Leaving
template_dir
un-specified when usingupload_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.
1.6.1 2013-05-23
[Feature] #845: Downstream synchronization option implemented for
fabric.contrib.project.rsync_project
. Thanks to Antonio Barrero for the patch.[Bug] #367: Expand paths with tilde inside (
contrib.files
). Thanks to Konrad Hałas for catch & patch.[Bug] #861: Gracefully handle situations where users give a single string literal to
env.hosts
. Thanks to Bill Tucker for catch & patch.[Bug] #871: Use of string mode values in
put(local, remote, mode="NNNN")
would sometimes causeUnsupported operand
errors. This has been fixed.[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] #328:
lcd
was no longer being correctly applied toupload_template
; this has been fixed. Thanks to Joseph Lawson for the catch.[Bug] #868: Substantial speedup of parallel tasks by removing an unnecessary blocking timeout in the
JobQueue
loop. Thanks to Simo Kinnunen for the patch.
1.6.0 2013-03-01
[Feature] #249: Allow specification of remote command timeout value by setting
env.command_timeout
. Thanks to Paul McMillan for suggestion & initial patch.[Feature] #787: Utilize new Paramiko feature allowing us to skip the use of temporary local files when using file-like objects in
fabric.operations.get
/fabric.operations.put
.[Feature] #735: Add
ok_ret_codes
option toenv
to allow alternate return codes to be treated os “ok”. Thanks to Andy Kraut for the pull request.[Feature] #706: Added
env.tasks
, returning list of tasks to be executed by currentfab
command.[Feature] #818: Added
env.eagerly_disconnect
option to help prevent pile-up of many open connections.[Feature] #730: Add
env.system_known_hosts
/--system-known-hosts
to allow loading a user-specified system-level SSHknown_hosts
file. Thanks to Roy Smith for the patch.[Feature] #402: Attempt to detect stale SSH sessions and reconnect when they arise. Thanks to
@webengineer
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.[Feature] #821: Add
fabric.context_managers.remote_tunnel
to allow reverse SSH tunneling (exposing locally-visible network ports to the remote end). Thanks to Giovanni Bajo for the patch.[Bug] #703: Add a
shell
kwarg to many methods infabric.contrib.files
to help avoid conflicts withfabric.context_managers.cd
and similar. Thanks to@mikek
for the patch.
1.5.4 2013-03-01
[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.[Bug] #839: Fix bug in
fabric.contrib.project.rsync_project
where IPv6 address were not always correctly detected. Thanks to Antonio Barrero for catch & patch.[Bug] #843: Ensure string
pool_size
values get run throughint()
before deriving final result (stdlibmin()
has odd behavior here…). Thanks to Chris Kastorff for the catch.[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.
1.5.3 2013-01-28
[Bug] #791: Cast
fabric.operations.reboot
’swait
parameter to a numeric type in case the caller submitted a string by mistake. Thanks to Thomas Schreiber 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] #805: Update
fabric.context_managers.shell_env
to play nice with Windows (7, at least) systems andfabric.operations.local
. Thanks to Fernando Macedo for the patch.[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.
1.5.2 2013-01-15
[Bug]: Added current host string to prompt abort error messages.
[Bug] #775: Shell escaping was incorrectly applied to the value of
$PATH
updates in our shell environment handling, causing (at the very least)fabric.operations.local
binary paths to become inoperable in certain situations. This has been fixed.[Bug] #792: The newish
fabric.context_managers.shell_env
context manager was incorrectly omitted from thefabric.api
import endpoint. This has been remedied. Thanks to Vishal Rana for the catch.[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] #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.
1.5.1 2012-11-15
1.5.0 2012-11-06
[Feature] #615: Updated
fabric.operations.sudo
to honor the new settingenv.sudo_user
as a default for itsuser
kwarg.[Feature] #633: Allow users to turn off host list deduping by setting
env.dedupe_hosts
toFalse
. This enables running the same task multiple times on a single host, which was previously not possible.[Feature] #627: Added convenient
quiet
andwarn_only
keyword arguments tofabric.operations.run
/fabric.operations.sudo
which are aliases forsettings(hide('everything'), warn_only=True)
andsettings(warn_only=True)
, respectively. (Also added corresponding context managers.) Useful for remote program calls which are expected to fail and/or whose output doesn’t need to be shown to users.[Feature] #646: Allow specification of which local streams to use when
fabric.operations.run
/fabric.operations.sudo
print the remote stdout/stderr, via e.g.run("command", stderr=sys.stdout)
.[Feature] #241: Add the command executed as a
.command
attribute to the return value offabric.operations.run
/fabric.operations.sudo
. (Also includes a second attribute containing the “real” command executed, including the shell wrapper and any escaping.)[Feature] #669: Updates to our Windows compatibility to rely more heavily on cross-platform Python stdlib implementations. Thanks to Alexey Diyan for the patch.
[Feature] #263: Shell environment variable support for
fabric.operations.run
/fabric.operations.sudo
added in the form of thefabric.context_managers.shell_env
context manager. Thanks to Oliver Tonnhofer for the original pull request, and to Kamil Kisiel for the final implementation.[Feature] #699: Allow
name
attribute on file-like objects for get/put. Thanks to Peter Lyons for the pull request.[Feature] #491: (also [Feature] #385:) IPv6 host string support. Thanks to Max Arnold for the patch.
[Feature] #725: Updated
fabric.operations.local
to allow override of which local shell is used. Thanks to Mustafa Khattab.[Feature] #723: Add the
group=
argument tofabric.operations.sudo
. Thanks to Antti Kaihola for the pull request.[Feature] #761: Allow advanced users to parameterize
fabric.main.main()
to force loading of specific fabfiles.[Feature] #578: Add
name
argument tofabric.decorators.task
to allow overriding of the default “function name is task name” behavior. Thanks to Daniel Simmons for catch & patch.[Feature] #665: (and #629) Update
fabric.contrib.files.upload_template
to have a more useful return value, namely that of its internalfabric.operations.put
call. Thanks to Miquel Torres for the catch & Rodrigue Alcazar for the patch.[Feature] #763: Add
--initial-password-prompt
to allow prefilling the password cache at the start of a run. Great for sudo-powered parallel runs.[Feature] #684: (also #569) Update how
fabric.decorators.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.[Feature] #38: (also #698) Implement both SSH-level and
ProxyCommand
-based gatewaying for SSH traffic. (This is distinct from tunneling non-SSH traffic over the SSH connection, which is #78 and not implemented yet.)Thanks in no particular order to Erwin Bolwidt, Oskari Saarenmaa, Steven Noonan, Vladimir Lazarenko, Lincoln de Sousa, Valentino Volonghi, Olle Lundberg and Github user
@acrish
for providing the original patches to both Fabric and Paramiko.
[Bug] #702:
fabric.operations.require
failed to test for “empty” values in the env keys it checks (e.g.require('a-key-whose-value-is-an-empty-list')
would register a successful result instead of alerting that the value was in fact empty. This has been fixed, thanks to Rich Schumacher.[Bug] #711:
fabric.sftp.get
would fail when filenames had % in their path. Thanks to John Begeman[Bug] #704: Fix up a bunch of Python 2.x style
print
statements to be forwards compatible. Thanks to Francesco Del Degan for the patch.[Bug] #736: Ensure context managers that build env vars play nice with
contextlib.nested
by deferring env var reference to entry time, not call time. Thanks to Matthew Tretter for catch & patch.[Bug] #767: Fix (and add test for) regression re: having linewise output automatically activate when parallelism is in effect. Thanks to Alexander Fortin and Dustin McQuay for the bug reports.
[Support] #626: Clarity updates to the tutorial. Thanks to GitHub user
m4z
for the patches.[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 toos.getcwd()
. Thanks to @techtonik 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] #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] #651: Added note about nesting
with
statements on Python 2.6+. Thanks to Jens Rantil for the patch.[Support] #681: Fixed outdated docstring for
fabric.decorators.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.[Support] #103: (via #748) Long standing Sphinx autodoc issue requiring error-prone duplication of function signatures in our API docs has been fixed. Thanks to Alex Morega for the patch.
1.4.4 2012-11-06
[Feature] #684: (also #569) Update how
fabric.decorators.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] #693: Fixed edge case where
abort
driven failures within parallel tasks could result in a top level exception (aKeyError
) regarding error handling. Thanks to Marcin Kuźmiński for the report.[Bug] #718:
isinstance(foo, Bar)
is used infabric.main
instead oftype(foo) == Bar
in order to fix some edge cases. Thanks to Mikhail Korobov.[Bug] #749: Gracefully work around calls to
fabric.version
on systems lacking/bin/sh
(which causes anOSError
insubprocess.Popen
calls.)[Support] #681: Fixed outdated docstring for
fabric.decorators.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.
1.4.3 2012-07-06
[Bug] #649: Don’t swallow non-
abort
-driven exceptions in parallel mode. Fabric correctly printed such exceptions, and returned them fromfabric.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 honorsenv.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.[Bug] #652: Show available commands when aborting on invalid command names.
[Bug] #659: Update docs to reflect that
fabric.operations.local
currently honorsenv.path
. Thanks to @floledermann for the catch.[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.[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 toos.getcwd()
. Thanks to @techtonik 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] #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] #651: Added note about nesting
with
statements on Python 2.6+. Thanks to Jens Rantil for the patch.
1.3.8 2012-07-06
[Bug] #649: Don’t swallow non-
abort
-driven exceptions in parallel mode. Fabric correctly printed such exceptions, and returned them fromfabric.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 honorsenv.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.[Bug] #652: Show available commands when aborting on invalid command names.
[Bug] #659: Update docs to reflect that
fabric.operations.local
currently honorsenv.path
. Thanks to @floledermann for the catch.[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.[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 toos.getcwd()
. Thanks to @techtonik 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] #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] #651: Added note about nesting
with
statements on Python 2.6+. Thanks to Jens Rantil for the patch.
1.4.2 2012-05-07
[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.[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 users3point2
for the cleanup andSirScott
for the documentation catch.[Bug] #616: Add port number to the error message displayed upon connection failures.
[Bug] #617: Fix the
clean_revert
behavior offabric.context_managers.settings
so it doesn’tKeyError
for newly created settings keys. Thanks to Chris Streeter for the catch.[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] #625:
fabric.context_managers.hide
/fabric.context_managers.show
did not correctly restore prior display settings if an exception was raised inside the block. This has been fixed.[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
fabric.operations.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.
1.3.7 2012-05-07
[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.[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 users3point2
for the cleanup andSirScott
for the documentation catch.[Bug] #616: Add port number to the error message displayed upon connection failures.
[Bug] #617: Fix the
clean_revert
behavior offabric.context_managers.settings
so it doesn’tKeyError
for newly created settings keys. Thanks to Chris Streeter for the catch.[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] #625:
fabric.context_managers.hide
/fabric.context_managers.show
did not correctly restore prior display settings if an exception was raised inside the block. This has been fixed.[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
fabric.operations.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.
1.4.1 2012-04-04
[Bug] #306: Remote paths now use posixpath for a separator. Thanks to Jason Coombs for the patch.
[Bug] #572: 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.
[Bug] #551:
--list
output now detects terminal window size and truncates (or doesn’t truncate) accordingly. Thanks to Horacio G. de Oro for the initial pull request.[Bug] #499:
contrib.files.first
used an outdated function signature in its wrappedfabric.contrib.files.exists
call. This has been fixed. Thanks to Massimiliano Torromeo for catch & patch.[Bug] #458:
fabric.decorators.with_settings
did not perfectly matchfabric.context_managers.settings
, re: ability to inline additional context managers. This has been corrected. Thanks to Rory Geoghegan for the patch.[Bug] #584:
fabric.contrib.project.upload_project
did not take explicit remote directory location into account when untarring, and now usesfabric.context_managers.cd
to address this. Thanks to Ben Burry for the patch.[Bug] #568:
fabric.tasks.execute
allowed too much of its internal state changes (to variables such asenv.host_string
andenv.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.[Bug] #395: Added an FAQ entry detailing how to handle init scripts which misbehave when a pseudo-tty is allocated.
[Bug] #607: Allow
fabric.operations.local
to display stdout/stderr when it warns/aborts, if it was capturing them.[Bug] #608: Add
capture
kwarg tofabric.contrib.project.rsync_project
to aid in debugging rsync problems.
1.3.6 2012-04-04
[Bug] #306: Remote paths now use posixpath for a separator. Thanks to Jason Coombs for the patch.
[Bug] #572: 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.
[Bug] #551:
--list
output now detects terminal window size and truncates (or doesn’t truncate) accordingly. Thanks to Horacio G. de Oro for the initial pull request.[Bug] #499:
contrib.files.first
used an outdated function signature in its wrappedfabric.contrib.files.exists
call. This has been fixed. Thanks to Massimiliano Torromeo for catch & patch.[Bug] #458:
fabric.decorators.with_settings
did not perfectly matchfabric.context_managers.settings
, re: ability to inline additional context managers. This has been corrected. Thanks to Rory Geoghegan for the patch.[Bug] #584:
fabric.contrib.project.upload_project
did not take explicit remote directory location into account when untarring, and now usesfabric.context_managers.cd
to address this. Thanks to Ben Burry for the patch.[Bug] #568:
fabric.tasks.execute
allowed too much of its internal state changes (to variables such asenv.host_string
andenv.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.[Bug] #395: Added an FAQ entry detailing how to handle init scripts which misbehave when a pseudo-tty is allocated.
[Bug] #607: Allow
fabric.operations.local
to display stdout/stderr when it warns/aborts, if it was capturing them.[Bug] #608: Add
capture
kwarg tofabric.contrib.project.rsync_project
to aid in debugging rsync problems.
1.4.0 2012-02-13
[Feature] #72: SSH agent forwarding support has made it into Fabric’s SSH library, and hooks for using it have been added (disabled by default; use
-A
orenv.forward_agent
to enable.) Thanks to Ben Davis for porting an existing Paramiko patch tossh
and providing the necessary tweak to Fabric.[Feature] #506: A new output alias,
commands
, has been added, which allows hiding remote stdout and local “running command X” output lines.[Feature] #13: Env vars may now be set at runtime via the new
--set
command-line flag.[Feature] #8: Added
--skip-bad-hosts
/env.skip_bad_hosts
option to allow skipping past temporarily down/unreachable hosts.[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 host strings executed against.[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
andenv.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] #3: Fabric can now load a subset of SSH config functionality directly from your local
~/.ssh/config
ifenv.use_ssh_config
is set toTrue
. Seessh-config
for details. Thanks to Kirill Pinchuk for the initial patch.[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] #559:
fabric.contrib.project.rsync_project
now allows users to append extra SSH-specific arguments torsync
’s--rsh
flag.[Bug] #487: Overhauled the regular expression escaping performed in
fabric.contrib.files.append
andfabric.contrib.files.contains
to try and handle more corner cases. Thanks to Neilen Marais for the patch.[Support] #467: (also #468, #469) Handful of documentation clarification tweaks. Thanks to Paul Hoffman for the patches.
[Support] #459: Update our
setup.py
files to note that PyCrypto released 2.4.1, which fixes the setuptools problems.[Support] #532: Reorganized and cleaned up the output of
fab --help
.
1.3.5 2012-02-13
[Bug] #410: Fixed a bug where using the
fabric.decorators.task
decorator inside/under another decorator such asfabric.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.[Bug] #495: Fixed documentation example showing how to subclass
fabric.tasks.Task
. Thanks to Brett Haydon for the catch and Mark Merritt for the patch.
1.2.6 2012-02-13
[Bug] #339: Don’t show imported
fabric.colors
members in--list
output. Thanks to Nick Trew for the report.[Bug] #494: Fixed regression bug affecting some
env
values such asenv.port
under parallel mode. Symptoms includedfabric.contrib.project.rsync_project
bailing out due to a None port value when run under@parallel
. Thanks to Rob Terhaar for the report.[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 obviouslyabort
instead.[Bug] #492:
@parallel
did not automatically trigger linewise output, as was intended. This has been fixed. Thanks to Brandon Huey for the catch.[Bug] #410: Fixed a bug where using the
fabric.decorators.task
decorator inside/under another decorator such asfabric.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.[Bug] #495: Fixed documentation example showing how to subclass
fabric.tasks.Task
. Thanks to Brett Haydon for the catch and Mark Merritt for the patch.
1.1.8 2012-02-13
[Bug] #339: Don’t show imported
fabric.colors
members in--list
output. Thanks to Nick Trew for the report.[Bug] #494: Fixed regression bug affecting some
env
values such asenv.port
under parallel mode. Symptoms includedfabric.contrib.project.rsync_project
bailing out due to a None port value when run under@parallel
. Thanks to Rob Terhaar for the report.[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 obviouslyabort
instead.[Bug] #492:
@parallel
did not automatically trigger linewise output, as was intended. This has been fixed. Thanks to Brandon Huey for the catch.[Bug] #410: Fixed a bug where using the
fabric.decorators.task
decorator inside/under another decorator such asfabric.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.[Bug] #495: Fixed documentation example showing how to subclass
fabric.tasks.Task
. Thanks to Brett Haydon for the catch and Mark Merritt for the patch.
1.3.4 2012-01-12
[Bug] #339: Don’t show imported
fabric.colors
members in--list
output. Thanks to Nick Trew for the report.[Bug] #494: Fixed regression bug affecting some
env
values such asenv.port
under parallel mode. Symptoms includedfabric.contrib.project.rsync_project
bailing out due to a None port value when run under@parallel
. Thanks to Rob Terhaar for the report.[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 obviouslyabort
instead.[Bug] #492:
@parallel
did not automatically trigger linewise output, as was intended. This has been fixed. Thanks to Brandon Huey for the catch.
1.3.3 2011-11-23
[Bug] #230: Fix regression re: combo of no fabfile & arbitrary command use. Thanks to Ali Saifee for the catch.
[Bug] #482: Parallel mode should imply linewise output; omission of this behavior was an oversight.
[Bug] #342: Combining
fabric.context_managers.cd
withfabric.operations.put
and itsuse_sudo
keyword caused an unrecoverable error. This has been fixed. Thanks to Egor M for the report.[Bug] #341:
fabric.contrib.files.append
incorrectly failed to detect that the line(s) given already existed in files hidden to the remote user, and continued appending every time it ran. This has been fixed. Thanks to Dominique Peretti for the catch and Martin Vilcans for the patch.[Bug] #397: Some poorly behaved objects in third party modules triggered exceptions during Fabric’s “classic or new-style task?” test. A fix has been added which tries to work around these.
[Bug] #400: Handle corner case of systems where
pwd.getpwuid
raisesKeyError
for the user’s UID instead of returning a valid string. Thanks to Dougal Matthews for the catch.[Bug] #437:
fabric.decorators.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.[Bug] #443:
fabric.contrib.files.exists
didn’t expand tildes; now it does. Thanks to Riccardo Magliocchetti for the patch.[Bug] #446: Add QNX to list of secondary-case
fabric.contrib.files.sed
targets. Thanks to Rodrigo Madruga for the tip.[Bug] #450: Improve traceback display when handling
ImportError
for dependencies. Thanks to David Wolever for the patches.[Bug] #475: Allow escaping of equals signs in per-task args/kwargs.
[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.
1.2.5 2011-11-23
[Bug] #230: Fix regression re: combo of no fabfile & arbitrary command use. Thanks to Ali Saifee for the catch.
[Bug] #482: Parallel mode should imply linewise output; omission of this behavior was an oversight.
[Bug] #342: Combining
fabric.context_managers.cd
withfabric.operations.put
and itsuse_sudo
keyword caused an unrecoverable error. This has been fixed. Thanks to Egor M for the report.[Bug] #341:
fabric.contrib.files.append
incorrectly failed to detect that the line(s) given already existed in files hidden to the remote user, and continued appending every time it ran. This has been fixed. Thanks to Dominique Peretti for the catch and Martin Vilcans for the patch.[Bug] #397: Some poorly behaved objects in third party modules triggered exceptions during Fabric’s “classic or new-style task?” test. A fix has been added which tries to work around these.
[Bug] #400: Handle corner case of systems where
pwd.getpwuid
raisesKeyError
for the user’s UID instead of returning a valid string. Thanks to Dougal Matthews for the catch.[Bug] #437:
fabric.decorators.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.[Bug] #443:
fabric.contrib.files.exists
didn’t expand tildes; now it does. Thanks to Riccardo Magliocchetti for the patch.[Bug] #446: Add QNX to list of secondary-case
fabric.contrib.files.sed
targets. Thanks to Rodrigo Madruga for the tip.[Bug] #450: Improve traceback display when handling
ImportError
for dependencies. Thanks to David Wolever for the patches.[Bug] #475: Allow escaping of equals signs in per-task args/kwargs.
[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.
1.1.7 2011-11-23
[Bug] #230: Fix regression re: combo of no fabfile & arbitrary command use. Thanks to Ali Saifee for the catch.
[Bug] #482: Parallel mode should imply linewise output; omission of this behavior was an oversight.
[Bug] #342: Combining
fabric.context_managers.cd
withfabric.operations.put
and itsuse_sudo
keyword caused an unrecoverable error. This has been fixed. Thanks to Egor M for the report.[Bug] #341:
fabric.contrib.files.append
incorrectly failed to detect that the line(s) given already existed in files hidden to the remote user, and continued appending every time it ran. This has been fixed. Thanks to Dominique Peretti for the catch and Martin Vilcans for the patch.[Bug] #397: Some poorly behaved objects in third party modules triggered exceptions during Fabric’s “classic or new-style task?” test. A fix has been added which tries to work around these.
[Bug] #400: Handle corner case of systems where
pwd.getpwuid
raisesKeyError
for the user’s UID instead of returning a valid string. Thanks to Dougal Matthews for the catch.[Bug] #437:
fabric.decorators.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.[Bug] #443:
fabric.contrib.files.exists
didn’t expand tildes; now it does. Thanks to Riccardo Magliocchetti for the patch.[Bug] #446: Add QNX to list of secondary-case
fabric.contrib.files.sed
targets. Thanks to Rodrigo Madruga for the tip.[Bug] #450: Improve traceback display when handling
ImportError
for dependencies. Thanks to David Wolever for the patches.[Bug] #475: Allow escaping of equals signs in per-task args/kwargs.
[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.
1.3.2 2011-11-07
1.2.4 2011-11-07
[Bug] #457: Ensured that Fabric fast-fails parallel tasks if any child processes encountered errors. Previously, multi-task invocations would continue to the 2nd, etc task when failures occurred, which does not fit with how Fabric usually behaves. Thanks to Github user
sdcooke
for the report and Morgan Goose for the fix.[Support] #467: (also #468, #469) Handful of documentation clarification tweaks. Thanks to Paul Hoffman for the patches.
[Support] #459: Update our
setup.py
files to note that PyCrypto released 2.4.1, which fixes the setuptools problems.
1.1.6 2011-11-07
[Bug] #457: Ensured that Fabric fast-fails parallel tasks if any child processes encountered errors. Previously, multi-task invocations would continue to the 2nd, etc task when failures occurred, which does not fit with how Fabric usually behaves. Thanks to Github user
sdcooke
for the report and Morgan Goose for the fix.[Support] #467: (also #468, #469) Handful of documentation clarification tweaks. Thanks to Paul Hoffman for the patches.
[Support] #459: Update our
setup.py
files to note that PyCrypto released 2.4.1, which fixes the setuptools problems.
1.3.1 2011-10-24
[Bug] #457: Ensured that Fabric fast-fails parallel tasks if any child processes encountered errors. Previously, multi-task invocations would continue to the 2nd, etc task when failures occurred, which does not fit with how Fabric usually behaves. Thanks to Github user
sdcooke
for the report and Morgan Goose for the fix.
1.3.0 2011-10-23
[Feature] #19: Tasks may now be optionally executed in parallel. Please see the parallel execution docs for details. Major thanks to Morgan Goose for the initial implementation.
[Feature] #21: It is now possible, using the new
fabric.tasks.execute
API call, to execute task objects (by reference or by name) from within other tasks or in library mode.fabric.tasks.execute
honors the other tasks’fabric.decorators.hosts
/fabric.decorators.roles
decorators, and also supports passing in explicit host and/or role arguments.[Support] #416: Updated documentation to reflect move from Redmine to Github.
[Support] #393: Fixed a typo in an example code snippet in the task docs. Thanks to Hugo Garza for the catch.
[Support] #275: To support an edge use case of the features released in #19, and to lay the foundation for #275, we have forked Paramiko into the Python ‘ssh’ library and changed our dependency to it for Fabric 1.3 and higher. This may have implications for the more uncommon install use cases, and package maintainers, but we hope to iron out any issues as they come up.
1.2.3 2011-10-23
[Bug] #430: Tasks decorated with
fabric.decorators.runs_once
printed extraneous ‘Executing…’ status lines on subsequent invocations. This is noisy at best and misleading at worst, and has been corrected. Thanks to Jacob Kaplan-Moss for the report.[Bug] #182: During display of remote stdout/stderr, Fabric occasionally printed extraneous line prefixes (which in turn sometimes overwrote wrapped text.) This has been fixed.
[Bug] #323:
fabric.operations.put
forgot how to expand leading tildes in the remote file path. This has been corrected. Thanks to Piet Delport for the catch.
1.1.5 2011-10-23
[Bug] #430: Tasks decorated with
fabric.decorators.runs_once
printed extraneous ‘Executing…’ status lines on subsequent invocations. This is noisy at best and misleading at worst, and has been corrected. Thanks to Jacob Kaplan-Moss for the report.[Bug] #182: During display of remote stdout/stderr, Fabric occasionally printed extraneous line prefixes (which in turn sometimes overwrote wrapped text.) This has been fixed.
[Bug] #323:
fabric.operations.put
forgot how to expand leading tildes in the remote file path. This has been corrected. Thanks to Piet Delport for the catch.
1.0.5 2011-10-23
[Bug] #430: Tasks decorated with
fabric.decorators.runs_once
printed extraneous ‘Executing…’ status lines on subsequent invocations. This is noisy at best and misleading at worst, and has been corrected. Thanks to Jacob Kaplan-Moss for the report.[Bug] #182: During display of remote stdout/stderr, Fabric occasionally printed extraneous line prefixes (which in turn sometimes overwrote wrapped text.) This has been fixed.
[Bug] #323:
fabric.operations.put
forgot how to expand leading tildes in the remote file path. This has been corrected. Thanks to Piet Delport for the catch.
1.2.2 2011-09-01
[Bug] #303: Updated terminal size detection to correctly skip over non-tty stdout, such as when running
fab taskname | other_command
.[Bug] #373: Re-added missing functionality preventing host exclusion from working correctly.
[Bug] #396:
--shortlist
broke after the addition of--list-format
and no longer displayed the short list format correctly. This has been fixed.[Bug] #252:
fabric.context_managers.settings
would silently fail to setenv
values for keys which did not exist outside the context manager block. It now works as expected. Thanks to Will Maier for the catch and suggested solution.[Support] #393: Fixed a typo in an example code snippet in the task docs. Thanks to Hugo Garza for the catch.
1.1.4 2011-09-01
[Bug] #303: Updated terminal size detection to correctly skip over non-tty stdout, such as when running
fab taskname | other_command
.[Bug] #373: Re-added missing functionality preventing host exclusion from working correctly.
[Bug] #396:
--shortlist
broke after the addition of--list-format
and no longer displayed the short list format correctly. This has been fixed.[Bug] #252:
fabric.context_managers.settings
would silently fail to setenv
values for keys which did not exist outside the context manager block. It now works as expected. Thanks to Will Maier for the catch and suggested solution.[Support] #393: Fixed a typo in an example code snippet in the task docs. Thanks to Hugo Garza for the catch.
1.0.4 2011-09-01
[Bug] #303: Updated terminal size detection to correctly skip over non-tty stdout, such as when running
fab taskname | other_command
.[Bug] #373: Re-added missing functionality preventing host exclusion from working correctly.
[Bug] #396:
--shortlist
broke after the addition of--list-format
and no longer displayed the short list format correctly. This has been fixed.[Bug] #252:
fabric.context_managers.settings
would silently fail to setenv
values for keys which did not exist outside the context manager block. It now works as expected. Thanks to Will Maier for the catch and suggested solution.[Support] #393: Fixed a typo in an example code snippet in the task docs. Thanks to Hugo Garza for the catch.
1.2.1 2011-08-21
[Bug] #389: Fixed/improved error handling when Paramiko import fails. Thanks to Brian Luft for the catch.
[Bug] #417:
abort-on-prompts
would incorrectly abort when set to True, even if both password and host were defined. This has been fixed. Thanks to Valerie Ishida for the report.[Support] #416: Updated documentation to reflect move from Redmine to Github.
1.1.3 2011-08-21
[Bug] #380: Improved unicode support when testing objects for being string-like. Thanks to Jiri Barton for catch & patch.
[Bug] #389: Fixed/improved error handling when Paramiko import fails. Thanks to Brian Luft for the catch.
[Bug] #417:
abort-on-prompts
would incorrectly abort when set to True, even if both password and host were defined. This has been fixed. Thanks to Valerie Ishida for the report.[Support] #416: Updated documentation to reflect move from Redmine to Github.
1.0.3 2011-08-21
[Bug] #380: Improved unicode support when testing objects for being string-like. Thanks to Jiri Barton for catch & patch.
[Bug] #389: Fixed/improved error handling when Paramiko import fails. Thanks to Brian Luft for the catch.
[Bug] #417:
abort-on-prompts
would incorrectly abort when set to True, even if both password and host were defined. This has been fixed. Thanks to Valerie Ishida for the report.[Support] #416: Updated documentation to reflect move from Redmine to Github.
1.2.0 2011-07-12
[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.[Support] #382: Experimental overhaul of changelog formatting & process to make supporting multiple lines of development less of a hassle.