From: Daniel P. Berrangé <berrange(a)redhat.com>
Allow virCommand to find 'dmidecode' in $PATH. This command is only
usable when running privileged since it relies on reading from a
privileged kernel file. Thus we can assume both 'bin' and 'sbin' dirs
will be in $PATH and virFindFileInPath will do the right thing to
find it when called by virCommand.
Gating the iscsi driver backend on a isciadm probe is likely to do
more harm than good as it needlessly disables the code if the dev
forgot to install iscsiadm at build time. As a Linux only command
it is simpler to gate the feature based on the platform choice and
allow missing binaries to be diagnose at runtime.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
meson.build | 5 ++--
src/util/viriscsi.c | 55 ++++++++++++++++++++++----------------------
tests/viriscsitest.c | 16 ++++++-------
3 files changed, 37 insertions(+), 39 deletions(-)
diff --git a/meson.build b/meson.build
index d355767a53..9759a3322b 100644
--- a/meson.build
+++ b/meson.build
@@ -854,7 +854,6 @@ optional_test_programs = [
]
optional_programs = [
- 'iscsiadm',
'mdevctl',
'mm-ctl',
'modprobe',
@@ -1825,11 +1824,11 @@ if conf.has('WITH_LIBVIRTD')
error('Need glusterfs (libgfapi) for gluster storage driver')
endif
- if not get_option('storage_iscsi').disabled() and iscsiadm_prog.found()
+ if not get_option('storage_iscsi').disabled() and host_machine.system() ==
'linux'
use_storage = true
conf.set('WITH_STORAGE_ISCSI', 1)
elif get_option('storage_iscsi').enabled()
- error('We need iscsiadm for iSCSI storage driver')
+ error('Linux host needed for iSCSI storage driver using iscsiadm')
endif
if not get_option('storage_iscsi_direct').disabled() and libiscsi_dep.found()
diff --git a/src/util/viriscsi.c b/src/util/viriscsi.c
index a70c87cbdb..f6b2cdba0c 100644
--- a/src/util/viriscsi.c
+++ b/src/util/viriscsi.c
@@ -88,8 +88,8 @@ virISCSIGetSession(const char *devpath,
int exitstatus = 0;
g_autofree char *error = NULL;
- g_autoptr(virCommand) cmd = virCommandNewArgList(ISCSIADM, "--mode",
- "session", NULL);
+ g_autoptr(virCommand) cmd = virCommandNewArgList("iscsiadm",
"--mode",
+ "session", NULL);
virCommandSetErrorBuffer(cmd, &error);
if (virCommandRunRegex(cmd,
@@ -123,8 +123,8 @@ virStorageBackendIQNFound(const char *initiatoriqn,
g_autofree char *outbuf = NULL;
g_autofree char *iface = NULL;
g_autofree char *iqn = NULL;
- g_autoptr(virCommand) cmd = virCommandNewArgList(ISCSIADM,
- "--mode",
"iface", NULL);
+ g_autoptr(virCommand) cmd = virCommandNewArgList("iscsiadm",
+ "--mode",
"iface", NULL);
*ifacename = NULL;
@@ -193,8 +193,8 @@ virStorageBackendIQNFound(const char *initiatoriqn,
error:
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("malformed output of %1$s: %2$s"),
- ISCSIADM, line);
+ _("malformed output of 'iscsiadm': %1$s"),
+ line);
goto cleanup;
}
@@ -215,7 +215,7 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn,
VIR_DEBUG("Attempting to create interface '%s' with IQN
'%s'",
temp_ifacename, initiatoriqn);
- newcmd = virCommandNewArgList(ISCSIADM,
+ newcmd = virCommandNewArgList("iscsiadm",
"--mode", "iface",
"--interface", temp_ifacename,
"--op", "new",
@@ -225,13 +225,12 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn,
* We will just rely on whether the interface got created
* properly. */
if (virCommandRun(newcmd, &exitstatus) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Failed to run command '%1$s' to create new iscsi
interface"),
- ISCSIADM);
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Failed to run command 'iscsiadm' to create new
iscsi interface"));
return -1;
}
- updatecmd = virCommandNewArgList(ISCSIADM,
+ updatecmd = virCommandNewArgList("iscsiadm",
"--mode", "iface",
"--interface", temp_ifacename,
"--op", "update",
@@ -244,8 +243,8 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn,
* rely on whether iface file got updated properly. */
if (virCommandRun(updatecmd, &exitstatus) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Failed to run command '%1$s' to update iscsi
interface with IQN '%2$s'"),
- ISCSIADM, initiatoriqn);
+ _("Failed to run command 'iscsiadm' to update iscsi
interface with IQN '%1$s'"),
+ initiatoriqn);
return -1;
}
@@ -273,7 +272,7 @@ virISCSIConnection(const char *portal,
const char **extraargv)
{
const char *const baseargv[] = {
- ISCSIADM,
+ "iscsiadm",
"--mode", "node",
"--portal", portal,
"--targetname", target,
@@ -343,11 +342,11 @@ virISCSIConnectionLogout(const char *portal,
int
virISCSIRescanLUNs(const char *session)
{
- g_autoptr(virCommand) cmd = virCommandNewArgList(ISCSIADM,
- "--mode",
"session",
- "-r", session,
- "-R",
- NULL);
+ g_autoptr(virCommand) cmd = virCommandNewArgList("iscsiadm",
+ "--mode",
"session",
+ "-r", session,
+ "-R",
+ NULL);
return virCommandRun(cmd, NULL);
}
@@ -396,11 +395,11 @@ virISCSIScanTargetsInternal(const char *portal,
int vars[] = { 2 };
struct virISCSITargetList list = { 0 };
size_t i;
- g_autoptr(virCommand) cmd = virCommandNewArgList(ISCSIADM,
- "--mode",
"discovery",
- "--type",
"sendtargets",
- "--portal", portal,
- NULL);
+ g_autoptr(virCommand) cmd = virCommandNewArgList("iscsiadm",
+ "--mode",
"discovery",
+ "--type",
"sendtargets",
+ "--portal", portal,
+ NULL);
if (!persist) {
virCommandAddArgList(cmd,
@@ -512,7 +511,7 @@ virISCSINodeNew(const char *portal,
g_autoptr(virCommand) cmd = NULL;
int status;
- cmd = virCommandNewArgList(ISCSIADM,
+ cmd = virCommandNewArgList("iscsiadm",
"--mode", "node",
"--portal", portal,
"--targetname", target,
@@ -528,8 +527,8 @@ virISCSINodeNew(const char *portal,
if (status != 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("%1$s failed new mode for target '%2$s' with status
'%3$d'"),
- ISCSIADM, target, status);
+ _("'iscsiadm': failed new mode for target
'%1$s' with status '%2$d'"),
+ target, status);
return -1;
}
@@ -546,7 +545,7 @@ virISCSINodeUpdate(const char *portal,
g_autoptr(virCommand) cmd = NULL;
int status;
- cmd = virCommandNewArgList(ISCSIADM,
+ cmd = virCommandNewArgList("iscsiadm",
"--mode", "node",
"--portal", portal,
"--target", target,
diff --git a/tests/viriscsitest.c b/tests/viriscsitest.c
index f2539e47b0..ee29b6f259 100644
--- a/tests/viriscsitest.c
+++ b/tests/viriscsitest.c
@@ -82,7 +82,7 @@ static void testIscsiadmCb(const char *const*args,
{
struct testIscsiadmCbData *data = opaque;
- if (args[0] && STREQ(args[0], ISCSIADM) &&
+ if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "session") &&
args[3] == NULL) {
@@ -90,7 +90,7 @@ static void testIscsiadmCb(const char *const*args,
*output = g_strdup(iscsiadmSessionOutputNonFlash);
else
*output = g_strdup(iscsiadmSessionOutput);
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "discovery") &&
args[3] && STREQ(args[3], "--type") &&
@@ -101,7 +101,7 @@ static void testIscsiadmCb(const char *const*args,
args[8] && STREQ(args[8], "nonpersistent") &&
args[9] == NULL) {
*output = g_strdup(iscsiadmSendtargetsOutput);
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "node") &&
args[3] && STREQ(args[3], "--portal") &&
@@ -120,7 +120,7 @@ static void testIscsiadmCb(const char *const*args,
* target: iqn.2004-06.example:example1:iscsi.test, \
* portal: 10.20.30.40:3260,1] successful.
*/
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "iface") &&
args[3] == NULL) {
@@ -128,7 +128,7 @@ static void testIscsiadmCb(const char *const*args,
*output = g_strdup(iscsiadmIfaceIfaceOutput);
else
*output = g_strdup(iscsiadmIfaceDefaultOutput);
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "iface") &&
args[3] && STREQ(args[3], "--interface") &&
@@ -142,7 +142,7 @@ static void testIscsiadmCb(const char *const*args,
* New interface libvirt-iface-03020100 added
*/
data->iface_created = true;
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "iface") &&
args[3] && STREQ(args[3], "--interface") &&
@@ -160,7 +160,7 @@ static void testIscsiadmCb(const char *const*args,
*
* libvirt-iface-03020100 updated.
*/
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "discovery") &&
args[3] && STREQ(args[3], "--type") &&
@@ -172,7 +172,7 @@ static void testIscsiadmCb(const char *const*args,
args[9] == NULL &&
data->iface_created) {
*output = g_strdup(iscsiadmSendtargetsOutput);
- } else if (args[0] && STREQ(args[0], ISCSIADM) &&
+ } else if (args[0] && STREQ(args[0], "iscsiadm") &&
args[1] && STREQ(args[1], "--mode") &&
args[2] && STREQ(args[2], "node") &&
args[3] && STREQ(args[3], "--portal") &&
--
2.49.0