Martin Polednik has uploaded a new change for review.
Change subject: supervdsm: move udevadm methods to udevadm module ......................................................................
supervdsm: move udevadm methods to udevadm module
udevadm module already exists, so there is no reason to keep the method logic in supervdsm.
Change-Id: Ie2b72b580e77872068ae6357410d940a83626b05 Signed-off-by: Martin Polednik mpolednik@redhat.com --- M lib/vdsm/udevadm.py M vdsm/supervdsmServer 2 files changed, 52 insertions(+), 42 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/08/44808/1
diff --git a/lib/vdsm/udevadm.py b/lib/vdsm/udevadm.py index 2e9bdc2..9c58075 100644 --- a/lib/vdsm/udevadm.py +++ b/lib/vdsm/udevadm.py @@ -19,10 +19,14 @@ #
from __future__ import absolute_import +import errno import logging from . import utils
+from vdsm.constants import EXT_UDEVADM + _UDEVADM = utils.CommandPath("udevadm", "/sbin/udevadm", "/usr/sbin/udevadm") +_UDEV_WITH_RELOAD_VERSION = 181
class Error(Exception): @@ -61,6 +65,50 @@ logging.error("%s", e)
+def trigger(attr_matches=(), property_matches=()): + _reload() + cmd = [EXT_UDEVADM, 'trigger', '--verbose', '--action', 'change'] + + for name, value in property_matches: + cmd.append('--property-match={}={}'.format(name, value)) + + for name, value in attr_matches: + cmd.append('--property-match={}={}'.format(name, value)) + + rc, out, err = utils.execCmd(cmd) + if rc: + raise OSError(errno.EINVAL, 'Could not trigger change ' + 'out %s\nerr %s' % (out, err)) + + +def _reload(): + if _has_reload(): + reload = "--reload" + else: + reload = "--reload-rules" + cmd = [EXT_UDEVADM, 'control', reload] + rc, out, err = utils.execCmd(cmd) + if rc: + logging.error("Udevadm reload-rules command failed rc=%s, " + "out="%s", err="%s"", rc, out, err) + raise OSError(errno.EINVAL, "Could not reload rules") + + +@utils.memoized +def _version(): + cmd = [EXT_UDEVADM, '--version'] + rc, out, err = utils.execCmd(cmd) + if rc: + logging.error("Udevadm version command failed rc=%s, " + "out="%s", err="%s"", rc, out, err) + raise RuntimeError("Could not get udev version number") + return int(out[0]) + + +def _has_reload(): + return _version() > _UDEV_WITH_RELOAD_VERSION + + def _run_command(args): cmd = [_UDEVADM.cmd] cmd.extend(args) diff --git a/vdsm/supervdsmServer b/vdsm/supervdsmServer index 57b7b4d..17f12f3 100755 --- a/vdsm/supervdsmServer +++ b/vdsm/supervdsmServer @@ -35,6 +35,7 @@ from vdsm.infra import zombiereaper
from caps import Architecture +from vdsm import udevadm import numaUtils
LOG_CONF_PATH = "/etc/vdsm/svdsm.logger.conf" @@ -73,7 +74,7 @@ from storage import multipath from storage.fileUtils import chown, resolveGid, resolveUid from storage.fileUtils import validateAccess as _validateAccess -from vdsm.constants import METADATA_GROUP, EXT_CHOWN, EXT_UDEVADM, \ +from vdsm.constants import METADATA_GROUP, EXT_CHOWN, \ DISKIMAGE_USER, DISKIMAGE_GROUP, \ P_LIBVIRT_VMCHANNELS, P_OVIRT_VMCONSOLES, \ VDSM_USER, QEMU_PROCESS_USER, QEMU_PROCESS_GROUP @@ -119,8 +120,6 @@
class _SuperVdsm(object): - - UDEV_WITH_RELOAD_VERSION = 181
log = logging.getLogger("SuperVdsm.ServerCallback")
@@ -283,20 +282,8 @@ return setSafeNetworkConfig()
@logDecorator - def udevTrigger(self, attr_matches=(), property_matches=()): - self.__udevReloadRules() - cmd = [EXT_UDEVADM, 'trigger', '--verbose', '--action', 'change'] - - for name, value in property_matches: - cmd.append('--property-match={}={}'.format(name, value)) - - for name, value in attr_matches: - cmd.append('--property-match={}={}'.format(name, value)) - - rc, out, err = utils.execCmd(cmd) - if rc: - raise OSError(errno.EINVAL, 'Could not trigger change ' - 'out %s\nerr %s' % (out, err)) + def udevTrigger(self, *args, **kwargs): + udevadm.trigger(*args, **kwargs)
@logDecorator def appropriateDevice(self, guid, thiefId): @@ -453,31 +440,6 @@ @logDecorator def set_rp_filter_strict(self, dev): sysctl.set_rp_filter_strict(dev) - - def __udevReloadRules(self): - if self.__udevOperationReload(): - reload = "--reload" - else: - reload = "--reload-rules" - cmd = [EXT_UDEVADM, 'control', reload] - rc, out, err = utils.execCmd(cmd) - if rc: - self.log.error("Udevadm reload-rules command failed rc=%s, " - "out="%s", err="%s"", rc, out, err) - raise OSError(errno.EINVAL, "Could not reload rules") - - @utils.memoized - def __udevVersion(self): - cmd = [EXT_UDEVADM, '--version'] - rc, out, err = utils.execCmd(cmd) - if rc: - self.log.error("Udevadm version command failed rc=%s, " - " out="%s", err="%s"", rc, out, err) - raise RuntimeError("Could not get udev version number") - return int(out[0]) - - def __udevOperationReload(self): - return self.__udevVersion() > self.UDEV_WITH_RELOAD_VERSION
def terminate(signo, frame):