Handle forwarded exceptions from dnf5-5.2.13 (#84933)

pull/78111/head
Matt Martz 8 months ago committed by GitHub
parent 462affa7c4
commit 6a274d8456
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,2 @@
bugfixes:
- dnf5 - Handle forwarded exceptions from dnf5-5.2.13 where a generic ``RuntimeError`` was previously raised

@ -364,6 +364,8 @@ from ansible.module_utils.common.respawn import has_respawned, probe_interpreter
from ansible.module_utils.yumdnf import YumDnf, yumdnf_argument_spec from ansible.module_utils.yumdnf import YumDnf, yumdnf_argument_spec
libdnf5 = None libdnf5 = None
# Through dnf5-5.2.12 all exceptions raised through swig became RuntimeError
LIBDNF5_ERROR = RuntimeError
def is_installed(base, spec): def is_installed(base, spec):
@ -421,7 +423,7 @@ def is_newer_version_installed(base, spec):
try: try:
spec_nevra = next(iter(libdnf5.rpm.Nevra.parse(spec))) spec_nevra = next(iter(libdnf5.rpm.Nevra.parse(spec)))
except (RuntimeError, StopIteration): except (LIBDNF5_ERROR, StopIteration):
return False return False
spec_version = spec_nevra.get_version() spec_version = spec_nevra.get_version()
@ -515,12 +517,19 @@ class Dnf5Module(YumDnf):
os.environ["LANGUAGE"] = os.environ["LANG"] = locale os.environ["LANGUAGE"] = os.environ["LANG"] = locale
global libdnf5 global libdnf5
global LIBDNF5_ERROR
has_dnf = True has_dnf = True
try: try:
import libdnf5 # type: ignore[import] import libdnf5 # type: ignore[import]
except ImportError: except ImportError:
has_dnf = False has_dnf = False
try:
import libdnf5.exception # type: ignore[import-not-found]
LIBDNF5_ERROR = libdnf5.exception.Error
except (ImportError, AttributeError):
pass
if has_dnf: if has_dnf:
return return
@ -574,7 +583,7 @@ class Dnf5Module(YumDnf):
try: try:
base.load_config() base.load_config()
except RuntimeError as e: except LIBDNF5_ERROR as e:
self.module.fail_json( self.module.fail_json(
msg=str(e), msg=str(e),
conf_file=self.conf_file, conf_file=self.conf_file,
@ -737,7 +746,7 @@ class Dnf5Module(YumDnf):
for spec in self.names: for spec in self.names:
try: try:
goal.add_remove(spec, settings) goal.add_remove(spec, settings)
except RuntimeError as e: except LIBDNF5_ERROR as e:
self.module.fail_json(msg=str(e), failures=[], rc=1) self.module.fail_json(msg=str(e), failures=[], rc=1)
if self.autoremove: if self.autoremove:
for pkg in get_unneeded_pkgs(base): for pkg in get_unneeded_pkgs(base):
@ -746,7 +755,7 @@ class Dnf5Module(YumDnf):
goal.set_allow_erasing(self.allowerasing) goal.set_allow_erasing(self.allowerasing)
try: try:
transaction = goal.resolve() transaction = goal.resolve()
except RuntimeError as e: except LIBDNF5_ERROR as e:
self.module.fail_json(msg=str(e), failures=[], rc=1) self.module.fail_json(msg=str(e), failures=[], rc=1)
if transaction.get_problems(): if transaction.get_problems():

Loading…
Cancel
Save