[Engine-devel] Things to be done to support Ubuntu hosts

Zhou Zheng Sheng zhshzhou at linux.vnet.ibm.com
Thu Nov 14 06:57:19 UTC 2013


Hi,

Recently Ubuntu support is added to VDSM, and .deb binray packages can
be downloaded from launchpad.net PPA [1]. Most of the key features such
as storage management and VM lifecycle work on Ubuntu. The cross
distribution network management patches are upstream as well. One big
piece left is making ovirt-host-deploy support Ubuntu, so that we can
manage Ubuntu hosts from Engine, thus close the gap on host side.

In May 2013  I made some hacks to ovirt-host-deploy and otopi. I made it
skipped parts not supported on Ubuntu and configure the environment
manually, and successfully added Ubuntu host to Engine [2].
Unfortunately I have no plans to continue on it, but I'd like to make a
summary of the things I hacked to help anyone who wants to submit
patches in future. I was to add a WIKI page but I found there were not
many items, so a mail would be enough.

1. Package management operations
Both otopi and ovirt-host-deploy query for dependency packages and
install them on demand. The otopi package management just supports yum,
we need to add apt-get support. Package names are different in Ubuntu,
so I made a list mapping the names. The list in in VDSM source
directory, debian/dependencyMap.txt .

2. Network configuration operations
ovirt-host-deploy asks VDSM's configNetwork.py to create bridge network.
Cross distribution support patches for configNetwork.py are under
review. ovirt-host-deploy supports Ubuntu bridge configuration as long
as they are merged.

[1] https://launchpad.net/~zhshzhou/+archive/vdsm-ubuntu
[2] http://www.ovirt.org/images/5/57/Shanghai-VDSM-on-Ubuntu.pdf

Here goes the detailed hack patch. The hack was base on v1.0.1, I
rebased it to the latest master. The rebased patch are not tested. If
you find this email useless, it's actually a good news, which means
there is not a lot of work and problems ahead ;-)

Hack patch for ovirt-host-deploy.

>From 120493a242046d19794ef3da83b32486d372aa39 Mon Sep 17 00:00:00 2001
From: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
Date: Wed, 13 Nov 2013 18:02:26 +0800
Subject: [PATCH] Ubuntu Hacks

Change-Id: Ifb4ebc829101c92d06475619b1b5986e87b83d57
Signed-off-by: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
---
 src/plugins/ovirt-host-deploy/gluster/packages.py | 17 +++++----
 src/plugins/ovirt-host-deploy/tune/tuned.py       |  3 +-
 src/plugins/ovirt-host-deploy/vdsm/bridge.py      | 45
++++++++++++-----------
 src/plugins/ovirt-host-deploy/vdsm/packages.py    |  9 +++--
 src/plugins/ovirt-host-deploy/vdsm/pki.py         |  3 +-
 src/plugins/ovirt-host-deploy/vdsm/software.py    |  2 +
 src/plugins/ovirt-host-deploy/vdsm/vdsmid.py      |  3 +-
 7 files changed, 45 insertions(+), 37 deletions(-)

diff --git a/src/plugins/ovirt-host-deploy/gluster/packages.py
b/src/plugins/ovirt-host-deploy/gluster/packages.py
index 1fecfda..eb37744 100644
--- a/src/plugins/ovirt-host-deploy/gluster/packages.py
+++ b/src/plugins/ovirt-host-deploy/gluster/packages.py
@@ -60,13 +60,13 @@ class Plugin(plugin.PluginBase):
         ),
     )
     def _validation(self):
-        if not self.packager.queryPackages(patterns=('vdsm-gluster',)):
-            raise RuntimeError(
-                _(
-                    'Cannot locate gluster packages, '
-                    'possible cause is incorrect channels'
-                )
-            )
+        # if not self.packager.queryPackages(patterns=('vdsm-gluster',)):
+        #     raise RuntimeError(
+        #         _(
+        #             'Cannot locate gluster packages, '
+        #             'possible cause is incorrect channels'
+        #         )
+        #     )
         self._enabled = True

     @plugin.event(
@@ -74,7 +74,8 @@ class Plugin(plugin.PluginBase):
         condition=lambda self: self._enabled,
     )
     def _packages(self):
