def _get_osutil()

in azurelinuxagent/common/osutil/factory.py [0:0]


def _get_osutil(distro_name, distro_code_name, distro_version, distro_full_name):

    if distro_name == "photonos":
        return PhotonOSUtil()

    if distro_name == "arch":
        return ArchUtil()

    if "Clear Linux" in distro_full_name:
        return ClearLinuxUtil()

    if distro_name == "ubuntu":
        ubuntu_version = DistroVersion(distro_version)
        if ubuntu_version in [DistroVersion("12.04"), DistroVersion("12.10")]:
            return Ubuntu12OSUtil()
        if ubuntu_version in [DistroVersion("14.04"), DistroVersion("14.10")]:
            return Ubuntu14OSUtil()
        if ubuntu_version in [DistroVersion('16.04'), DistroVersion('16.10'), DistroVersion('17.04')]:
            return Ubuntu16OSUtil()
        if DistroVersion('18.04') <= ubuntu_version <= DistroVersion('24.04'):
            return Ubuntu18OSUtil()
        if distro_full_name == "Snappy Ubuntu Core":
            return UbuntuSnappyOSUtil()

        return UbuntuOSUtil()

    if distro_name == "alpine":
        return AlpineOSUtil()

    if distro_name == "kali":
        return DebianOSBaseUtil()

    if distro_name in ("flatcar", "coreos") or distro_code_name in ("flatcar", "coreos"):
        return CoreOSUtil()

    if distro_name in ("suse", "sle-micro", "sle_hpc", "sles", "opensuse"):
        if distro_full_name == 'SUSE Linux Enterprise Server' \
                and DistroVersion(distro_version) < DistroVersion('12') \
                or distro_full_name == 'openSUSE' and DistroVersion(distro_version) < DistroVersion('13.2'):
            return SUSE11OSUtil()

        return SUSEOSUtil()

    if distro_name == "debian":
        if "sid" in distro_version or DistroVersion(distro_version) > DistroVersion("7"):
            return DebianOSModernUtil()

        return DebianOSBaseUtil()

    # Devuan support only works with v4+ 
    # Reason is that Devuan v4 (Chimaera) uses python v3.9, in which the 
    # platform.linux_distribution module has been removed. This was unable
    # to distinguish between debian and devuan. The new distro.linux_distribution module
    # is able to distinguish between the two.

    if distro_name == "devuan" and DistroVersion(distro_version) >= DistroVersion("4"):
        return DevuanOSUtil()
        
    if distro_name in ("redhat", "rhel", "centos", "oracle", "almalinux",
                       "cloudlinux", "rocky"):
        if DistroVersion(distro_version) < DistroVersion("7"):
            return Redhat6xOSUtil()

        if DistroVersion(distro_version) >= DistroVersion("8.6"):
            return RedhatOSModernUtil()

        return RedhatOSUtil()

    if distro_name == "euleros":
        return RedhatOSUtil()

    if distro_name == "uos":
        return RedhatOSUtil()

    if distro_name == "freebsd":
        return FreeBSDOSUtil()

    if distro_name == "openbsd":
        return OpenBSDOSUtil()

    if distro_name == "bigip":
        return BigIpOSUtil()

    if distro_name == "gaia":
        return GaiaOSUtil()

    if distro_name == "iosxe":
        return IosxeOSUtil()

    if distro_name in ["mariner", "azurelinux"]:
        return MarinerOSUtil()

    if distro_name == "nsbsd":
        return NSBSDOSUtil()

    if distro_name == "openwrt":
        return OpenWRTOSUtil()

    if distro_name == "fedora":
        return FedoraOSUtil()

    logger.warn("Unable to load distro implementation for {0}. Using default distro implementation instead.", distro_name)
    return DefaultOSUtil()