From a0158978ceaf81f567abe4d3ff4757ede2e12671 Mon Sep 17 00:00:00 2001 From: Tatiana Tereshchenko Date: Thu, 11 Feb 2021 20:13:56 +0100 Subject: [PATCH 1/2] Fix parsing of is_layered configuration parameter for Distribution Trees closes #8245 https://pulp.plan.io/issues/8245 --- CHANGES/8245.bugfix | 1 + pulp_rpm/app/kickstart/treeinfo.py | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 CHANGES/8245.bugfix diff --git a/CHANGES/8245.bugfix b/CHANGES/8245.bugfix new file mode 100644 index 000000000..75da45e8d --- /dev/null +++ b/CHANGES/8245.bugfix @@ -0,0 +1 @@ +Fixed DistributionTree parsing for boolean fields which could cause a failure at sync or migration time. diff --git a/pulp_rpm/app/kickstart/treeinfo.py b/pulp_rpm/app/kickstart/treeinfo.py index 2b3504cc6..cab75d620 100644 --- a/pulp_rpm/app/kickstart/treeinfo.py +++ b/pulp_rpm/app/kickstart/treeinfo.py @@ -1,3 +1,5 @@ +import json + from gettext import gettext as _ from configparser import MissingSectionHeaderError from urllib.parse import urljoin @@ -140,6 +142,11 @@ def parsed_sections(self): if build_timestamp and parser._sections.get("tree", {}).get("build_timestamp"): parser._sections["tree"]["build_timestamp"] = build_timestamp + release = self.original_parser._sections.get("release", {}) + + if "is_layered" in release: + parser._sections["release"]["is_layered"] = json.loads(release["is_layered"]) + return parser._sections From 84c558262e0b7c693907eb2c7d7db24bc634e60b Mon Sep 17 00:00:00 2001 From: Grant Gainey Date: Wed, 17 Feb 2021 15:51:06 -0500 Subject: [PATCH 2/2] Fix remaining path where is_layered could be a string. re #8245 --- pulp_rpm/app/kickstart/treeinfo.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pulp_rpm/app/kickstart/treeinfo.py b/pulp_rpm/app/kickstart/treeinfo.py index cab75d620..df18701e1 100644 --- a/pulp_rpm/app/kickstart/treeinfo.py +++ b/pulp_rpm/app/kickstart/treeinfo.py @@ -1,5 +1,4 @@ import json - from gettext import gettext as _ from configparser import MissingSectionHeaderError from urllib.parse import urljoin @@ -193,12 +192,18 @@ def distribution_tree(self): ) if self._data.get("release"): + is_layered = self._data["release"].get("is_layered", False) + + # If we get is_layered, but it's a string - let json turn it into a boolean + if is_layered and isinstance(is_layered, str): + is_layered = json.loads(is_layered) + distribution_tree.update( { "release_name": self._data["release"]["name"], "release_short": self._data["release"]["short"], "release_version": self._data["release"]["version"], - "release_is_layered": self._data["release"].get("is_layered", False), + "release_is_layered": is_layered, } )