mooli tayer has uploaded a new change for review.

Change subject: This commit only adds the libvirtd_sysv2upstart to 
configurator. It will be used in a seperate commit.
......................................................................

This commit only adds the libvirtd_sysv2upstart to configurator.
It will be used in a seperate commit.

Change-Id: I872100a6d28ea6da40e6896939aeff4b514f3e71
Signed-off-by: Mooli Tayer <[email protected]>
---
M lib/vdsm/tool/configurator.py
1 file changed, 39 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/58/26958/1

diff --git a/lib/vdsm/tool/configurator.py b/lib/vdsm/tool/configurator.py
index f0944f3..744a8c6 100644
--- a/lib/vdsm/tool/configurator.py
+++ b/lib/vdsm/tool/configurator.py
@@ -21,6 +21,10 @@
 import sys
 import grp
 import argparse
+import filecmp
+import itertools
+import rpm
+import shutil
 
 from .. import utils
 from . import service, expose
@@ -96,6 +100,41 @@
     def configure(self):
         self._exec_libvirt_configure("reconfigure")
 
+    def libvirtd_sysv2upstart(self):
+        """
+        On RHEL 6, libvirtd can be started by either SysV init or Upstart.
+        We prefer upstart because it respawns libvirtd if when libvirtd
+        crashed.
+        """
+        INITCTL = '/sbin/initctl'
+        LIBVIRTD_UPSTART = 'libvirtd.upstart'
+        TARGET = "/etc/init/libvirtd.conf"
+        if os.path.isfile(INITCTL) and os.access(INITCTL, os.X_OK):
+            ts = rpm.TransactionSet()
+            mi = itertools.chain(*[ts.dbMatch('name', name)
+                                   for name in ['libvirt', 'libvirt-daemon']])
+            # libvirtd package does not provide libvirtd.upstart,
+            # this could happen in Ubuntu or other distro,
+            # so continue to use system default init mechanism
+            for filename in itertools.chain(*[h[rpm.RPMTAG_FILENAMES]
+                                            for h in mi]):
+                if LIBVIRTD_UPSTART in filename:
+                    packeged = filename
+                    break
+            if packeged is not None and os.path.isfile(packeged):
+                if not os.path.isfile(TARGET):
+                    service.service_stop('libvirtd')
+                if not os.path.isfile(TARGET) or \
+                        not filecmp.cmp(packeged, TARGET):
+                    shutil.copyfile(packeged, TARGET)
+                    rc, out, err = utils.execCmd((INITCTL,
+                                                  "reload-configuration"))
+                    if rc != 0:
+                        sys.stdout.write(out)
+                        sys.stderr.write(err)
+                        raise RuntimeError(
+                            "Failed to reload upstart configuration.")
+
     def validate(self):
         """
         Validate conflict in configured files


-- 
To view, visit http://gerrit.ovirt.org/26958
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I872100a6d28ea6da40e6896939aeff4b514f3e71
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: mooli tayer <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to