From 71280ee773e4fcff4439175433f3dfe2aaf8093d Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Thu, 27 Sep 2018 02:45:58 -0500 Subject: [PATCH] Handle dnf immutable mutable datatypes (#46176) In DNF < 3.0 are lists, and modifying them works In DNF >= 3.0 < 3.6 are lists, but modifying them doesn't work In DNF >= 3.6 have been turned into tuples, to communicate that modifying them doesn't work Further explanation of this is available via Adam Williamson from the Fedora QA Team. https://www.happyassassin.net/2018/06/27/adams-debugging-adventures-the-immutable-mutable-object/ Signed-off-by: Adam Miller --- lib/ansible/modules/packaging/os/dnf.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/ansible/modules/packaging/os/dnf.py b/lib/ansible/modules/packaging/os/dnf.py index 61b21bd7ae7..33b855ec937 100644 --- a/lib/ansible/modules/packaging/os/dnf.py +++ b/lib/ansible/modules/packaging/os/dnf.py @@ -505,13 +505,26 @@ class DnfModule(YumDnf): # Set installroot conf.installroot = installroot + # Handle different DNF versions immutable mutable datatypes and + # dnf v1/v2/v3 + # + # In DNF < 3.0 are lists, and modifying them works + # In DNF >= 3.0 < 3.6 are lists, but modifying them doesn't work + # In DNF >= 3.6 have been turned into tuples, to communicate that modifying them doesn't work + # + # https://www.happyassassin.net/2018/06/27/adams-debugging-adventures-the-immutable-mutable-object/ + # # Set excludes if self.exclude: - conf.exclude(self.exclude) - + _excludes = list(conf.exclude) + _excludes.extend(self.exclude) + conf.exclude = _excludes # Set disable_excludes if self.disable_excludes: - conf.disable_excludes.append(self.disable_excludes) + _disable_excludes = list(conf.disable_excludes) + if self.disable_excludes not in _disable_excludes: + _disable_excludes.append(self.disable_excludes) + conf.disable_excludes = _disable_excludes # Set releasever if self.releasever is not None: