mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Do not crash when lzma is not around. (#5393)
This commit is contained in:
parent
c3bdc4b394
commit
5aa1e58749
3 changed files with 39 additions and 10 deletions
2
changelogs/fragments/5393-archive.yml
Normal file
2
changelogs/fragments/5393-archive.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- "archive - avoid crash when ``lzma`` is not present and ``format`` is not ``xz`` (https://github.com/ansible-collections/community.general/pull/5393)."
|
|
@ -575,6 +575,11 @@ class TarArchive(Archive):
|
||||||
self.file.add(path, archive_name, recursive=False, exclude=py26_filter)
|
self.file.add(path, archive_name, recursive=False, exclude=py26_filter)
|
||||||
|
|
||||||
def _get_checksums(self, path):
|
def _get_checksums(self, path):
|
||||||
|
if HAS_LZMA:
|
||||||
|
LZMAError = lzma.LZMAError
|
||||||
|
else:
|
||||||
|
# Just picking another exception that's also listed below
|
||||||
|
LZMAError = tarfile.ReadError
|
||||||
try:
|
try:
|
||||||
if self.format == 'xz':
|
if self.format == 'xz':
|
||||||
with lzma.open(_to_native_ascii(path), 'r') as f:
|
with lzma.open(_to_native_ascii(path), 'r') as f:
|
||||||
|
@ -585,7 +590,7 @@ class TarArchive(Archive):
|
||||||
archive = tarfile.open(_to_native_ascii(path), 'r|' + self.format)
|
archive = tarfile.open(_to_native_ascii(path), 'r|' + self.format)
|
||||||
checksums = set((info.name, info.chksum) for info in archive.getmembers())
|
checksums = set((info.name, info.chksum) for info in archive.getmembers())
|
||||||
archive.close()
|
archive.close()
|
||||||
except (lzma.LZMAError, tarfile.ReadError, tarfile.CompressionError):
|
except (LZMAError, tarfile.ReadError, tarfile.CompressionError):
|
||||||
try:
|
try:
|
||||||
# The python implementations of gzip, bz2, and lzma do not support restoring compressed files
|
# The python implementations of gzip, bz2, and lzma do not support restoring compressed files
|
||||||
# to their original names so only file checksum is returned
|
# to their original names so only file checksum is returned
|
||||||
|
|
|
@ -12,6 +12,37 @@
|
||||||
# Make sure we start fresh
|
# Make sure we start fresh
|
||||||
|
|
||||||
# Test setup
|
# Test setup
|
||||||
|
- name: prep our files
|
||||||
|
copy: src={{ item }} dest={{remote_tmp_dir}}/{{ item }}
|
||||||
|
with_items:
|
||||||
|
- foo.txt
|
||||||
|
- bar.txt
|
||||||
|
- empty.txt
|
||||||
|
- sub
|
||||||
|
- sub/subfile.txt
|
||||||
|
|
||||||
|
# Run twice without lzma backport installed, to make sure it does not crash
|
||||||
|
- name: Archive - pre-test - first run
|
||||||
|
archive:
|
||||||
|
path: "{{ remote_tmp_dir }}/*.txt"
|
||||||
|
dest: "{{ remote_tmp_dir }}/archive_pretest_1.tar"
|
||||||
|
format: "tar"
|
||||||
|
register: pretest_1
|
||||||
|
|
||||||
|
- name: Archive - pre-test - second run
|
||||||
|
archive:
|
||||||
|
path: "{{ remote_tmp_dir }}/*.txt"
|
||||||
|
dest: "{{ remote_tmp_dir }}/archive_pretest_1.tar"
|
||||||
|
format: "tar"
|
||||||
|
register: pretest_2
|
||||||
|
|
||||||
|
- name: Archive - validate pre-test
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- pretest_1 is changed
|
||||||
|
- pretest_2 is not changed
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
- name: Ensure zip is present to create test archive (yum)
|
- name: Ensure zip is present to create test archive (yum)
|
||||||
yum: name=zip state=latest
|
yum: name=zip state=latest
|
||||||
when: ansible_facts.pkg_mgr == 'yum'
|
when: ansible_facts.pkg_mgr == 'yum'
|
||||||
|
@ -63,15 +94,6 @@
|
||||||
when: ansible_python_version.split('.')[0] == '2'
|
when: ansible_python_version.split('.')[0] == '2'
|
||||||
register: backports_lzma_pip
|
register: backports_lzma_pip
|
||||||
|
|
||||||
- name: prep our files
|
|
||||||
copy: src={{ item }} dest={{remote_tmp_dir}}/{{ item }}
|
|
||||||
with_items:
|
|
||||||
- foo.txt
|
|
||||||
- bar.txt
|
|
||||||
- empty.txt
|
|
||||||
- sub
|
|
||||||
- sub/subfile.txt
|
|
||||||
|
|
||||||
- name: Define formats to test
|
- name: Define formats to test
|
||||||
set_fact:
|
set_fact:
|
||||||
formats:
|
formats:
|
||||||
|
|
Loading…
Reference in a new issue