Blob Blame History Raw
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