Alessandro Pilotti 10 лет назад
Родитель
Сommit
aa89d36742

+ 2 - 0
coriolis/osmorphing/factory.py

@@ -5,6 +5,7 @@ from oslo_log import log as logging
 from coriolis import constants
 from coriolis import exception
 from coriolis.osmorphing import debian
+from coriolis.osmorphing import oracle
 from coriolis.osmorphing import redhat
 from coriolis.osmorphing import suse
 from coriolis.osmorphing import ubuntu
@@ -18,6 +19,7 @@ def get_os_morphing_tools(conn, os_type, os_root_dir, target_hypervisor,
     os_morphing_tools_clss = {
         constants.OS_TYPE_LINUX: [debian.DebianMorphingTools,
                                   ubuntu.UbuntuMorphingTools,
+                                  oracle.OracleMorphingTools,
                                   redhat.RedHatMorphingTools,
                                   suse.SUSEMorphingTools],
         constants.OS_TYPE_WINDOWS: [windows.WindowsMorphingTools],

+ 62 - 0
coriolis/osmorphing/oracle.py

@@ -0,0 +1,62 @@
+import re
+
+from coriolis import constants
+from coriolis import exception
+from coriolis.osmorphing import redhat
+
+
+class OracleMorphingTools(redhat.RedHatMorphingTools):
+    def _check_os(self):
+        oracle_release_path = "etc/oracle-release"
+        if self._test_path(oracle_release_path):
+            release_info = self._read_file(
+                oracle_release_path).decode().split('\n')[0].strip()
+            m = re.match(r"^(.*) release ([0-9].*)$", release_info)
+            if m:
+                distro, version = m.groups()
+                return (distro, version)
+
+    def install_packages(self, package_names):
+        self._yum_install(package_names, self._enable_repos)
+
+    def pre_packages_install(self):
+        self._enable_repos = []
+        super(OracleMorphingTools, self).pre_packages_install()
+
+        if self._platform == constants.PLATFORM_OPENSTACK:
+            self._enable_cloud_init_repos()
+
+    def _enable_cloud_init_repos(self):
+        self._yum_install(['yum-utils'])
+
+        distro, version = self.check_os()
+        major_version = version.split(".")[0]
+
+        # TODO: for ULN users, use the corresponding repos
+        # e.g.: ol7_x86_64_addons
+        self._exec_cmd_chroot(
+            "yum-config-manager --add-repo "
+            "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]
+
+        if major_version == "7":
+            try:
+                self._yum_install(["python-cheetah"], self._enable_repos)
+            except exception.CoriolisException:
+                # The python-pygments RPM required by python-cheetah is called
+                # python27-python-pygments. Force the installation.
+                self._yum_install(
+                    ["python-markdown", "python27-python-pygments"],
+                    self._enable_repos)
+
+                self._exec_cmd_chroot(
+                    "rpm -Uvh %s --nodeps" %
+                    "http://public-yum.oracle.com/repo/OracleLinux/OL7/addons/"
+                    "x86_64/getPackage/python-cheetah-2.4.1-1.el7.x86_64.rpm")
+
+    def _run_dracut(self):
+        self._run_dracut_base('kernel')
+        self._run_dracut_base('kernel-uek')

+ 16 - 5
coriolis/osmorphing/redhat.py

@@ -122,20 +122,31 @@ class RedHatMorphingTools(base.BaseLinuxOSMorphingTools):
                                                     mac_addresses)
         self._add_net_udev_rules(net_ifaces_info)
 
-    def install_packages(self, package_names):
-        yum_cmd = 'yum install %s -y' % " ".join(package_names)
+    def _yum_install(self, package_names, enable_repos=[]):
+        yum_cmd = 'yum install %s -y%s' % (
+            " ".join(package_names),
+            "".join([" --enablerepo=%s" % r for r in enable_repos]))
         self._exec_cmd_chroot(yum_cmd)
 
-    def uninstall_packages(self, package_names):
+    def _yum_uninstall(self, package_names):
         for package_name in package_names:
             yum_cmd = 'yum remove %s -y' % package_name
             self._exec_cmd_chroot(yum_cmd)
 
+    def install_packages(self, package_names):
+        self._yum_install(package_names)
+
+    def uninstall_packages(self, package_names):
+        self._yum_uninstall(package_names)
+
     def _run_dracut(self):
+        self._run_dracut_base('kernel')
+
+    def _run_dracut_base(self, rpm_base_name):
         package_names = self._exec_cmd_chroot(
-            'rpm -q kernel').decode().split('\n')[:-1]
+            'rpm -q %s' % rpm_base_name).decode().split('\n')[:-1]
         for package_name in package_names:
-            m = re.match('^kernel-(.*)$', package_name)
+            m = re.match('^%s-(.*)$' % rpm_base_name, package_name)
             if m:
                 kernel_version = m.groups()[0]
                 self._event_manager.progress_update(

+ 2 - 0
coriolis/providers/vmware_vsphere/guestid.py

@@ -160,6 +160,8 @@ GUEST_ID_OS_TYPE_MAP = {
     constants.OS_TYPE_LINUX,
     vim.vm.GuestOsDescriptor.GuestOsIdentifier.oracleLinuxGuest:
     constants.OS_TYPE_LINUX,
+    vim.vm.GuestOsDescriptor.GuestOsIdentifier.oracleLinux64Guest:
+    constants.OS_TYPE_LINUX,
     vim.vm.GuestOsDescriptor.GuestOsIdentifier.os2Guest:
     None,
     vim.vm.GuestOsDescriptor.GuestOsIdentifier.debian4Guest: