distribution: Add support for Cumulus Linux (#52309)

* Refactored code
* Added support for Cumulus Linux 2.5.4
* Added support for Cumulus Linux 3.7.3
* Test added

Fixes: #29969

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde 2019-02-15 22:30:51 +05:30 committed by GitHub
parent 677c04c01d
commit db03f88b63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 24 deletions

View file

@ -1,17 +1,7 @@
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
# Copyright: (c) 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
@ -146,7 +136,7 @@ class DistributionFiles:
return parsed, dist_file_dict
except AttributeError as exc:
print('exc: %s' % exc)
# this should never happen, but if it does fail quitely and not with a traceback
# this should never happen, but if it does fail quietly and not with a traceback
return False, dist_file_dict
return True, dist_file_dict
@ -161,14 +151,14 @@ class DistributionFiles:
def _guess_distribution(self):
# try to find out which linux distribution this is
dist = (get_distribution(), get_distribution_version(), get_distribution_codename())
distribution_guess = {}
distribution_guess['distribution'] = dist[0] or 'NA'
distribution_guess['distribution_version'] = dist[1] or 'NA'
distribution_guess['distribution_major_version'] = \
distribution_guess['distribution_version'].split('.')[0] or 'NA'
# distribution_release can be the empty string
distribution_guess['distribution_release'] = 'NA' if dist[2] is None else dist[2]
distribution_guess = {
'distribution': dist[0] or 'NA',
'distribution_version': dist[1] or 'NA',
# distribution_release can be the empty string
'distribution_release': 'NA' if dist[2] is None else dist[2]
}
distribution_guess['distribution_major_version'] = distribution_guess['distribution_version'].split('.')[0] or 'NA'
return distribution_guess
def process_dist_files(self):
@ -344,6 +334,17 @@ class DistributionFiles:
if version:
debian_facts['distribution_version'] = version.group(1)
debian_facts['distribution_major_version'] = version.group(1)
elif 'Cumulus' in data:
debian_facts['distribution'] = 'Cumulus Linux'
version = re.search(r"VERSION_ID=(.*)", data)
if version:
major, _minor, _dummy_ver = version.group(1).split(".")
debian_facts['distribution_version'] = version.group(1)
debian_facts['distribution_major_version'] = major
release = re.search(r'VERSION="(.*)"', data)
if release:
debian_facts['distribution_release'] = release.groups()[0]
else:
return False, debian_facts
@ -459,7 +460,7 @@ class Distribution(object):
'Ascendos', 'CloudLinux', 'PSBM', 'OracleLinux', 'OVS',
'OEL', 'Amazon', 'Virtuozzo', 'XenServer', 'Alibaba'],
'Debian': ['Debian', 'Ubuntu', 'Raspbian', 'Neon', 'KDE neon',
'Linux Mint', 'SteamOS', 'Devuan', 'Kali'],
'Linux Mint', 'SteamOS', 'Devuan', 'Kali', 'Cumulus Linux'],
'Suse': ['SuSE', 'SLES', 'SLED', 'openSUSE', 'openSUSE Tumbleweed',
'SLES_SAP', 'SUSE_LINUX', 'openSUSE Leap'],
'Archlinux': ['Archlinux', 'Antergos', 'Manjaro'],

View file

@ -1110,7 +1110,53 @@ PRIVACY_POLICY_URL="http://www.intel.com/privacy"
"os_family": "Archlinux",
"distribution_version": "NA"
}
}
},
{
'name': "Cumulus Linux 3.7.3",
'input': {
'/etc/os-release': """NAME="Cumulus Linux"
VERSION_ID=3.7.3
VERSION="Cumulus Linux 3.7.3"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:3.7.3
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
"""
},
'platform.dist': ('debian', '8.11', ''),
'result': {
'distribution': 'Cumulus Linux',
'distribution_major_version': '3',
'distribution_release': 'Cumulus Linux 3.7.3',
'os_family': 'Debian',
'distribution_version': '3.7.3',
}
},
{
'name': "Cumulus Linux 2.5.4",
'input': {
'/etc/os-release': """NAME="Cumulus Linux"
VERSION_ID=2.5.4
VERSION="2.5.4-6dc6e80-201510091936-build"
PRETTY_NAME="Cumulus Linux"
ID=cumulus-linux
ID_LIKE=debian
CPE_NAME=cpe:/o:cumulusnetworks:cumulus_linux:2.5.4-6dc6e80-201510091936-build
HOME_URL="http://www.cumulusnetworks.com/"
SUPPORT_URL="http://support.cumulusnetworks.com/"
"""
},
'platform.dist': ('', '', ''),
'result': {
'distribution': 'Cumulus Linux',
'distribution_major_version': '2',
'distribution_release': '2.5.4-6dc6e80-201510091936-build',
'os_family': 'Debian',
'distribution_version': '2.5.4',
}
},
]