-        self.packager.installUpdate(('vdsm-gluster',))
+        # self.packager.installUpdate(('vdsm-gluster',))
+        pass

     @plugin.event(
         stage=plugin.Stages.STAGE_CLOSEUP,
diff --git a/src/plugins/ovirt-host-deploy/tune/tuned.py
b/src/plugins/ovirt-host-deploy/tune/tuned.py
index d8e00c5..d0dcea5 100644
--- a/src/plugins/ovirt-host-deploy/tune/tuned.py
+++ b/src/plugins/ovirt-host-deploy/tune/tuned.py
@@ -70,7 +70,8 @@ class Plugin(plugin.PluginBase):
         condition=lambda self: self._enabled,
     )
     def _packages(self):
-        self.packager.installUpdate(('tuned',))
+        # self.packager.installUpdate(('tuned',))
+        pass

     @plugin.event(
         stage=plugin.Stages.STAGE_MISC,
diff --git a/src/plugins/ovirt-host-deploy/vdsm/bridge.py
b/src/plugins/ovirt-host-deploy/vdsm/bridge.py
index 3789d62..64cce40 100644
--- a/src/plugins/ovirt-host-deploy/vdsm/bridge.py
+++ b/src/plugins/ovirt-host-deploy/vdsm/bridge.py
@@ -595,7 +595,8 @@ class Plugin(plugin.PluginBase):
         stage=plugin.Stages.STAGE_INTERNAL_PACKAGES,
     )
     def _internal_packages(self):
