From c7ee9217ec6edebec7b1d3a2536792114fd1a258 Mon Sep 17 00:00:00 2001
From: Yeela Kaplan <ykaplan@redhat.com>
Date: Fri, 25 Jan 2013 15:54:07 +0200
Subject: [PATCH 18/22] Change scsi_id command path to be configured at runtime
On fedora 18 scsi_id path is no longer under /sbin/scsi_id,
we configure vdsm to look for the path at runtime
and thus remove it from constants.
Change-Id: I409d4da0ba429564466271aded32e96f9401cd6c
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=886087
Signed-off-by: Yeela Kaplan <ykaplan@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/10824
Reviewed-by: Dan Kenigsberg <danken@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/11393
Tested-by: Federico Simoncelli <fsimonce@redhat.com>
---
configure.ac | 2 --
vdsm/constants.py.in | 24 ------------------------
vdsm/storage/multipath.py | 45 ++++++++++++++++++++++++++++++++++++++++-----
vdsm/sudoers.vdsm.in | 1 -
4 files changed, 40 insertions(+), 32 deletions(-)
diff --git a/configure.ac b/configure.ac
index 3489e38..edc0b50 100644
--- a/configure.ac
+++ b/configure.ac
@@ -167,8 +167,6 @@ AC_PATH_PROG([QEMUIMG_PATH], [qemu-img], [/usr/bin/qemu-img])
AC_PATH_PROG([REBOOT_PATH], [reboot], [/usr/bin/reboot])
AC_PATH_PROG([RPM_PATH], [rpm], [/bin/rpm])
AC_PATH_PROG([RSYNC_PATH], [rsync], [/usr/bin/rsync])
-AC_PATH_PROG([SCSI_ID_PATH], [scsi_id], [/sbin/scsi_id],
- [$PATH$PATH_SEPARATOR/lib/udev])
AC_PATH_PROG([SED_PATH], [sed], [/bin/sed])
AC_PATH_PROG([SERVICE_PATH], [service], [/sbin/service])
AC_PATH_PROG([SETSID_PATH], [setsid], [/usr/bin/setsid])
diff --git a/vdsm/constants.py.in b/vdsm/constants.py.in
index 8034b8e..ec5fff9 100644
--- a/vdsm/constants.py.in
+++ b/vdsm/constants.py.in
@@ -127,7 +127,6 @@ EXT_QEMUIMG = '@QEMUIMG_PATH@'
EXT_REBOOT = '@REBOOT_PATH@'
EXT_RSYNC = '@RSYNC_PATH@'
-EXT_SCSI_ID = '@SCSI_ID_PATH@' # TBD !
EXT_SERVICE = '@SERVICE_PATH@'
EXT_SETSID = '@SETSID_PATH@'
EXT_SH = '/bin/sh' # The shell path is invariable
@@ -157,26 +156,3 @@ CMD_LOWPRIO = [EXT_NICE, '-n', '19', EXT_IONICE, '-c', '3']
STRG_ISCSI_HOST = "iscsi_host/"
STRG_SCSI_HOST = "scsi_host/"
STRG_ISCSI_SESSION = "iscsi_session/"
-STRG_MPATH_CONF = (
- "\n\n"
- "defaults {\n"
- " polling_interval 5\n"
- " getuid_callout \"@SCSI_ID_PATH@ --whitelisted "
- "--replace-whitespace --device=/dev/%n\"\n"
- " no_path_retry fail\n"
- " user_friendly_names no\n"
- " flush_on_last_del yes\n"
- " fast_io_fail_tmo 5\n"
- " dev_loss_tmo 30\n"
- " max_fds 4096\n"
- "}\n"
- "\n"
- "devices {\n"
- "device {\n"
- " vendor \"HITACHI\"\n"
- " product \"DF.*\"\n"
- " getuid_callout \"@SCSI_ID_PATH@ --whitelisted "
- "--replace-whitespace --device=/dev/%n\"\n"
- "}\n"
- "}"
-)
diff --git a/vdsm/storage/multipath.py b/vdsm/storage/multipath.py
index 741f1a1..05fd186 100644
--- a/vdsm/storage/multipath.py
+++ b/vdsm/storage/multipath.py
@@ -30,6 +30,7 @@ import re
from collections import namedtuple
from vdsm import constants
+from vdsm import utils
import misc
import iscsi
import supervdsm
@@ -49,13 +50,47 @@ MPATH_CONF = "/etc/multipath.conf"
OLD_TAGS = ["# RHAT REVISION 0.2", "# RHEV REVISION 0.3",
"# RHEV REVISION 0.4", "# RHEV REVISION 0.5",
- "# RHEV REVISION 0.6", "# RHEV REVISION 0.7"]
-MPATH_CONF_TAG = "# RHEV REVISION 0.8"
+ "# RHEV REVISION 0.6", "# RHEV REVISION 0.7",
+ "# RHEV REVISION 0.8", "# RHEV REVISION 0.9"]
+MPATH_CONF_TAG = "# RHEV REVISION 1.0"
MPATH_CONF_PRIVATE_TAG = "# RHEV PRIVATE"
-MPATH_CONF_TEMPLATE = MPATH_CONF_TAG + constants.STRG_MPATH_CONF
+STRG_MPATH_CONF = (
+ "\n\n"
+ "defaults {\n"
+ " polling_interval 5\n"
+ " getuid_callout \"%(scsi_id_path)s --whitelisted "
+ "--replace-whitespace --device=/dev/%%n\"\n"
+ " no_path_retry fail\n"
+ " user_friendly_names no\n"
+ " flush_on_last_del yes\n"
+ " fast_io_fail_tmo 5\n"
+ " dev_loss_tmo 30\n"
+ " max_fds 4096\n"
+ "}\n"
+ "\n"
+ "devices {\n"
+ "device {\n"
+ " vendor \"HITACHI\"\n"
+ " product \"DF.*\"\n"
+ " getuid_callout \"%(scsi_id_path)s --whitelisted "
+ "--replace-whitespace --device=/dev/%%n\"\n"
+ "}\n"
+ "device {\n"
+ " vendor \"COMPELNT\"\n"
+ " product \"Compellent Vol\"\n"
+ " no_path_retry fail\n"
+ "}\n"
+ "}"
+)
+MPATH_CONF_TEMPLATE = MPATH_CONF_TAG + STRG_MPATH_CONF
log = logging.getLogger("Storage.Multipath")
+_scsi_id = utils.CommandPath("scsi_id",
+ "/sbin/scsi_id", # EL6
+ "/usr/lib/udev/scsi_id", # Fedora
+ )
+
def rescan():
"""
@@ -127,7 +162,7 @@ def setupMultipath():
os.path.basename(MPATH_CONF), MAX_CONF_COPIES,
cp=True, persist=True)
with tempfile.NamedTemporaryFile() as f:
- f.write(MPATH_CONF_TEMPLATE)
+ f.write(MPATH_CONF_TEMPLATE % {'scsi_id_path': _scsi_id.cmd})
f.flush()
cmd = [constants.EXT_CP, f.name, MPATH_CONF]
rc = misc.execCmd(cmd, sudo=True)[0]
@@ -173,7 +208,7 @@ def getDeviceSize(dev):
def getScsiSerial(physdev):
blkdev = os.path.join("/dev", physdev)
- cmd = [constants.EXT_SCSI_ID,
+ cmd = [_scsi_id.cmd,
"--page=0x80",
"--whitelisted",
"--export",
diff --git a/vdsm/sudoers.vdsm.in b/vdsm/sudoers.vdsm.in
index ab99e8e..4fc75f9 100644
--- a/vdsm/sudoers.vdsm.in
+++ b/vdsm/sudoers.vdsm.in
@@ -23,7 +23,6 @@ Cmnd_Alias VDSM_STORAGE = @MOUNT_PATH@, @UMOUNT_PATH@, \
@SERVICE_PATH@ iscsid *, \
@SERVICE_PATH@ multipathd restart, \
@SERVICE_PATH@ multipathd reload, \
- @SCSI_ID_PATH@, \
@ISCSIADM_PATH@ *, \
@LVM_PATH@, \
@CAT_PATH@ /sys/block/*/device/../../*, \
--
1.8.1