File: //opt/microsoft/omsagent/tst/modules/install/check_os.py
# inspired by omsagent.py
from error_codes import *
from errors import error_info
from helpers import get_os_bits, get_os_version
supported_dists = {'redhat' : ['6', '7', '8'], # CentOS
'centos' : ['6', '7', '8'], # CentOS
'red hat' : ['6', '7', '8'], # Oracle, RHEL
'oracle' : ['6', '7', '8'], # Oracle
'debian' : ['8', '9'], # Debian
'ubuntu' : ['14.04', '16.04', '18.04', '20.04'], # Ubuntu
'suse' : ['12'], 'sles' : ['15'], # SLES
'amzn' : ['2017.09']
}
# print out warning if running the wrong version of OS
def get_alternate_versions(supported_dist):
versions = supported_dists[supported_dist]
last = versions.pop()
if (versions == []):
s = "{0}".format(last)
else:
s = "{0} or {1}".format(', '.join(versions), last)
return s
def check_vm_supported(vm_dist, vm_ver):
vm_supported = False
# find VM distribution in supported list
vm_supported_dist = None
for supported_dist in (supported_dists.keys()):
if (not vm_dist.lower().startswith(supported_dist)):
continue
vm_supported_dist = supported_dist
# check if version is supported
vm_ver_split = vm_ver.split('.')
for supported_ver in (supported_dists[supported_dist]):
supported_ver_split = supported_ver.split('.')
vm_ver_match = True
# try matching VM version with supported version
for (idx, supported_ver_num) in enumerate(supported_ver_split):
try:
supported_ver_num = int(supported_ver_num)
vm_ver_num = int(vm_ver_split[idx])
if (vm_ver_num is not supported_ver_num):
vm_ver_match = False
break
except (IndexError, ValueError) as e:
vm_ver_match = False
break
# check if successful in matching
if (vm_ver_match):
vm_supported = True
break
# check if any version successful in matching
if (vm_supported):
return NO_ERROR
# VM distribution is supported, but not current version
if (vm_supported_dist != None):
alt_vers = get_alternate_versions(vm_supported_dist)
error_info.append((vm_dist, vm_ver, alt_vers))
return ERR_OS_VER
# VM distribution isn't supported
else:
error_info.append((vm_dist,))
return ERR_OS
def check_os():
# 32 bit or 64 bit
cpu_bits = get_os_bits()
if (cpu_bits == None or (cpu_bits not in ['32-bit', '64-bit'])):
return ERR_BITS
# get OS version
vm_info = get_os_version()
if (vm_info == None):
return ERR_FINDING_OS
# check if OS version is supported
(vm_dist, vm_ver) = vm_info
return check_vm_supported(vm_dist, vm_ver)