Get minor version number for CentOS and Debian (#57814)

* Get the most detailed version number from distro.version() for CentOS and Debian
* Update tests and fixtures
* Update fixture generation script to gather distro info and work with Python 3
* Update LinuxMint fixtures
* Cleanup fixture formatting
* Improvements based on feedback from abadger:
    - use unicode since that is what distro returns
    - use frozenset with a tuple
    - include link Debian to bug
This commit is contained in:
Sam Doran 2019-06-28 19:21:35 -04:00 committed by GitHub
parent 2f91266aa9
commit ab6a9ef130
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 514 additions and 305 deletions

View file

@ -16,6 +16,7 @@ import json
import sys import sys
from ansible.module_utils import distro from ansible.module_utils import distro
from ansible.module_utils._text import to_text
filelist = [ filelist = [
@ -53,13 +54,14 @@ dist = distro.linux_distribution(full_distribution_name=False)
facts = ['distribution', 'distribution_version', 'distribution_release', 'distribution_major_version', 'os_family'] facts = ['distribution', 'distribution_version', 'distribution_release', 'distribution_major_version', 'os_family']
try: try:
ansible_out = subprocess.check_output( b_ansible_out = subprocess.check_output(
['ansible', 'localhost', '-m', 'setup']) ['ansible', 'localhost', '-m', 'setup'])
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("ERROR: ansible run failed, output was: \n") print("ERROR: ansible run failed, output was: \n")
print(e.output) print(e.output)
sys.exit(e.returncode) sys.exit(e.returncode)
ansible_out = to_text(b_ansible_out)
parsed = json.loads(ansible_out[ansible_out.index('{'):]) parsed = json.loads(ansible_out[ansible_out.index('{'):])
ansible_facts = {} ansible_facts = {}
for fact in facts: for fact in facts:
@ -72,6 +74,13 @@ nicename = ansible_facts['distribution'] + ' ' + ansible_facts['distribution_ver
output = { output = {
'name': nicename, 'name': nicename,
'distro': {
'codename': distro.codename(),
'id': distro.id(),
'name': distro.name(),
'version': distro.version(),
'version_best': distro.version(best=True),
},
'input': fcont, 'input': fcont,
'platform.dist': dist, 'platform.dist': dist,
'result': ansible_facts, 'result': ansible_facts,

View file

@ -50,8 +50,35 @@ def get_distribution_version():
the version, it returns empty string. If this is not run on a Linux machine it returns None the version, it returns empty string. If this is not run on a Linux machine it returns None
''' '''
version = None version = None
needs_best_version = frozenset((
u'centos',
u'debian',
))
if platform.system() == 'Linux': if platform.system() == 'Linux':
version = distro.version() version = distro.version()
distro_id = distro.id()
if version is not None:
if distro_id in needs_best_version:
version_best = distro.version(best=True)
# CentoOS maintainers believe only the major version is appropriate
# but Ansible users desire minor version information, e.g., 7.5.
# https://github.com/ansible/ansible/issues/50141#issuecomment-449452781
if distro_id == u'centos':
version = u'.'.join(version_best.split(u'.')[:2])
# Debian does not include minor version in /etc/os-release.
# Bug report filed upstream requesting this be added to /etc/os-release
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931197
if distro_id == u'debian':
version = version_best
else:
version = u''
return version return version

File diff suppressed because it is too large Load diff