diff --git a/changelogs/fragments/71559-fix-distribution-fact-sles4sap.yaml b/changelogs/fragments/71559-fix-distribution-fact-sles4sap.yaml new file mode 100644 index 00000000000..ce0a118dfcd --- /dev/null +++ b/changelogs/fragments/71559-fix-distribution-fact-sles4sap.yaml @@ -0,0 +1,2 @@ +bugfixes: + - facts - fix distribution fact for SLES4SAP (https://github.com/ansible/ansible/pull/71559). diff --git a/lib/ansible/module_utils/facts/system/distribution.py b/lib/ansible/module_utils/facts/system/distribution.py index 0964c1e6330..57691dbf911 100644 --- a/lib/ansible/module_utils/facts/system/distribution.py +++ b/lib/ansible/module_utils/facts/system/distribution.py @@ -270,10 +270,6 @@ class DistributionFiles: else: release = "0" # no minor number, so it is the first release suse_facts['distribution_release'] = release - # Starting with SLES4SAP12 SP3 NAME reports 'SLES' instead of 'SLES_SAP' - # According to SuSe Support (SR101182877871) we should use the CPE_NAME to detect SLES4SAP - if re.search("^CPE_NAME=.*sles_sap.*$", line): - suse_facts['distribution'] = 'SLES_SAP' elif path == '/etc/SuSE-release': if 'open' in data.lower(): data = data.splitlines() @@ -296,6 +292,10 @@ class DistributionFiles: suse_facts['distribution_release'] = release.group(1) suse_facts['distribution_version'] = collected_facts['distribution_version'] + '.' + release.group(1) + # See https://www.suse.com/support/kb/doc/?id=000019341 for SLES for SAP + if os.path.islink('/etc/products.d/baseproduct') and os.path.realpath('/etc/products.d/baseproduct').endswith('SLES_SAP.prod'): + suse_facts['distribution'] = 'SLES_SAP' + return True, suse_facts def parse_distribution_file_Debian(self, name, data, path, collected_facts): diff --git a/test/units/module_utils/facts/system/distribution/test_distribution_sles4sap.py b/test/units/module_utils/facts/system/distribution/test_distribution_sles4sap.py new file mode 100644 index 00000000000..ab465eaec98 --- /dev/null +++ b/test/units/module_utils/facts/system/distribution/test_distribution_sles4sap.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Copyright: (c) 2020 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + +import pytest + +from ansible.module_utils.facts.system.distribution import DistributionFiles + + +@pytest.mark.parametrize('realpath', ('SUSE_SLES_SAP.prod', 'SLES_SAP.prod')) +def test_distribution_sles4sap_suse_sles_sap(mock_module, mocker, realpath): + mocker.patch('os.path.islink', return_value=True) + mocker.patch('os.path.realpath', return_value='/etc/products.d/' + realpath) + + test_input = { + 'name': 'SUSE', + 'path': '', + 'data': 'suse', + 'collected_facts': None, + } + + test_result = ( + True, + { + 'distribution': 'SLES_SAP', + } + ) + + distribution = DistributionFiles(module=mock_module()) + assert test_result == distribution.parse_distribution_file_SUSE(**test_input) diff --git a/test/units/module_utils/test_distribution_version.py b/test/units/module_utils/test_distribution_version.py index 68d27c27013..36765f74e88 100644 --- a/test/units/module_utils/test_distribution_version.py +++ b/test/units/module_utils/test_distribution_version.py @@ -392,60 +392,6 @@ TESTSETS = [ "distribution_version": "12.1", } }, - { - "name": "SLES4SAP 12 SP2", - "input": { - "/etc/SuSE-release": ( - 'SUSE Linux Enterprise Server 12 (x86_64)\nVERSION = 12\nPATCHLEVEL = 2\n' - '# This file is deprecated and will be removed in a future service pack or release.\n' - '# Please check /etc/os-release for details about this release.'), - "/etc/os-release": ( - 'NAME="SLES_SAP"\nVERSION="12-SP2"\nVERSION_ID="12.2"\nPRETTY_NAME="SUSE Linux Enterprise Server for SAP Applications 12 SP2"\n' - 'ID="sles_sap"\nANSI_COLOR="0;32"\nCPE_NAME="cpe:/o:suse:sles_sap:12:sp2"'), - }, - "platform.dist": ['SuSE', '12', 'x86_64'], - 'distro': { - 'codename': '', - 'id': 'sles', - 'name': 'SUSE Linux Enterprise Server', - 'version': '12.2', - 'version_best': '12.2', - }, - "result": { - "distribution": "SLES_SAP", - "distribution_major_version": "12", - "distribution_release": "2", - "os_family": "Suse", - "distribution_version": "12.2", - } - }, - { - "name": "SLES4SAP 12 SP3", - "input": { - "/etc/SuSE-release": ( - 'SUSE Linux Enterprise Server 12 (x86_64)VERSION = 12PATCHLEVEL = 3' - '\n# This file is deprecated and will be removed in a future service pack or release.\n' - '# Please check /etc/os-release for details about this release.'), - "/etc/os-release": ( - 'NAME="SLES"\nVERSION="12-SP3"\nVERSION_ID="12.3"\nPRETTY_NAME="SUSE Linux Enterprise Server 12 SP3"\n' - 'ID="sles"\nANSI_COLOR="0;32"\nCPE_NAME="cpe:/o:suse:sles_sap:12:sp3"'), - }, - "platform.dist": ['SuSE', '12', 'x86_64'], - 'distro': { - 'codename': '', - 'id': 'sles', - 'name': 'SUSE Linux Enterprise Server', - 'version': '12.3', - 'version_best': '12.3', - }, - "result": { - "distribution": "SLES_SAP", - "distribution_major_version": "12", - "distribution_release": "3", - "os_family": "Suse", - "distribution_version": "12.3", - } - }, { "name": "Debian stretch/sid", "input": {