stats = self.driver.get_volume_stats(True)
const = 0.0009765625
self.assertEqual('FC', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertFalse(stats['pools'][0]['QoS_support'])
self.standard_logout)
stats = self.driver.get_volume_stats(True)
self.assertEqual('FC', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertFalse(stats['pools'][0]['QoS_support'])
stats = self.driver.get_volume_stats(True)
self.assertEqual('FC', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertFalse(stats['pools'][0]['QoS_support'])
stats = self.driver.get_volume_stats(True)
self.assertEqual('FC', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertFalse(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['QoS_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb'])
stats = self.driver.get_volume_stats(True)
self.assertEqual('FC', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization'])
stats = self.driver.get_volume_stats(True)
const = 0.0009765625
self.assertEqual('iSCSI', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb'])
stats = self.driver.get_volume_stats(True)
self.assertEqual('iSCSI', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
total_capacity_gb = 8192 * const
stats = self.driver.get_volume_stats(True)
self.assertEqual('iSCSI', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization'])
stats = self.driver.get_volume_stats(True)
self.assertEqual('iSCSI', stats['storage_protocol'])
+ self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization'])
3.0.5 - Adds v2 unmanaged replication support
3.0.6 - Adding manage/unmanage snapshot support
3.0.7 - Enable standard capabilities based on 3PAR licenses
+ 3.0.8 - Optimize array ID retrieval
"""
- VERSION = "3.0.7"
+ VERSION = "3.0.8"
stats = {}
if client is not None:
client.logout()
- def do_setup(self, context, volume=None, timeout=None):
+ def do_setup(self, context, volume=None, timeout=None, stats=None):
if hpe3parclient is None:
msg = _('You must install hpe3parclient before using 3PAR'
' drivers. Run "pip install python-3parclient" to'
LOG.error(msg)
raise exception.InvalidInput(message=msg)
- # get the client ID for provider_location
- try:
- self.client_login()
- info = self.client.getStorageSystemInfo()
- self.client.id = six.text_type(info['id'])
- except Exception:
- self.client.id = 0
- finally:
- self.client_logout()
+ # Get the client ID for provider_location. We only need to retrieve
+ # the ID directly from the array if the driver stats are not provided.
+ if not stats:
+ try:
+ self.client_login()
+ info = self.client.getStorageSystemInfo()
+ self.client.id = six.text_type(info['id'])
+ except Exception:
+ self.client.id = 0
+ finally:
+ self.client_logout()
+ else:
+ self.client.id = stats['array_id']
def check_for_setup_error(self):
if self.client:
'storage_protocol': None,
'vendor_name': 'Hewlett Packard Enterprise',
'volume_backend_name': None,
+ 'array_id': info['id'],
'pools': pools}
def _check_license_enabled(self, valid_licenses,
3.0.2 - Adds v2 managed replication support
3.0.3 - Adds v2 unmanaged replication support
3.0.4 - Adding manage/unmanage snapshot support
+ 3.0.5 - Optimize array ID retrieval
"""
- VERSION = "3.0.4"
+ VERSION = "3.0.5"
def __init__(self, *args, **kwargs):
super(HPE3PARFCDriver, self).__init__(*args, **kwargs)
# If replication is enabled and we cannot login, we do not want to
# raise an exception so a failover can still be executed.
try:
- common.do_setup(None, volume, timeout=timeout)
+ common.do_setup(None, volume=volume, timeout=timeout,
+ stats=self._stats)
common.client_login()
except Exception:
if common._replication_enabled:
3.0.4 - Adds v2 managed replication support
3.0.5 - Adds v2 unmanaged replication support
3.0.6 - Adding manage/unmanage snapshot support
+ 3.0.7 - Optimize array ID retrieval
"""
- VERSION = "3.0.6"
+ VERSION = "3.0.7"
def __init__(self, *args, **kwargs):
super(HPE3PARISCSIDriver, self).__init__(*args, **kwargs)
# If replication is enabled and we cannot login, we do not want to
# raise an exception so a failover can still be executed.
try:
- common.do_setup(None, volume, timeout=timeout)
+ common.do_setup(None, volume=volume, timeout=timeout,
+ stats=self._stats)
common.client_login()
except Exception:
if common._replication_enabled: