1
0
Fork 0
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:
Felix Fontein 2022-10-20 20:32:18 +02:00 committed by GitHub
parent c3bdc4b394
commit 5aa1e58749
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 10 deletions

View 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)."

View file

@ -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

View file

@ -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: