MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: machen (1008)
PHP: 8.2.31
Disabled: NONE
Upload Files
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)