Skip to content
Open
18 changes: 11 additions & 7 deletions src/core/src/bootstrap/ConfigurationFactory.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

from core.src.package_managers.AptitudePackageManager import AptitudePackageManager
from core.src.package_managers.AzL3TdnfPackageManager import AzL3TdnfPackageManager
from core.src.package_managers.DnfPackageManager import DnfPackageManager
from core.src.package_managers.Dnf5PackageManager import Dnf5PackageManager
from core.src.package_managers.YumPackageManager import YumPackageManager
from core.src.package_managers.ZypperPackageManager import ZypperPackageManager
Expand Down Expand Up @@ -71,20 +72,23 @@ def __init__(self, log_file_path, events_folder, telemetry_supported):

self.configurations = {
'apt_prod_config': self.new_prod_configuration(Constants.APT, AptitudePackageManager),
'dnf5_prod_config': self.new_prod_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_prod_config': self.new_prod_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'dnf_prod_config': self.new_prod_configuration(Constants.DNF, DnfPackageManager),
'dnf5_prod_config': self.new_prod_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_prod_config': self.new_prod_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'yum_prod_config': self.new_prod_configuration(Constants.YUM, YumPackageManager),
'zypper_prod_config': self.new_prod_configuration(Constants.ZYPPER, ZypperPackageManager),

'apt_dev_config': self.new_dev_configuration(Constants.APT, AptitudePackageManager),
'dnf5_dev_config': self.new_dev_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_dev_config': self.new_dev_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'dnf_dev_config': self.new_dev_configuration(Constants.DNF, DnfPackageManager),
'dnf5_dev_config': self.new_dev_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_dev_config': self.new_dev_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'yum_dev_config': self.new_dev_configuration(Constants.YUM, YumPackageManager),
'zypper_dev_config': self.new_dev_configuration(Constants.ZYPPER, ZypperPackageManager),

'apt_test_config': self.new_test_configuration(Constants.APT, AptitudePackageManager),
'dnf5_test_config': self.new_test_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_test_config': self.new_test_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'dnf_test_config': self.new_test_configuration(Constants.DNF, DnfPackageManager),
'dnf5_test_config': self.new_test_configuration(Constants.DNF5, Dnf5PackageManager),
'tdnf_test_config': self.new_test_configuration(Constants.TDNF, AzL3TdnfPackageManager),
'yum_test_config': self.new_test_configuration(Constants.YUM, YumPackageManager),
'zypper_test_config': self.new_test_configuration(Constants.ZYPPER, ZypperPackageManager)
}
Expand Down Expand Up @@ -120,7 +124,7 @@ def get_configuration(self, env, package_manager_name):
print ("Error: Environment configuration not supported - " + str(env))
return None

if str(package_manager_name) not in [Constants.APT, Constants.DNF5, Constants.TDNF, Constants.YUM, Constants.ZYPPER]:
if str(package_manager_name) not in [Constants.APT, Constants.DNF, Constants.DNF5, Constants.TDNF, Constants.YUM, Constants.ZYPPER]:
print ("Error: Package manager configuration not supported - " + str(package_manager_name))
return None

Expand Down
1 change: 1 addition & 0 deletions src/core/src/bootstrap/Constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ class StatusTruncationConfig(EnumBackport):

# Package Managers
APT = 'apt'
DNF = 'dnf'
DNF5 = 'dnf5'
TDNF = 'tdnf'
YUM = 'yum'
Expand Down
25 changes: 21 additions & 4 deletions src/core/src/bootstrap/EnvLayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,17 @@ def is_distro_rhel_10(self, distro_name):
""" Checks if the current distro is RHEL 10 """
return self.__is_matching_distro_and_version(distro_name, Constants.RED_HAT, version_to_match=10)

def __get_dnf_version(self):
code, out = self.run_command_output('dnf --version', False, False)
# Output : dnf5 version 5.2.18.0
# Output : 4.20.0
if code != 0 or not out:
return code, out, None

first_line = str(out).splitlines()[0].strip()
version = first_line.split()[-1].split('.')[0]
return code, out, version

def get_package_manager(self):
# type: () -> str
""" Detects package manager type """
Expand All @@ -91,11 +102,17 @@ def get_package_manager(self):
# Example: ['Azure Linux', '4.0', '']
os_name, os_version, os_code = self.platform.linux_distribution()

# Check for unsupported distros
# Check for Rhel 10(uses dnf4)
if self.is_distro_rhel_10(os_name):
error_msg = "This distro is not yet supported in your region. Please review https://aka.ms/VMGuestPatchingCompatibility for more information. [Distro={0}][Version={1}][Code={2}]".format(str(os_name), os_version, os_code)
print("Error: {0}".format(error_msg))
return str()
code, out, version = self.__get_dnf_version()
if code == 0 and version == '4':
return Constants.DNF
elif code == 0 and version !='4':
print("Error: Expected dnf version not found on this rhel 10 VM. [Expected={0}][Found={1}]".format("4", str(version)))
return str()
else:
print("Error: Expected package manager dnf not found on this rhel 10 VM.")
return str()

# Check for Azure Linux 4 or Above( uses dnf5)
if self.is_distro_azure_linux_4(str(os_name)):
Expand Down
Loading
Loading