-        self.packager.install(packages=('iproute',))
+        # self.packager.install(packages=('iproute',))
+        pass

     @plugin.event(
         stage=plugin.Stages.STAGE_VALIDATION,
@@ -771,27 +772,27 @@ class Plugin(plugin.PluginBase):
         interface = self._getInterfaceToInstallBasedOnDestination(
             address=self.environment[odeploycons.VdsmEnv.ENGINE_ADDRESS]
         )
-        parameters =
self._rhel_getInterfaceConfigParameters(name=interface)
-
-        # The followin can be executed
-        # only at node as we won't reach here
-        # if we are not running on node
-        if (
-            self.environment[odeploycons.VdsmEnv.OVIRT_NODE] and
-            self._interfaceIsBridge(name=interface)
-        ):
-            nic = interface.replace('br', '', 1)
-            self._removeBridge(
-                name=interface,
-                interface=nic,
-            )
-            interface = nic
-
-        self._createBridge(
-
name=self.environment[odeploycons.VdsmEnv.MANAGEMENT_BRIDGE_NAME],
-            interface=interface,
-            parameters=parameters,
-        )
+        # parameters =
self._rhel_getInterfaceConfigParameters(name=interface)
+
+        # # The followin can be executed
+        # # only at node as we won't reach here
+        # # if we are not running on node
+        # if (
+        #     self.environment[odeploycons.VdsmEnv.OVIRT_NODE] and
+        #     self._interfaceIsBridge(name=interface)
+        # ):
+        #     nic = interface.replace('br', '', 1)
+        #     self._removeBridge(
+        #         name=interface,
+        #         interface=nic,
+        #     )
+        #     interface = nic
+
+        # self._createBridge(
+        #
name=self.environment[odeploycons.VdsmEnv.MANAGEMENT_BRIDGE_NAME],
+        #     interface=interface,
+        #     parameters=parameters,
+        # )

         self._waitForRoute(
             host=(
diff --git a/src/plugins/ovirt-host-deploy/vdsm/packages.py
b/src/plugins/ovirt-host-deploy/vdsm/packages.py
index d819caa..b526d4b 100644
--- a/src/plugins/ovirt-host-deploy/vdsm/packages.py
+++ b/src/plugins/ovirt-host-deploy/vdsm/packages.py
@@ -68,7 +68,8 @@ class Plugin(plugin.PluginBase):
         stage=plugin.Stages.STAGE_VALIDATION,
     )
     def _validation(self):
-        result = self.packager.queryPackages(patterns=('vdsm',))
+        # result = self.packager.queryPackages(patterns=('vdsm',))
+        result = ({'version': '4.10.3', 'release': '1'},)
         if not result:
             raise RuntimeError(
                 _(
@@ -106,8 +107,8 @@ class Plugin(plugin.PluginBase):
             self.services.state('vdsmd', False)
         if self.services.exists('supervdsmd'):
             self.services.state('supervdsmd', False)
-        self.packager.install(('qemu-kvm-tools',))
-        self.packager.installUpdate(('vdsm', 'vdsm-cli'))
+        # self.packager.install(('qemu-kvm-tools',))
+        # self.packager.installUpdate(('vdsm', 'vdsm-cli'))

     @plugin.event(
         stage=plugin.Stages.STAGE_CLOSEUP,
@@ -119,7 +120,7 @@ class Plugin(plugin.PluginBase):
             self.services.state('libvirt-guests', False)
             self.services.startup('libvirt-guests', False)

-        self.services.startup('vdsmd', True)
+        # self.services.startup('vdsmd', True)
         if not self.services.supportsDependency:
             if self.services.exists('libvirtd'):
                 self.services.startup('libvirtd', True)
diff --git a/src/plugins/ovirt-host-deploy/vdsm/pki.py
b/src/plugins/ovirt-host-deploy/vdsm/pki.py
index f374a99..c013527 100644
--- a/src/plugins/ovirt-host-deploy/vdsm/pki.py
+++ b/src/plugins/ovirt-host-deploy/vdsm/pki.py
@@ -208,7 +208,8 @@ class Plugin(plugin.PluginBase):
         condition=lambda self: self._enabled,
     )
     def _packages(self):
-        self.packager.install(('m2crypto',))
+        # self.packager.install(('m2crypto',))
+        pass

     @plugin.event(
         stage=plugin.Stages.STAGE_MISC,
diff --git a/src/plugins/ovirt-host-deploy/vdsm/software.py
b/src/plugins/ovirt-host-deploy/vdsm/software.py
index 2f0ec80..a226816 100644
--- a/src/plugins/ovirt-host-deploy/vdsm/software.py
+++ b/src/plugins/ovirt-host-deploy/vdsm/software.py
@@ -65,6 +65,8 @@ class Plugin(plugin.PluginBase):
                         version=ver,
                     )
                 )
+        elif dist == 'Ubuntu':
+            pass
         else:
             raise RuntimeError(
                 _('Distribution {distribution} is not supported').format(
diff --git a/src/plugins/ovirt-host-deploy/vdsm/vdsmid.py
b/src/plugins/ovirt-host-deploy/vdsm/vdsmid.py
index 328ad17..465212a 100644
--- a/src/plugins/ovirt-host-deploy/vdsm/vdsmid.py
+++ b/src/plugins/ovirt-host-deploy/vdsm/vdsmid.py
@@ -78,7 +78,8 @@ class Plugin(plugin.PluginBase):
     )
     def _packages(self):
         if platform.machine() in ('x86_64', 'i686'):
-            self.packager.install(('dmidecode',))
+            # self.packager.install(('dmidecode',))
+            pass

     @plugin.event(
         stage=plugin.Stages.STAGE_CUSTOMIZATION,
-- 
1.7.11.7


Hack patch for otopi.

>From 3e7022b740f24d8053d3e32c20fa6d492631db80 Mon Sep 17 00:00:00 2001
From: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
Date: Wed, 13 Nov 2013 17:55:39 +0800
Subject: [PATCH] Ubuntu Hacks

---
 src/plugins/otopi/network/hostname.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/plugins/otopi/network/hostname.py
b/src/plugins/otopi/network/hostname.py
index bb07627..28b4866 100644
--- a/src/plugins/otopi/network/hostname.py
+++ b/src/plugins/otopi/network/hostname.py
@@ -63,7 +63,8 @@ class Plugin(plugin.PluginBase):
         stage=plugin.Stages.STAGE_INTERNAL_PACKAGES,
     )
     def _internal_packages(self):
-        self.packager.install(packages=['iproute'])
+        # self.packager.install(packages=['iproute'])
+        pass

     @plugin.event(
         stage=plugin.Stages.STAGE_VALIDATION,
-- 
1.7.11.7

-- 
Thanks and best regards!

Zhou Zheng Sheng / 周征晟
E-mail: zhshzhou at linux.vnet.ibm.com
Telephone: 86-10-82454397




More information about the Engine-devel mailing list