diff --git a/hosts/models.py b/hosts/models.py index 167b680f..c5d2da83 100644 --- a/hosts/models.py +++ b/hosts/models.py @@ -206,10 +206,7 @@ def find_updates(self): errata_ids = set() - if self.host_repos_only: - update_ids = self.find_host_repo_updates(host_packages, repo_packages, errata_ids) - else: - update_ids = self.find_osrelease_repo_updates(host_packages, repo_packages, errata_ids) + update_ids = self.find_repo_updates(host_packages, repo_packages, errata_ids) kernel_update_ids = self.find_kernel_updates(kernel_packages, repo_packages) for ku_id in kernel_update_ids: @@ -223,7 +220,7 @@ def find_updates(self): if erratum.id not in errata_ids: self.errata.remove(erratum) - def find_host_repo_updates(self, host_packages, repo_packages, errata_ids): + def find_repo_updates(self, host_packages, repo_packages, errata_ids): update_ids = set() hostrepos_q = Q(repo__mirror__enabled=True, @@ -283,44 +280,6 @@ def find_host_repo_updates(self, host_packages, repo_packages, errata_ids): update_ids.add(uid) return update_ids - def find_osrelease_repo_updates(self, host_packages, repo_packages, errata_ids): - - update_ids = set() - for package in host_packages: - highest_package = package - - # find the packages that are potential updates - pu_q = Q(name=package.name, - arch=package.arch, - packagetype=package.packagetype) - potential_updates = repo_packages.filter(pu_q) - for pu in potential_updates: - pu_is_module_package = False - pu_in_enabled_modules = False - if pu.module_set.exists(): - pu_is_module_package = True - for module in pu.module_set.all(): - if module in self.modules.all(): - pu_in_enabled_modules = True - if pu_is_module_package: - if not pu_in_enabled_modules: - continue - if package.compare_version(pu) == -1: - # package updates that are fixed by erratum (may already be superceded by another update) - errata = pu.provides_fix_in_erratum.all() - if errata: - for erratum in errata: - self.errata.add(erratum) - errata_ids.add(erratum.id) - if highest_package.compare_version(pu) == -1: - highest_package = pu - - if highest_package != package: - uid = self.process_update(package, highest_package) - if uid is not None: - update_ids.add(uid) - return update_ids - def check_if_reboot_required(self, host_highest): """Check if a reboot is required (running kernel < installed highest). @@ -350,7 +309,7 @@ def check_if_reboot_required(self, host_highest): else: self.reboot_required = False - def _get_deb_kernel_flavour(self, pkg_name): + def get_deb_kernel_flavour(self, pkg_name): """Extract the flavour suffix from a DEB kernel package name. e.g. 'linux-image-6.8.0-51-generic' → 'generic' @@ -359,7 +318,7 @@ def _get_deb_kernel_flavour(self, pkg_name): 'linux-modules-extra-6.8.0-51-generic' → 'generic' Returns None if the flavour cannot be determined. """ - for prefix in self._deb_kernel_prefixes: + for prefix in self.deb_kernel_prefixes: if pkg_name.startswith(prefix): # strip prefix, then split version from flavour # e.g. '6.8.0-51-generic' or '6.1.0-28-cloud-amd64' @@ -374,7 +333,7 @@ def _get_deb_kernel_flavour(self, pkg_name): return None return None - def _get_running_kernel_flavour(self): + def get_running_kernel_flavour(self): """Extract the flavour from the running kernel string. e.g. '6.8.0-51-generic' → 'generic' @@ -391,7 +350,7 @@ def _get_running_kernel_flavour(self): return None # longest prefixes first to avoid linux-modules- matching linux-modules-extra- - _deb_kernel_prefixes = [ + deb_kernel_prefixes = [ 'linux-image-unsigned-', 'linux-modules-extra-', 'linux-cloud-tools-', @@ -409,7 +368,7 @@ def find_kernel_updates(self, kernel_packages, repo_packages): update_ids = set() self.reboot_required = False - # build hostrepos for priority filtering (same as find_host_repo_updates) + # build hostrepos for priority filtering (same as find_repo_updates) hostrepos = None if self.host_repos_only: hostrepos_q = Q(repo__mirror__enabled=True, @@ -423,14 +382,14 @@ def find_kernel_updates(self, kernel_packages, repo_packages): rpm_kernels = kernel_packages.filter(packagetype='R') arch_kernels = kernel_packages.filter(packagetype='A') - update_ids.update(self._find_rpm_kernel_updates(rpm_kernels, repo_packages, hostrepos)) - update_ids.update(self._find_deb_kernel_updates(deb_kernels, repo_packages, hostrepos)) - update_ids.update(self._find_arch_kernel_updates(arch_kernels, repo_packages, hostrepos)) + update_ids.update(self.find_rpm_kernel_updates(rpm_kernels, repo_packages, hostrepos)) + update_ids.update(self.find_deb_kernel_updates(deb_kernels, repo_packages, hostrepos)) + update_ids.update(self.find_arch_kernel_updates(arch_kernels, repo_packages, hostrepos)) self.save(update_fields=['reboot_required']) return update_ids - def _find_rpm_kernel_updates(self, kernel_packages, repo_packages, hostrepos): + def find_rpm_kernel_updates(self, kernel_packages, repo_packages, hostrepos): update_ids = set() @@ -511,7 +470,7 @@ def _find_rpm_kernel_updates(self, kernel_packages, repo_packages, hostrepos): return update_ids - def _find_arch_kernel_updates(self, kernel_packages, repo_packages, hostrepos): + def find_arch_kernel_updates(self, kernel_packages, repo_packages, hostrepos): update_ids = set() @@ -562,10 +521,10 @@ def _find_arch_kernel_updates(self, kernel_packages, repo_packages, hostrepos): return update_ids - def _find_deb_kernel_updates(self, kernel_packages, repo_packages, hostrepos): + def find_deb_kernel_updates(self, kernel_packages, repo_packages, hostrepos): update_ids = set() - running_flavour = self._get_running_kernel_flavour() + running_flavour = self.get_running_kernel_flavour() # find the linux-image package matching the running kernel running_kernel_pkg = None @@ -585,7 +544,7 @@ def _find_deb_kernel_updates(self, kernel_packages, repo_packages, hostrepos): processed_prefixes = set() for package in kernel_packages: pkg_name = package.name.name - flavour = self._get_deb_kernel_flavour(pkg_name) + flavour = self.get_deb_kernel_flavour(pkg_name) # if we know the running flavour, only process matching packages # if we don't (unflavoured kernel), process all kernel packages @@ -594,7 +553,7 @@ def _find_deb_kernel_updates(self, kernel_packages, repo_packages, hostrepos): # determine the prefix (e.g. 'linux-image-') prefix = None - for p in self._deb_kernel_prefixes: + for p in self.deb_kernel_prefixes: if pkg_name.startswith(p): prefix = p break @@ -645,7 +604,7 @@ def _find_deb_kernel_updates(self, kernel_packages, repo_packages, hostrepos): if running_kernel_pkg: for package in kernel_packages: if package.name.name.startswith('linux-image-'): - flavour = self._get_deb_kernel_flavour(package.name.name) + flavour = self.get_deb_kernel_flavour(package.name.name) if running_flavour is None or flavour == running_flavour: if running_kernel_pkg.compare_version(package) == -1: self.reboot_required = True diff --git a/hosts/tests/test_models.py b/hosts/tests/test_models.py index 86a846bf..411492f0 100644 --- a/hosts/tests/test_models.py +++ b/hosts/tests/test_models.py @@ -544,35 +544,35 @@ def test_deb_latest_not_installed(self): self.assertEqual(update.newpackage, self.img_53) def test_deb_flavour_extraction(self): - """Test _get_deb_kernel_flavour helper.""" + """Test get_deb_kernel_flavour helper.""" host = self._create_host('6.8.0-51-generic', [self.img_51]) self.assertEqual( - host._get_deb_kernel_flavour('linux-image-6.8.0-51-generic'), + host.get_deb_kernel_flavour('linux-image-6.8.0-51-generic'), 'generic' ) self.assertEqual( - host._get_deb_kernel_flavour('linux-modules-extra-6.8.0-51-lowlatency'), + host.get_deb_kernel_flavour('linux-modules-extra-6.8.0-51-lowlatency'), 'lowlatency' ) self.assertEqual( - host._get_deb_kernel_flavour('linux-image-6.1.0-28-cloud-amd64'), + host.get_deb_kernel_flavour('linux-image-6.1.0-28-cloud-amd64'), 'cloud-amd64' ) self.assertEqual( - host._get_deb_kernel_flavour('linux-image-unsigned-6.8.0-51-generic'), + host.get_deb_kernel_flavour('linux-image-unsigned-6.8.0-51-generic'), 'generic' ) def test_deb_running_kernel_flavour(self): - """Test _get_running_kernel_flavour helper.""" + """Test get_running_kernel_flavour helper.""" host = self._create_host('6.8.0-51-generic', [self.img_51]) - self.assertEqual(host._get_running_kernel_flavour(), 'generic') + self.assertEqual(host.get_running_kernel_flavour(), 'generic') host.kernel = '6.1.0-28-cloud-amd64' - self.assertEqual(host._get_running_kernel_flavour(), 'cloud-amd64') + self.assertEqual(host.get_running_kernel_flavour(), 'cloud-amd64') host.kernel = '5.14.0-503.el9' - self.assertIsNone(host._get_running_kernel_flavour()) + self.assertIsNone(host.get_running_kernel_flavour()) @override_settings(