In-house patch to adopt EMC driver to use Solaris' iscsiadm(1M) rather
than that from Linux. Patch has not yet been submitted upstream.
--- cinder-2015.1.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py.~1~ 2016-01-30 23:55:52.360305136 -0800
+++ cinder-2015.1.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py 2016-01-31 00:03:10.160731018 -0800
@@ -17,6 +17,7 @@ ISCSI Drivers for EMC VMAX arrays based
"""
import os
+import sys
from oslo_log import log as logging
import six
@@ -162,17 +163,43 @@ class EMCVMAXISCSIDriver(driver.ISCSIDri
LOG.error(_LE(
"You must set your iscsi_ip_address in cinder.conf."))
- (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
- '-t', 'sendtargets', '-p',
- run_as_root=True)
-
- LOG.info(_LI(
- "smis_do_iscsi_discovery is: %(out)s."),
- {'out': out})
targets = []
- for target in out.splitlines():
- targets.append(target)
+ if sys.platform == 'sunos5':
+ data = _("Unexpected response while retrieving discovery-address "
+ "objects for volume '%s'") % volume["name"]
+
+ self._execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
+ (out, _err) = self._execute('/usr/sbin/iscsiadm', 'list',
+ 'discovery-address', '-v',
+ lines = out.splitlines()
+ if not lines[0].strip().startswith('Discovery Address: '):
+ raise exception.VolumeBackendAPIException(data=data)
+
+ for i in range(1, len(lines), 2):
+ name = lines[i].strip()
+ if not name.startswith('Target name: '):
+ raise exception.VolumeBackendAPIException(data=data)
+ (_, _, name) = name.split()
+
+ address = lines[i + 1].strip()
+ if not address.startswith('Target address: '):
+ raise exception.VolumeBackendAPIException(data=data)
+ (_, _, address, tpgt) = address.split()
+ target = address + tpgt + ' ' + name
+ targets.append(target)
+ else:
+ (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
+ '-t', 'sendtargets', '-p',
+ run_as_root=True)
+
+ LOG.info(_LI(
+ "smis_do_iscsi_discovery is: %(out)s."),
+ {'out': out})
+ for target in out.splitlines():
+ targets.append(target)
return targets