Commit Graph

79 Commits (fea71d2767067049d8e322ac07cf28b6f60dc920)

Author SHA1 Message Date
Toshio Kuratomi 286a46e8b4 Python2.4's zipfile library cannot handle zip 64bit extensions which are needed for > 64K files (#3754)
Fallback to unzip if zipfile fails and hope that unzip can deal with it
(sites have an easier time upgrading the unzip utility than all of
python).

https://bugs.python.org/issue3997

Fixes #3560
2016-12-08 11:24:31 -05:00
Michael Scherer f7b29ba8fd Convert the whole files/ directory to py3 syntax (#3685) 2016-12-08 11:24:29 -05:00
Dag Wieers c650f06b03 Fix small typo (#3642) 2016-12-08 11:24:28 -05:00
Veaceslav Mindru 8c6af73218 add vlidate_certs option for unarchive module (#2635) 2016-12-08 11:24:26 -05:00
Toshio Kuratomi fa00c69ff2 bytearray isn't available in python2.4 (#3583)
* Detection of handler depends on the wrong handler failing to list the contents of the tarfile.

Use explicit compression types with the python tarfile library to
achieve that.

* bytearray isn't available in python2.4
2016-12-08 11:24:26 -05:00
Toshio Kuratomi cd26cc8a0d Detection of handler depends on the wrong handler failing to list the contents of the tarfile. (#3584)
Use explicit compression types with the python tarfile library to
achieve that.
2016-12-08 11:24:26 -05:00
Virgil Dupras 930ea5dd55 unarchive: use Python's tarfile module for tar listing (#3575)
* unarchive: use Python's tarfile module for tar listing

fixes https://github.com/ansible/ansible/issues/11348

Depending on the current active locale, `tar`'s file listing can end up
spitting backslash-escaped characters. Unfortunately, when that happens,
we end up with double-escaped backslashes, giving us a wrong path,
making our action fail.

We could try un-double-escaping our paths, but that would be complicated
and, I think, error-prone. The easiest way forward seemed to simply use
the `tarfile` module.

Why use it only for listing? Because the `unarchive` option also
supports the `extra_opts` option, and that supporting this would require
us to mimick `tar`'s interface.

For listing files, however, I don't think that the loss of `extra_opts`
support causes problems (well, I hope so).

* unarchive: re-add xz decompression support

Following previous change to use Python's `tarfile` module for tar file
listing, we lost `xz` decompression support. This commits re-add it by
adding a special case in `TarXzArchive` that pre-decompresses the source
file.
2016-12-08 11:24:26 -05:00
Dag Wieers a26188e55d Making unarchive idempotent (#3307)
* WIP: Making unarchive idempotent

Currently unarchive is not idempotent and has many rough edges and bugs.
The current release is a workable improvement on many fronts:

- zip support is now idempotent (but gtar lacks check-mode)
- New option `exclude` to exclude specific paths/files
- New option `keep_newer` to exclude newer files on target
- New option `extra_opts` to influence unzip/gtar (like synchronize module)

The following items are still ongoing:

- Implement CRC32 support for .zip files
- Re-implement the zip support using native zipfile module
- Re-implement the gtar support using native tarfile/gzip/bz2 modules (lzma external)
- Implement check-mode (works in gzip, but fails using gtar)
- Implement diff-mode (discuss an appropriate output model, like synchronize module)

The re-implementation of unzip/gtar support using native python modules will not only simplify the codebase, additional functionality can be implemented correctly and identically, which is currently not possible. (Other archives could be implemented using native modules equally, incl. options)

* Assorted fixes to zip support (during quality checks)

- Support both rw---- and rwx--- permstr
- Better file type support (more qa needed)
- Symlink support
- Include fix from #3229

* Implement zip diff-mode (itemized change) and avoid changes permissions every time (!)

This commit implements:
- rsync-compatible itemized-change output in diff-mode (using zip)
- no longer changing permissions unconditionally (when idempotent)

* Small fixes to itemized change output

* Fixes to user/group ownership changes

- The implementation of user/group ownership is a bit more complex for idempotency
- We report when a ZIP file incorrectly tags a directory as a file/link
- We only offer diff output when there is a change

* Fix the handling of includes and excludes for unzip

* Remove test output from output (confuses easily)

* Logic and performance improvements to ownership handling, and umask fix

* Handle special files (type '?')

* Make exceptions compatible with python 2.4

* Implement CRC32 support

* Revert some unintended/unknown changes ?

* Taking over maintenance as offered by current maintainer

* Fix support for white-spaces in filenames

* Remove/rename incorrect regex

* Ensure that fat executables end up with execute permission

* Remove check_result from output when unchanged

* When unarchiving as a user, or when owner/group/mode is supplied --diff is insufficient

Only way to be sure is to check request with what is on disk (as we do for zip).
Leave this up to set_fs_attributes_if_different() instead of inducing a (false) change

* By default, don't send confusing check_results in verbose output

This fixes #74.
2016-12-08 11:24:18 -05:00
Dag Wieers 20b7757032 Ensure that a download failure is properly raised before the read fails
Without this change, a download failure may bail out with the message:

    "Failure downloading http://foo/bar, 'NoneType' object has no attribute 'read'"

whereas with this fix, you'd get a proper error like:

    "Failure downloading http://foo/bar, Request failed: <urlopen error [Errno 113] No route to host>"

or one of the many other possible download errors that can occur.
2016-12-08 11:24:10 -05:00
Toshio Kuratomi ecafdeeaa5 Set some module parameters to type=path 2016-12-08 11:24:08 -05:00
Dylan Martin 579e444243 improved error message when no handler found 2016-12-08 11:23:50 -05:00
Markus Juenemann 47065c2a43 Removed check whether destination directory is writable from files/unarchive.py. This check will prevent extraction of an archive if the archive does not actually write to the destination directory but only writes to any writable sub-directories of it. The underlying tar command will report errors should it try to write to read-only directories. 2016-12-08 11:23:29 -05:00
Brian Coca 60d160a2e9 Also document in example that unarchive download was added in 2.0 2016-12-08 11:23:20 -05:00
verm666 6acfa5fcee unarchive: fix @bcoca's remarks, issue #1575 2016-12-08 11:23:16 -05:00
verm666 b898cb656b unarchive: fix work with 0 bytes archives
This change is in response to issue #1575
2016-12-08 11:23:15 -05:00
Toshio Kuratomi 5f27a073ba Bump amount of file to download in a chunk to 64k. 2016-12-08 11:23:11 -05:00
Jonathan Mainguy dd0659c83d add download ability to unarchive module 2016-12-08 11:23:11 -05:00
Greg DeKoenigsberg eb881d7d5d Proper author info for all remaining modules 2016-12-08 11:23:07 -05:00
Brian Coca 0567404c03 generic fix for Exceptions that heppen when trying to set permissions on extracted files fixes ansible/ansible#10934 which is really a corner case 2016-12-08 11:22:58 -05:00
Toshio Kuratomi 1ddae11bd1 Implement feature to return list of files in the archive 2016-12-08 11:22:54 -05:00
Toshio Kuratomi 02b8e17f61 Tar --diff only sends output to stderr if a file is missing. Handle that case
Fixes #1064
2016-12-08 11:22:54 -05:00
mrsheepuk 31421374c0 Doc change - make clearer usage for existing remote file
Having read the doc for this module several times and completely missing that it can be used for existing remote archives, I propose this update to the wording to make clear from the top the two ways in which this module can be used.
2016-12-08 11:22:43 -05:00
Toshio Kuratomi e4a3e5fdd7 Prefer gtar to tar
Fixes #702
2016-12-08 11:22:40 -05:00
Toshio Kuratomi 547c90554a Standardize class names on Archive suffix.
This also removes the collision between the stdlib ZipFile class and the
module's ZipFile class

Fixes #681
2016-12-08 11:22:39 -05:00
Toshio Kuratomi 1728f9bba7 Add detection of uid,gid,mode changes when deciding whether an archive needs to be unarchived again. 2016-12-08 11:22:38 -05:00
Toshio Kuratomi f9a6ec95b0 Implement user,group,mode,selinux settings for unarchive.
This is a partial fix for #234.  Still have to figure out how to
make change reporting work as we can no longer rely on tar's --compare
option
2016-12-08 11:22:38 -05:00
Jon Hadfield f63ad7894e Remove redundant check for creates argument. 2016-12-08 11:22:23 -05:00
James Cammarata 429ab56e14 Adding file doc fragment to those modules in files/ missing it 2016-12-08 11:22:23 -05:00
Michael DeHaan 213e518165 file extensions! 2016-12-08 11:22:22 -05:00