2
0
Эх сурвалжийг харах

Check yum repositories before enabling them

This patch will search for yum repos that we enable
in /etc/yum.repos.d instead of blindly enabling
them by name. There are instances where we have
`public_ol_addons` instead of `ol_addons`; other
situations like this might occur in the future.
This patch will also remove the `_enable_repos`
attribute from the rhel tools, but adds a
`_get_repos_to_enable` method which can be defined
in every tool where we need to enable additional
yum repos.
Daniel Vincze 5 жил өмнө
parent
commit
a258655d41

+ 19 - 9
coriolis/osmorphing/oracle.py

@@ -22,11 +22,13 @@ class BaseOracleMorphingTools(redhat.BaseRedHatMorphingTools):
         self._run_dracut_base('kernel')
         self._run_dracut_base('kernel-uek')
 
-    def _enable_oracle_repos(self):
-
+    def _get_oracle_repos(self):
+        repos = []
         major_version = int(self._version.split(".")[0])
         if major_version < 8:
-            self._yum_install(['yum-utils'])
+            self._yum_install(
+                ['yum-utils'],
+                self._find_yum_repos(['ol%s_latest' % major_version]))
             # TODO(apilotti): for ULN users, use the corresponding repos
             # e.g.: ol7_x86_64_addons
             self._exec_cmd_chroot(
@@ -34,10 +36,18 @@ class BaseOracleMorphingTools(redhat.BaseRedHatMorphingTools):
                 "http://public-yum.oracle.com/public-yum-ol%s.repo" %
                 major_version)
 
-            self._enable_repos = ["ol%s_software_collections" % major_version,
-                                  "ol%s_addons" % major_version]
+            repos_to_enable = ["ol%s_software_collections" % major_version,
+                               "ol%s_addons" % major_version,
+                               "ol%s_UEKR" % major_version,
+                               "ol%s_latest" % major_version]
+            repos = self._find_yum_repos(repos_to_enable)
         else:
-            self._yum_install(['oraclelinux-release-el%s' % major_version])
-            self._exec_cmd_chroot(
-                "yum config-manager --enable ol%(release)s_appstream "
-                "ol%(release)s_UEKR6" % {"release": major_version})
+            self._yum_install(
+                ['oraclelinux-release-el%s' % major_version],
+                self._find_yum_repos(['ol%s_baseos_latest' % major_version]))
+            repos_to_enable = ["ol%s_baseos_latest" % major_version,
+                               "ol%s_appstream" % major_version,
+                               "ol%s_UEKR6" % major_version]
+            repos = self._find_yum_repos(repos_to_enable)
+
+        return repos

+ 21 - 2
coriolis/osmorphing/redhat.py

@@ -58,7 +58,6 @@ class BaseRedHatMorphingTools(base.BaseLinuxOSMorphingTools):
             conn, os_root_dir, os_root_dev,
             hypervisor, event_manager, detected_os_info, osmorphing_parameters,
             operation_timeout)
-        self._enable_repos = []
 
     def disable_predictable_nic_names(self):
         cmd = 'grubby --update-kernel=ALL --args="%s"'
@@ -217,6 +216,25 @@ class BaseRedHatMorphingTools(base.BaseLinuxOSMorphingTools):
         if self._test_path('var/cache/yum'):
             self._exec_cmd_chroot("rm -rf /var/cache/yum")
 
+    def _find_yum_repos(self, repos_to_enable=[]):
+        found_repos = []
+        for repo in repos_to_enable:
+            cmd = 'egrep "^\[.*%s.*\]$" -R /etc/yum.repos.d | cut -f2 -d:'
+            available_repos = self._exec_cmd_chroot(
+                cmd % repo).decode().splitlines()
+            available_repos.sort(key=len)
+            if available_repos:
+                found_repos.append(available_repos[0].lstrip('[').rstrip(']'))
+            else:
+                LOG.warn(
+                    "Could not find yum repository while searching for "
+                    "repositories to enable: %s.", repo)
+
+        return found_repos
+
+    def _get_repos_to_enable(self):
+        return []
+
     def pre_packages_install(self, package_names):
         super(BaseRedHatMorphingTools, self).pre_packages_install(
             package_names)
@@ -224,7 +242,8 @@ class BaseRedHatMorphingTools(base.BaseLinuxOSMorphingTools):
         self._yum_install(['grubby'])
 
     def install_packages(self, package_names):
-        self._yum_install(package_names, self._enable_repos)
+        enable_repos = self._get_repos_to_enable()
+        self._yum_install(package_names, enable_repos)
 
     def uninstall_packages(self, package_names):
         self._yum_uninstall(package_names)