Procházet zdrojové kódy

Merge pull request #184 from Dany9966/ol-repos-fix

Check yum repositories before enabling them
Nashwan Azhari před 5 roky
rodič
revize
e233e4d1fb

+ 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

+ 1 - 1
coriolis/osmorphing/osmount/redhat.py

@@ -20,7 +20,7 @@ class RedHatOSMountTools(base.BaseLinuxOSMountTools):
 
     def setup(self):
         super(RedHatOSMountTools, self).setup()
-        self._exec_cmd("sudo -E yum install -y lvm2")
+        self._exec_cmd("sudo -E yum install -y lvm2 psmisc")
         self._exec_cmd("sudo modprobe dm-mod")
 
     def _allow_ssh_env_vars(self):

+ 1 - 1
coriolis/osmorphing/osmount/ubuntu.py

@@ -18,7 +18,7 @@ class UbuntuOSMountTools(base.BaseLinuxOSMountTools):
     def setup(self):
         super(UbuntuOSMountTools, self).setup()
         self._exec_cmd("sudo -E apt-get update -y")
-        self._exec_cmd("sudo -E apt-get install lvm2 -y")
+        self._exec_cmd("sudo -E apt-get install lvm2 psmisc -y")
         self._exec_cmd("sudo modprobe dm-mod")
 
     def _allow_ssh_env_vars(self):

+ 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)