From e7be0aa326b2500b72f03126a4d8b91cea9e5a31 Mon Sep 17 00:00:00 2001 From: Hook25 Date: Fri, 14 Mar 2025 15:19:37 +0100 Subject: [PATCH 1/2] Os release should always provide codename --- providers/resource/bin/os_resource.py | 19 ++++++++++------- providers/resource/tests/test_os_resource.py | 22 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/providers/resource/bin/os_resource.py b/providers/resource/bin/os_resource.py index 1df731b213..eea5018fd7 100755 --- a/providers/resource/bin/os_resource.py +++ b/providers/resource/bin/os_resource.py @@ -38,13 +38,18 @@ def get_release_info(release_file_content: str): "VERSION_CODENAME": "codename", } os_release = {} - for line in release_file_content.strip().splitlines(): - if line: - (key, value) = line.split("=", 1) - if key in os_release_map: - k = os_release_map[key] - # Strip out quotes and newlines - os_release[k] = re.sub('["\n]', "", value) + lines = filter(bool, release_file_content.strip().splitlines()) + for line in lines: + (key, value) = line.split("=", 1) + if key in os_release_map: + k = os_release_map[key] + # Strip out quotes and newlines + os_release[k] = re.sub('["\n]', "", value) + # this is needed by C3, on core there is no VERSION_CODENAME, lets put + # description here by default which will yield + os_release["codename"] = os_release.get( + "codename", os_release.get("description", "unknown") + ) return os_release diff --git a/providers/resource/tests/test_os_resource.py b/providers/resource/tests/test_os_resource.py index 43e5f0a0d0..01fc197a39 100644 --- a/providers/resource/tests/test_os_resource.py +++ b/providers/resource/tests/test_os_resource.py @@ -71,3 +71,25 @@ def test_get_release_info_empty_lines(self): "codename": "jammy", } self.assertEqual(os_release, expected) + + def test_get_release_info_core_no_codename(self): + # core doesn't have codename + os_release_data = textwrap.dedent( + """ + NAME="Ubuntu Core" + VERSION="22" + ID=ubuntu-core + PRETTY_NAME="Ubuntu Core 22" + VERSION_ID="22" + HOME_URL="https://snapcraft.io/" + BUG_REPORT_URL="https://bugs.launchpad.net/snappy/ + """ + ).strip() + os_release = os_resource.get_release_info(os_release_data) + expected = { + "distributor_id": "Ubuntu Core", + "description": "Ubuntu Core 22", + "release": "22", + "codename": "Ubuntu Core 22", + } + self.assertEqual(os_release, expected) From dcb22f8f410928b24696c2ce643f15f8ac2d5df4 Mon Sep 17 00:00:00 2001 From: Hook25 Date: Fri, 14 Mar 2025 15:56:58 +0100 Subject: [PATCH 2/2] Remember to finish comments --- providers/resource/bin/os_resource.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/providers/resource/bin/os_resource.py b/providers/resource/bin/os_resource.py index eea5018fd7..16ade0b9d0 100755 --- a/providers/resource/bin/os_resource.py +++ b/providers/resource/bin/os_resource.py @@ -46,7 +46,8 @@ def get_release_info(release_file_content: str): # Strip out quotes and newlines os_release[k] = re.sub('["\n]', "", value) # this is needed by C3, on core there is no VERSION_CODENAME, lets put - # description here by default which will yield + # description (PRETTY_NAME) here by default or unknown (which should be + # impossible but resources aren't supposed to crash) os_release["codename"] = os_release.get( "codename", os_release.get("description", "unknown") )