From fbd828673de3d4eed525a982d75ace39a1f9eef1 Mon Sep 17 00:00:00 2001 From: Johanan Liebermann Date: Wed, 7 Sep 2022 20:14:12 +0300 Subject: [PATCH] Fix distro fact handling for Flatcar (#77635) * Fix distro fact handling for Flatcar The existence of the file /etc/flatcar/update.conf depends on bootstrap configuration typically provided by the user. For that reason this file is unsuitable for determining distro facts for Flatcar Container Linux. The distribution_release fact is meaningless in the case of Flatcar since Flatcar doesn't have named releases. The distribution_version fact, however, IS meaningful and should contain a number such as "3139.2.0". - Use /etc/os-release instead of /etc/flatcar/update.conf. - Drop the distribution_release fact. - Set the distribution_version fact. - Update distro test fixture for Flatcar - Generate the fixture using gen_distribution_version_testcase.py. - Override result.distribution and result.os_family manually as the generator script gives wrong values. - Use a recent Flatcar version. Signed-off-by: Johanan Liebermann --- .../gen_distribution_version_testcase.py | 1 - .../module_utils/facts/system/distribution.py | 18 ++++---- .../fixtures/flatcar_2492.0.0.json | 24 ----------- .../fixtures/flatcar_3139.2.0.json | 43 +++++++++++++++++++ 4 files changed, 53 insertions(+), 33 deletions(-) delete mode 100644 test/units/module_utils/facts/system/distribution/fixtures/flatcar_2492.0.0.json create mode 100644 test/units/module_utils/facts/system/distribution/fixtures/flatcar_3139.2.0.json diff --git a/hacking/tests/gen_distribution_version_testcase.py b/hacking/tests/gen_distribution_version_testcase.py index e520d121a43..2fc5a2f9328 100755 --- a/hacking/tests/gen_distribution_version_testcase.py +++ b/hacking/tests/gen_distribution_version_testcase.py @@ -41,7 +41,6 @@ filelist = [ '/etc/altlinux-release', '/etc/os-release', '/etc/coreos/update.conf', - '/etc/flatcar/update.conf', '/usr/lib/os-release', ] diff --git a/lib/ansible/module_utils/facts/system/distribution.py b/lib/ansible/module_utils/facts/system/distribution.py index 7f8c875c649..d08741520a3 100644 --- a/lib/ansible/module_utils/facts/system/distribution.py +++ b/lib/ansible/module_utils/facts/system/distribution.py @@ -75,7 +75,7 @@ class DistributionFiles: {'path': '/etc/sourcemage-release', 'name': 'SMGL'}, {'path': '/usr/lib/os-release', 'name': 'ClearLinux'}, {'path': '/etc/coreos/update.conf', 'name': 'Coreos'}, - {'path': '/etc/flatcar/update.conf', 'name': 'Flatcar'}, + {'path': '/etc/os-release', 'name': 'Flatcar'}, {'path': '/etc/os-release', 'name': 'NA'}, ) @@ -453,15 +453,17 @@ class DistributionFiles: flatcar_facts = {} distro = get_distribution() - if distro.lower() == 'flatcar': - if not data: - return False, flatcar_facts - release = re.search("^GROUP=(.*)", data) - if release: - flatcar_facts['distribution_release'] = release.group(1).strip('"') - else: + if distro.lower() != 'flatcar': return False, flatcar_facts + if not data: + return False, flatcar_facts + + version = re.search("VERSION=(.*)", data) + if version: + flatcar_facts['distribution_major_version'] = version.group(1).strip('"').split('.')[0] + flatcar_facts['distribution_version'] = version.group(1).strip('"') + return True, flatcar_facts def parse_distribution_file_ClearLinux(self, name, data, path, collected_facts): diff --git a/test/units/module_utils/facts/system/distribution/fixtures/flatcar_2492.0.0.json b/test/units/module_utils/facts/system/distribution/fixtures/flatcar_2492.0.0.json deleted file mode 100644 index 618b22598cf..00000000000 --- a/test/units/module_utils/facts/system/distribution/fixtures/flatcar_2492.0.0.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Flatcar Container Linux", - "input": { - "/usr/lib/os-release": "NAME=\"Flatcar Container Linux by Kinvolk\"\nID=flatcar\nID_LIKE=coreos\nVERSION=2492.0.0\nVERSION_ID=2492.0.0\nBUILD_ID=2020-04-28-2210\nPRETTY_NAME=\"Flatcar Container Linux by Kinvolk 2492.0.0 (Rhyolite)\"\nANSI_COLOR=\"38;5;75\"\nHOME_URL=\"https://flatcar-linux.org/\"\nBUG_REPORT_URL=\"https://issues.flatcar-linux.org\"", - "/etc/lsb-release": "DISTRIB_ID=\"Flatcar Container Linux by Kinvolk\"\nDISTRIB_RELEASE=2492.0.0\nDISTRIB_CODENAME=\"Rhyolite\"\nDISTRIB_DESCRIPTION=\"Flatcar Container Linux by Kinvolk 2492.0.0 (Rhyolite)\"" - }, - "platform.dist": ["", "", ""], - "distro": { - "codename": "Rhyolite", - "id": "flatcar", - "id_like": "coreos", - "name": "Flatcar", - "version": "2492.0.0", - "version_best": "2492.0.0", - "os_release_info": {}, - "lsb_release_info": {} - }, - "platform.release": "", - "result": { - "distribution": "Flatcar", - "distribution_major_version": "2492", - "distribution_version": "2492.0.0" - } -} diff --git a/test/units/module_utils/facts/system/distribution/fixtures/flatcar_3139.2.0.json b/test/units/module_utils/facts/system/distribution/fixtures/flatcar_3139.2.0.json new file mode 100644 index 00000000000..3cd7fa7cc23 --- /dev/null +++ b/test/units/module_utils/facts/system/distribution/fixtures/flatcar_3139.2.0.json @@ -0,0 +1,43 @@ +{ + "name": "Flatcar Container Linux by Kinvolk 3139.2.0", + "distro": { + "codename": "", + "id": "flatcar", + "name": "Flatcar Container Linux by Kinvolk", + "version": "3139.2.0", + "version_best": "3139.2.0", + "lsb_release_info": {}, + "os_release_info": { + "name": "Flatcar Container Linux by Kinvolk", + "id": "flatcar", + "id_like": "coreos", + "version": "3139.2.0", + "version_id": "3139.2.0", + "build_id": "2022-04-05-1803", + "pretty_name": "Flatcar Container Linux by Kinvolk 3139.2.0 (Oklo)", + "ansi_color": "38;5;75", + "home_url": "https://flatcar-linux.org/", + "bug_report_url": "https://issues.flatcar-linux.org", + "flatcar_board": "amd64-usr", + "cpe_name": "cpe:2.3:o:flatcar-linux:flatcar_linux:3139.2.0:*:*:*:*:*:*:*" + } + }, + "input": { + "/etc/os-release": "NAME=\"Flatcar Container Linux by Kinvolk\"\nID=flatcar\nID_LIKE=coreos\nVERSION=3139.2.0\nVERSION_ID=3139.2.0\nBUILD_ID=2022-04-05-1803\nPRETTY_NAME=\"Flatcar Container Linux by Kinvolk 3139.2.0 (Oklo)\"\nANSI_COLOR=\"38;5;75\"\nHOME_URL=\"https://flatcar-linux.org/\"\nBUG_REPORT_URL=\"https://issues.flatcar-linux.org\"\nFLATCAR_BOARD=\"amd64-usr\"\nCPE_NAME=\"cpe:2.3:o:flatcar-linux:flatcar_linux:3139.2.0:*:*:*:*:*:*:*\"\n", + "/etc/lsb-release": "DISTRIB_ID=\"Flatcar Container Linux by Kinvolk\"\nDISTRIB_RELEASE=3139.2.0\nDISTRIB_CODENAME=\"Oklo\"\nDISTRIB_DESCRIPTION=\"Flatcar Container Linux by Kinvolk 3139.2.0 (Oklo)\"\n", + "/usr/lib/os-release": "NAME=\"Flatcar Container Linux by Kinvolk\"\nID=flatcar\nID_LIKE=coreos\nVERSION=3139.2.0\nVERSION_ID=3139.2.0\nBUILD_ID=2022-04-05-1803\nPRETTY_NAME=\"Flatcar Container Linux by Kinvolk 3139.2.0 (Oklo)\"\nANSI_COLOR=\"38;5;75\"\nHOME_URL=\"https://flatcar-linux.org/\"\nBUG_REPORT_URL=\"https://issues.flatcar-linux.org\"\nFLATCAR_BOARD=\"amd64-usr\"\nCPE_NAME=\"cpe:2.3:o:flatcar-linux:flatcar_linux:3139.2.0:*:*:*:*:*:*:*\"\n" + }, + "platform.dist": [ + "flatcar", + "3139.2.0", + "" + ], + "result": { + "distribution": "Flatcar", + "distribution_version": "3139.2.0", + "distribution_release": "NA", + "distribution_major_version": "3139", + "os_family": "Flatcar" + }, + "platform.release": "5.15.32-flatcar" +}