fix distribution fact for SLES4SAP (#71559) (#72029)

b6b238a fixed the SLES4SAP detection, which was at this time ok.
Sadly Suse changed with SLES 15 the /etc/os-release file, so the above
change will no longer work.

This commit updates the SLES4SAP detection regarding
https://www.suse.com/support/kb/doc/?id=000019341.

The symlink realpath is matched with endswith, because in SLES 12+ the
link target is SLES_SAP.prod, but in SLES 11 the link target is
SUSE_SLES_SAP.prod.

(cherry picked from commit ea119d3089)
pull/72336/head
Christian Loos 5 years ago committed by GitHub
parent 30e735c4d8
commit 4a1555fb0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- facts - fix distribution fact for SLES4SAP (https://github.com/ansible/ansible/pull/71559).

@ -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):

@ -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)

@ -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": {

Loading…
Cancel
Save