cinder/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py

1526 lines
67 KiB
Python

# Copyright (c) 2017-2019 Dell Inc. or its subsidiaries.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from copy import deepcopy
import six
from cinder import context
from cinder.objects import fields
from cinder.objects import group
from cinder.objects import group_snapshot
from cinder.objects import volume_attachment
from cinder.objects import volume_type
from cinder.tests.unit import fake_group
from cinder.tests.unit import fake_snapshot
from cinder.tests.unit import fake_volume
from cinder.volume.drivers.dell_emc.powermax import utils
CINDER_EMC_CONFIG_DIR = '/etc/cinder/'
class PowerMaxData(object):
# array info
array = '000197800123'
uni_array = u'000197800123'
array_herc = '000197900123'
array_model = 'PowerMax_8000'
srp = 'SRP_1'
slo = 'Diamond'
slo_diamond = 'Diamond'
slo_silver = 'Silver'
workload = 'DSS'
port_group_name_f = 'OS-fibre-PG'
port_group_name_i = 'OS-iscsi-PG'
masking_view_name_f = 'OS-HostX-F-OS-fibre-PG-MV'
masking_view_name_Y_f = 'OS-HostY-F-OS-fibre-PG-MV'
masking_view_name_i = 'OS-HostX-SRP_1-I-OS-iscsi-PG-MV'
initiatorgroup_name_f = 'OS-HostX-F-IG'
initiatorgroup_name_i = 'OS-HostX-I-IG'
parent_sg_f = 'OS-HostX-F-OS-fibre-PG-SG'
parent_sg_i = 'OS-HostX-I-OS-iscsi-PG-SG'
storagegroup_name_f = 'OS-HostX-SRP_1-DiamondDSS-OS-fibre-PG'
storagegroup_name_i = 'OS-HostX-SRP_1-Diamond-DSS-OS-iscsi-PG'
defaultstoragegroup_name = 'OS-SRP_1-Diamond-DSS-SG'
storagegroup_list = [defaultstoragegroup_name]
default_sg_no_slo = 'OS-no_SLO-SG'
default_sg_compr_disabled = 'OS-SRP_1-Diamond-DSS-CD-SG'
default_sg_re_enabled = 'OS-SRP_1-Diamond-DSS-RE-SG'
default_sg_no_slo_re_enabled = 'OS-SRP_1-Diamond-NONE-RE-SG'
failed_resource = 'OS-failed-resource'
fake_host = 'HostX@Backend#Diamond+DSS+SRP_1+000197800123'
new_host = 'HostX@Backend#Silver+OLTP+SRP_1+000197800123'
none_host = 'HostX@Backend#Diamond+None+SRP_1+000197800123'
version = '3.1.0'
volume_wwn = '600000345'
remote_array = '000197800124'
device_id = '00001'
device_id2 = '00002'
device_id3 = '00003'
device_id4 = '00004'
rdf_group_name_1 = '23_24_007'
rdf_group_name_2 = '23_24_008'
rdf_group_name_3 = '23_24_009'
rdf_group_name_4 = '23_24_010'
rdf_group_no_1 = '70'
rdf_group_no_2 = '71'
rdf_group_no_3 = '72'
rdf_group_no_4 = '73'
u4v_version = '91'
storagegroup_name_source = 'Grp_source_sg'
storagegroup_name_target = 'Grp_target_sg'
group_snapshot_name = 'Grp_snapshot'
target_group_name = 'Grp_target'
storagegroup_name_with_id = 'GrpId_group_name'
rdf_managed_async_grp = 'OS-%s-Asynchronous-rdf-sg' % rdf_group_name_1
default_sg_re_managed_list = [default_sg_re_enabled, rdf_managed_async_grp]
volume_id = '2b06255d-f5f0-4520-a953-b029196add6a'
no_slo_sg_name = 'OS-HostX-No_SLO-OS-fibre-PG'
temp_snapvx = 'temp-00001-snapshot_for_clone'
next_gen_ucode = 5978
gvg_group_id = 'test-gvg'
sg_tags = 'production,test'
# connector info
wwpn1 = '123456789012345'
wwpn2 = '123456789054321'
wwnn1 = '223456789012345'
initiator = 'iqn.1993-08.org.debian: 01: 222'
ip, ip2 = u'123.456.7.8', u'123.456.7.9'
iqn = u'iqn.1992-04.com.emc:600009700bca30c01e3e012e00000001,t,0x0001'
iqn2 = u'iqn.1992-04.com.emc:600009700bca30c01e3e012e00000002,t,0x0001'
connector = {'ip': ip,
'initiator': initiator,
'wwpns': [wwpn1, wwpn2],
'wwnns': [wwnn1],
'host': 'HostX'}
fabric_name_prefix = 'fakeFabric'
end_point_map = {connector['wwpns'][0]: [wwnn1],
connector['wwpns'][1]: [wwnn1]}
target_wwns = [wwnn1]
zoning_mappings = {
'array': u'000197800123',
'init_targ_map': end_point_map,
'initiator_group': initiatorgroup_name_f,
'port_group': port_group_name_f,
'target_wwns': target_wwns}
zoning_mappings_metro = deepcopy(zoning_mappings)
zoning_mappings_metro.update({'metro_port_group': port_group_name_f,
'metro_ig': initiatorgroup_name_f,
'metro_array': remote_array})
device_map = {}
for wwn in connector['wwpns']:
fabric_name = ''.join([fabric_name_prefix,
wwn[-2:]])
target_wwn = wwn[::-1]
fabric_map = {'initiator_port_wwn_list': [wwn],
'target_port_wwn_list': [target_wwn]
}
device_map[fabric_name] = fabric_map
iscsi_device_info = {'maskingview': masking_view_name_i,
'ip_and_iqn': [{'ip': ip,
'iqn': initiator}],
'is_multipath': True,
'array': array,
'controller': {'host': '10.00.00.00'},
'hostlunid': 3,
'device_id': device_id}
iscsi_device_info_metro = deepcopy(iscsi_device_info)
iscsi_device_info_metro['metro_ip_and_iqn'] = [{'ip': ip2, 'iqn': iqn2}]
iscsi_device_info_metro['metro_hostlunid'] = 2
fc_device_info = {'maskingview': masking_view_name_f,
'array': array,
'controller': {'host': '10.00.00.00'},
'hostlunid': 3}
# snapshot info
snapshot_id = '390eeb4d-0f56-4a02-ba14-167167967014'
snapshot_display_id = 'my_snap'
managed_snap_id = 'OS-390eeb4d-0f56-4a02-ba14-167167967014'
test_snapshot_snap_name = 'OS-' + snapshot_id[:6] + snapshot_id[-9:]
snap_location = {'snap_name': test_snapshot_snap_name,
'source_id': device_id}
# cinder volume info
ctx = context.RequestContext('admin', 'fake', True)
provider_location = {'array': array,
'device_id': device_id}
provider_location2 = {'array': six.text_type(array),
'device_id': device_id2}
provider_location3 = {'array': six.text_type(remote_array),
'device_id': device_id2}
provider_location4 = {'array': six.text_type(uni_array),
'device_id': device_id}
provider_location_clone = {'array': array,
'device_id': device_id,
'snap_name': temp_snapvx,
'source_device_id': device_id}
provider_location_snapshot = {'array': array,
'device_id': device_id,
'snap_name': test_snapshot_snap_name,
'source_device_id': device_id}
provider_location5 = {'array': remote_array,
'device_id': device_id}
replication_update = (
{'replication_status': 'enabled',
'replication_driver_data': six.text_type(
{'array': remote_array, 'device_id': device_id2})})
legacy_provider_location = {
'classname': 'Symm_StorageVolume',
'keybindings': {'CreationClassName': u'Symm_StorageVolume',
'SystemName': u'SYMMETRIX+000197800123',
'DeviceID': device_id,
'SystemCreationClassName': u'Symm_StorageSystem'}}
legacy_provider_location2 = {
'classname': 'Symm_StorageVolume',
'keybindings': {'CreationClassName': u'Symm_StorageVolume',
'SystemName': u'SYMMETRIX+000197800123',
'DeviceID': device_id2,
'SystemCreationClassName': u'Symm_StorageSystem'}}
test_volume_type = fake_volume.fake_volume_type_obj(
context=ctx
)
test_volume = fake_volume.fake_volume_obj(
context=ctx, name='vol1', size=2, provider_auth=None,
provider_location=six.text_type(provider_location),
volume_type=test_volume_type, host=fake_host,
replication_driver_data=six.text_type(provider_location3))
test_attached_volume = fake_volume.fake_volume_obj(
id='4732de9b-98a4-4b6d-ae4b-3cafb3d34220', context=ctx, name='vol1',
size=0, provider_auth=None, attach_status='attached',
provider_location=six.text_type(provider_location), host=fake_host,
volume_type=test_volume_type,
replication_driver_data=six.text_type(provider_location3))
test_legacy_vol = fake_volume.fake_volume_obj(
context=ctx, name='vol1', size=2, provider_auth=None,
provider_location=six.text_type(legacy_provider_location),
replication_driver_data=six.text_type(legacy_provider_location2),
host=fake_host, volume_type=test_volume_type)
test_clone_volume = fake_volume.fake_volume_obj(
context=ctx, name='vol1', size=2, provider_auth=None,
provider_location=six.text_type(provider_location2),
host=fake_host, source_volid=test_volume.id,
snapshot_id=snapshot_id, _name_id=test_volume.id)
test_volume_snap_manage = fake_volume.fake_volume_obj(
context=ctx, name='vol1', size=2, provider_auth=None,
display_name='vol1',
provider_location=six.text_type(provider_location),
volume_type=test_volume_type, host=fake_host,
replication_driver_data=six.text_type(provider_location4))
test_snapshot = fake_snapshot.fake_snapshot_obj(
context=ctx, id=snapshot_id,
name='my_snap', size=2,
provider_location=six.text_type(snap_location),
host=fake_host, volume=test_volume)
test_legacy_snapshot = fake_snapshot.fake_snapshot_obj(
context=ctx, id=test_volume.id, name='my_snap', size=2,
provider_location=six.text_type(legacy_provider_location),
host=fake_host, volume=test_volume)
test_failed_snap = fake_snapshot.fake_snapshot_obj(
context=ctx,
id='4732de9b-98a4-4b6d-ae4b-3cafb3d34220',
name=failed_resource,
size=2,
provider_location=six.text_type(snap_location),
host=fake_host, volume=test_volume)
test_snapshot_manage = fake_snapshot.fake_snapshot_obj(
context=ctx, id=snapshot_id,
name='my_snap', size=2,
provider_location=six.text_type(snap_location),
host=fake_host, volume=test_volume_snap_manage,
display_name='my_snap')
test_volume_attachment = volume_attachment.VolumeAttachment(
id='2b06255d-f5f0-4520-a953-b029196add6b', volume_id=test_volume.id,
connector=connector, attached_host='HostX')
location_info = {'location_info': '000197800123#SRP_1#Diamond#DSS',
'storage_protocol': 'FC'}
test_host = {'capabilities': location_info,
'host': fake_host}
# replication
rep_backend_id_sync = 'rep_backend_id_sync'
rep_backend_id_async = 'rep_backend_id_async'
rep_backend_id_metro = 'rep_backend_id_metro'
rep_backend_id_sync_2 = 'rep_backend_id_sync_2'
rep_dev_1 = {
utils.BACKEND_ID: rep_backend_id_sync,
'target_device_id': remote_array,
'remote_port_group': port_group_name_f,
'remote_pool': srp,
'rdf_group_label': rdf_group_name_1,
'mode': utils.REP_SYNC,
'allow_extend': True}
rep_dev_2 = {
utils.BACKEND_ID: rep_backend_id_async,
'target_device_id': remote_array,
'remote_port_group': port_group_name_f,
'remote_pool': srp,
'rdf_group_label': rdf_group_name_2,
'mode': utils.REP_ASYNC,
'allow_extend': True}
rep_dev_3 = {
utils.BACKEND_ID: rep_backend_id_metro,
'target_device_id': remote_array,
'remote_port_group': port_group_name_f,
'remote_pool': srp,
'rdf_group_label': rdf_group_name_3,
'mode': utils.REP_METRO,
'allow_extend': True}
sync_rep_device = [rep_dev_1]
async_rep_device = [rep_dev_2]
metro_rep_device = [rep_dev_3]
multi_rep_device = [rep_dev_1, rep_dev_2, rep_dev_3]
rep_config_sync = {
utils.BACKEND_ID: rep_backend_id_sync,
'array': remote_array,
'portgroup': port_group_name_f,
'srp': srp,
'rdf_group_label': rdf_group_name_1,
'mode': utils.REP_SYNC,
'allow_extend': True,
'sync_interval': 3,
'sync_retries': 200}
rep_config_async = {
utils.BACKEND_ID: rep_backend_id_async,
'array': remote_array,
'portgroup': port_group_name_f,
'srp': srp,
'rdf_group_label': rdf_group_name_2,
'mode': utils.REP_ASYNC,
'allow_extend': True,
'sync_interval': 3,
'sync_retries': 200}
rep_config_metro = {
utils.BACKEND_ID: rep_backend_id_metro,
'array': remote_array,
'portgroup': port_group_name_f,
'srp': srp,
'rdf_group_label': rdf_group_name_3,
'mode': utils.REP_METRO,
'allow_extend': True,
'sync_interval': 3,
'sync_retries': 200}
rep_config_sync_2 = {
utils.BACKEND_ID: rep_backend_id_sync_2,
'array': remote_array,
'portgroup': port_group_name_f,
'srp': srp,
'rdf_group_label': rdf_group_name_1,
'mode': utils.REP_SYNC,
'allow_extend': True,
'sync_interval': 3,
'sync_retries': 200}
sync_rep_config_list = [rep_config_sync]
async_rep_config_list = [rep_config_async]
metro_rep_config_list = [rep_config_metro]
multi_rep_config_list = [rep_config_sync, rep_config_async,
rep_config_metro, rep_config_sync_2]
# extra-specs
vol_type_extra_specs = {'pool_name': u'Diamond+DSS+SRP_1+000197800123'}
vol_type_extra_specs_none_pool = {
'pool_name': u'None+NONE+SRP_1+000197800123'}
vol_type_extra_specs_optimised_pool = {
'pool_name': u'Optimized+NONE+SRP_1+000197800123'}
vol_type_extra_specs_next_gen_pool = {
'pool_name': u'Optimized+SRP_1+000197800123'}
vol_type_extra_specs_compr_disabled = {
'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'storagetype:disablecompression': 'true'}
vol_type_extra_specs_rep_enabled = {
'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'replication_enabled': '<is> True'}
vol_type_extra_specs_rep_enabled_backend_id_sync = {
'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'replication_enabled': '<is> True',
utils.REPLICATION_DEVICE_BACKEND_ID: rep_backend_id_sync}
vol_type_extra_specs_rep_enabled_backend_id_sync_2 = {
'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'replication_enabled': '<is> True',
utils.REPLICATION_DEVICE_BACKEND_ID: rep_backend_id_sync_2}
vol_type_extra_specs_rep_enabled_backend_id_async = {
'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'replication_enabled': '<is> True',
utils.REPLICATION_DEVICE_BACKEND_ID: rep_backend_id_async}
extra_specs = {'pool_name': u'Diamond+DSS+SRP_1+000197800123',
'slo': slo,
'workload': workload,
'srp': srp,
'array': array,
'interval': 3,
'retries': 120}
extra_specs_optimized = {
'pool_name': u'Optimized+None+SRP_1+000197800123',
'slo': 'Optimized', 'workload': 'None',
'srp': srp, 'array': array, 'interval': 3, 'retries': 120}
vol_type_extra_specs_tags = {
'storagetype:storagegrouptags': u'good, comma, separated,list'}
vol_type_extra_specs_tags_bad = {
'storagetype:storagegrouptags': u'B&d, [list]'}
extra_specs_port_group_template = deepcopy(extra_specs)
extra_specs_port_group_template['port_group_template'] = 'portGroupName'
extra_specs_migrate = deepcopy(extra_specs)
extra_specs_migrate[utils.PORTGROUPNAME] = port_group_name_f
extra_specs_disable_compression = deepcopy(extra_specs)
extra_specs_disable_compression[utils.DISABLECOMPRESSION] = 'true'
extra_specs_intervals_set = deepcopy(extra_specs)
extra_specs_intervals_set['interval'] = 1
extra_specs_intervals_set['retries'] = 1
extra_specs_rep_enabled = deepcopy(extra_specs)
extra_specs_rep_enabled['replication_enabled'] = True
rep_extra_specs = deepcopy(extra_specs_rep_enabled)
rep_extra_specs['array'] = remote_array
rep_extra_specs['interval'] = 1
rep_extra_specs['retries'] = 1
rep_extra_specs['srp'] = srp
rep_extra_specs['rep_mode'] = 'Synchronous'
rep_extra_specs['sync_interval'] = 3
rep_extra_specs['sync_retries'] = 200
rep_extra_specs['rdf_group_label'] = rdf_group_name_1
rep_extra_specs['rdf_group_no'] = rdf_group_no_1
rep_extra_specs2 = deepcopy(rep_extra_specs)
rep_extra_specs2[utils.PORTGROUPNAME] = port_group_name_f
rep_extra_specs3 = deepcopy(rep_extra_specs)
rep_extra_specs3['slo'] = slo
rep_extra_specs3['workload'] = workload
rep_extra_specs4 = deepcopy(rep_extra_specs3)
rep_extra_specs4['rdf_group_label'] = rdf_group_name_1
rep_extra_specs5 = deepcopy(rep_extra_specs2)
rep_extra_specs5['target_array_model'] = 'VMAX250F'
rep_extra_specs5['sync_interval'] = 3
rep_extra_specs5['sync_retries'] = 200
rep_extra_specs6 = deepcopy(rep_extra_specs3)
rep_extra_specs6['target_array_model'] = 'PMAX2000'
rep_extra_specs_ode = deepcopy(rep_extra_specs2)
rep_extra_specs_ode['array'] = array
rep_extra_specs_ode.pop('rep_mode')
rep_extra_specs_ode['mode'] = 'Metro'
rep_extra_specs_legacy = deepcopy(rep_extra_specs_ode)
rep_extra_specs_legacy['mode'] = 'Synchronous'
rep_extra_specs_rep_config = deepcopy(rep_extra_specs6)
rep_extra_specs_rep_config[utils.REP_CONFIG] = rep_config_sync
extra_specs_tags = deepcopy(extra_specs)
extra_specs_tags.update({utils.STORAGE_GROUP_TAGS: sg_tags})
rep_extra_specs_mgmt = deepcopy(rep_extra_specs)
rep_extra_specs_mgmt['srp'] = srp
rep_extra_specs_mgmt['mgmt_sg_name'] = rdf_managed_async_grp
rep_extra_specs_mgmt['sg_name'] = default_sg_no_slo_re_enabled
rep_extra_specs_mgmt['rdf_group_no'] = rdf_group_no_1
rep_extra_specs_mgmt['rdf_group_label'] = rdf_group_name_1
rep_extra_specs_mgmt['target_array_model'] = array_model
rep_extra_specs_mgmt['slo'] = 'Diamond'
rep_extra_specs_mgmt['workload'] = 'NONE'
rep_extra_specs_mgmt['sync_interval'] = 2
rep_extra_specs_mgmt['sync_retries'] = 200
rep_extra_specs_metro = deepcopy(rep_extra_specs)
rep_extra_specs_metro[utils.REP_MODE] = utils.REP_METRO
rep_extra_specs_metro[utils.METROBIAS] = True
rep_extra_specs_metro['replication_enabled'] = '<is> True'
rep_config = {
'array': remote_array, 'srp': srp, 'portgroup': port_group_name_i,
'rdf_group_no': rdf_group_no_1, 'sync_retries': 200,
'sync_interval': 1, 'rdf_group_label': rdf_group_name_1,
'allow_extend': True, 'mode': utils.REP_METRO}
ex_specs_rep_config = deepcopy(rep_extra_specs_metro)
ex_specs_rep_config['array'] = array
ex_specs_rep_config['rep_config'] = rep_config
ex_specs_rep_config_no_extend = deepcopy(ex_specs_rep_config)
ex_specs_rep_config_no_extend['rep_config']['allow_extend'] = False
test_volume_type_1 = volume_type.VolumeType(
id='2b06255d-f5f0-4520-a953-b029196add6a', name='abc',
extra_specs=extra_specs)
ex_specs_rep_config_sync = deepcopy(ex_specs_rep_config)
ex_specs_rep_config_sync[utils.REP_MODE] = utils.REP_SYNC
ex_specs_rep_config_sync[utils.REP_CONFIG]['mode'] = utils.REP_SYNC
test_volume_type_list = volume_type.VolumeTypeList(
objects=[test_volume_type_1])
test_vol_grp_name_id_only = 'ec870a2f-6bf7-4152-aa41-75aad8e2ea96'
test_vol_grp_name = 'Grp_source_sg_%s' % test_vol_grp_name_id_only
test_fo_vol_group = 'fo_vol_group_%s' % test_vol_grp_name_id_only
test_group_1 = group.Group(
context=None, name=storagegroup_name_source,
group_id='abc', size=1,
id=test_vol_grp_name_id_only, status='available',
provider_auth=None, volume_type_ids=['abc'],
group_type_id='grptypeid',
volume_types=test_volume_type_list,
host=fake_host, provider_location=six.text_type(provider_location))
test_group_failed = group.Group(
context=None, name=failed_resource,
group_id='14b8894e-54ec-450a-b168-c172a16ed166',
size=1,
id='318c721c-51ad-4160-bfe1-ebde2273836f',
status='available',
provider_auth=None, volume_type_ids=['abc'],
group_type_id='grptypeid',
volume_types=test_volume_type_list,
host=fake_host, provider_location=six.text_type(provider_location),
replication_status=fields.ReplicationStatus.DISABLED)
test_rep_group = fake_group.fake_group_obj(
context=ctx, name=storagegroup_name_source,
id=test_vol_grp_name_id_only, host=fake_host,
replication_status=fields.ReplicationStatus.ENABLED)
test_group = fake_group.fake_group_obj(
context=ctx, name=storagegroup_name_source,
id=test_vol_grp_name_id_only, host=fake_host)
test_group_without_name = fake_group.fake_group_obj(
context=ctx, name=None,
id=test_vol_grp_name_id_only, host=fake_host)
test_group_snapshot_1 = group_snapshot.GroupSnapshot(
context=None, id='6560405d-b89a-4f79-9e81-ad1752f5a139',
group_id='876d9fbb-de48-4948-9f82-15c913ed05e7',
name=group_snapshot_name,
group_type_id='c6934c26-dde8-4bf8-a765-82b3d0130e9f',
status='available',
group=test_group_1)
test_group_snapshot_failed = group_snapshot.GroupSnapshot(
context=None, id='0819dd5e-9aa1-4ec7-9dda-c78e51b2ad76',
group_id='1fc735cb-d36c-4352-8aa6-dc1e16b5a0a7',
name=failed_resource,
group_type_id='6b70de13-98c5-46b2-8f24-e4e96a8988fa',
status='available',
group=test_group_failed)
test_volume_group_member = fake_volume.fake_volume_obj(
context=ctx, name='vol1', size=2, provider_auth=None,
provider_location=six.text_type(provider_location),
volume_type=test_volume_type, host=fake_host,
replication_driver_data=six.text_type(provider_location3),
group_id=test_vol_grp_name_id_only)
# masking view dict
masking_view_dict = {
'array': array,
'connector': connector,
'device_id': device_id,
'init_group_name': initiatorgroup_name_f,
'initiator_check': None,
'maskingview_name': masking_view_name_f,
'parent_sg_name': parent_sg_f,
'srp': srp,
'storagetype:disablecompression': False,
utils.PORTGROUPNAME: port_group_name_f,
'slo': slo,
'storagegroup_name': storagegroup_name_f,
'volume_name': test_volume.name,
'workload': workload,
'replication_enabled': False,
'used_host_name': 'HostX',
'port_group_label': port_group_name_f}
masking_view_dict_no_slo = deepcopy(masking_view_dict)
masking_view_dict_no_slo.update(
{'slo': None, 'workload': None,
'storagegroup_name': no_slo_sg_name})
masking_view_dict_compression_disabled = deepcopy(masking_view_dict)
masking_view_dict_compression_disabled.update(
{'storagetype:disablecompression': True,
'storagegroup_name': 'OS-HostX-SRP_1-DiamondDSS-OS-fibre-PG-CD'})
masking_view_dict_replication_enabled = deepcopy(masking_view_dict)
masking_view_dict_replication_enabled.update(
{'replication_enabled': True,
'storagegroup_name': 'OS-HostX-SRP_1-DiamondDSS-OS-fibre-PG-RE'})
masking_view_dict_multiattach = deepcopy(masking_view_dict)
masking_view_dict_multiattach.update(
{utils.EXTRA_SPECS: extra_specs, utils.IS_MULTIATTACH: True,
utils.OTHER_PARENT_SG: parent_sg_i, utils.FAST_SG:
storagegroup_name_i, utils.NO_SLO_SG: no_slo_sg_name})
masking_view_dict_tags = deepcopy(masking_view_dict)
masking_view_dict_tags.update(
{'tag_list': sg_tags})
# vmax data
# sloprovisioning
compression_info = {'symmetrixId': ['000197800128']}
inititiatorgroup = [{'initiator': [wwpn1],
'hostId': initiatorgroup_name_f,
'maskingview': [masking_view_name_f]},
{'initiator': [initiator],
'hostId': initiatorgroup_name_i,
'maskingview': [masking_view_name_i]}]
initiator_list = [{'host': initiatorgroup_name_f,
'initiatorId': wwpn1,
'maskingview': [masking_view_name_f]},
{'host': initiatorgroup_name_i,
'initiatorId': initiator,
'maskingview': [masking_view_name_i]},
{'initiatorId': [
'FA-1D:4:' + wwpn1,
'SE-4E:0:' + initiator]}]
maskingview = [{'maskingViewId': masking_view_name_f,
'portGroupId': port_group_name_f,
'storageGroupId': storagegroup_name_f,
'hostId': initiatorgroup_name_f,
'maskingViewConnection': [
{'host_lun_address': '0003'}]},
{'maskingViewId': masking_view_name_i,
'portGroupId': port_group_name_i,
'storageGroupId': storagegroup_name_i,
'hostId': initiatorgroup_name_i,
'maskingViewConnection': [
{'host_lun_address': '0003'}]},
{}]
portgroup = [{'portGroupId': port_group_name_f,
'symmetrixPortKey': [
{'directorId': 'FA-1D',
'portId': '4'}],
'maskingview': [masking_view_name_f]},
{'portGroupId': port_group_name_i,
'symmetrixPortKey': [
{'directorId': 'SE-4E',
'portId': '0'}],
'maskingview': [masking_view_name_i]}]
port_list = [
{'symmetrixPort': {'num_of_masking_views': 1,
'maskingview': [masking_view_name_f],
'identifier': wwnn1,
'symmetrixPortKey': {
'directorId': 'FA-1D',
'portId': '4'},
'portgroup': [port_group_name_f]}},
{'symmetrixPort': {'identifier': initiator,
'symmetrixPortKey': {
'directorId': 'SE-4E',
'portId': '0'},
'ip_addresses': [ip],
'num_of_masking_views': 1,
'maskingview': [masking_view_name_i],
'portgroup': [port_group_name_i]}}]
sg_details = [{'srp': srp,
'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': defaultstoragegroup_name,
'slo': slo,
'workload': workload},
{'srp': srp,
'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': storagegroup_name_f,
'slo': slo,
'workload': workload,
'maskingview': [masking_view_name_f],
'parent_storage_group': [parent_sg_f]},
{'srp': srp,
'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': storagegroup_name_i,
'slo': slo,
'workload': workload,
'maskingview': [masking_view_name_i],
'parent_storage_group': [parent_sg_i]},
{'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': parent_sg_f,
'num_of_child_sgs': 1,
'child_storage_group': [storagegroup_name_f],
'maskingview': [masking_view_name_f]},
{'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': parent_sg_i,
'num_of_child_sgs': 1,
'child_storage_group': [storagegroup_name_i],
'maskingview': [masking_view_name_i], },
{'srp': srp,
'num_of_vols': 2,
'cap_gb': 2,
'storageGroupId': no_slo_sg_name,
'slo': None,
'workload': None,
'maskingview': [masking_view_name_i],
'parent_storage_group': [parent_sg_i]}
]
sg_details_rep = [{'childNames': [],
'numDevicesNonGk': 2,
'isLinkTarget': False,
'rdf': True,
'capacityGB': 2.0,
'name': storagegroup_name_source,
'snapVXSnapshots': ['6560405d-752f5a139'],
'symmetrixId': array,
'numSnapVXSnapshots': 1}]
sg_rdf_details = [{'storageGroupName': test_vol_grp_name,
'symmetrixId': array,
'modes': ['Synchronous'],
'rdfGroupNumber': rdf_group_no_1,
'states': ['Synchronized']},
{'storageGroupName': test_fo_vol_group,
'symmetrixId': array,
'modes': ['Synchronous'],
'rdfGroupNumber': rdf_group_no_1,
'states': ['Failed Over']}]
sg_rdf_group_details = {
"storageGroupName": test_vol_grp_name,
"symmetrixId": array,
"volumeRdfTypes": ["R1"],
"modes": ["Asynchronous"],
"totalTracks": 8205,
"largerRdfSides": ["Equal"],
"rdfGroupNumber": 1,
"states": ["suspended"]}
sg_list = {'storageGroupId': [storagegroup_name_f,
defaultstoragegroup_name]}
sg_list_rep = [storagegroup_name_with_id]
srp_details = {'srp_capacity': {u'subscribed_total_tb': 93.52,
u'usable_used_tb': 8.62,
u'usable_total_tb': 24.45,
u'snapshot_modified_tb': 0.0,
u'subscribed_allocated_tb': 18.77,
u'snapshot_total_tb': 1.58},
'srpId': srp,
'reserved_cap_percent': 10}
array_info_wl = {'RestServerIp': '1.1.1.1', 'RestServerPort': 3448,
'RestUserName': 'smc', 'RestPassword': 'smc',
'SSLVerify': False, 'SerialNumber': array,
'srpName': 'SRP_1', 'PortGroup': port_group_name_i,
'SLO': 'Diamond', 'Workload': 'OLTP'}
array_info_no_wl = {'RestServerIp': '1.1.1.1', 'RestServerPort': 3448,
'RestUserName': 'smc', 'RestPassword': 'smc',
'SSLVerify': False, 'SerialNumber': array,
'srpName': 'SRP_1', 'PortGroup': port_group_name_i,
'SLO': 'Diamond'}
volume_details = [{'cap_gb': 2,
'cap_cyl': 1092,
'num_of_storage_groups': 1,
'volumeId': device_id,
'volume_identifier': 'OS-%s' % test_volume.id,
'wwn': volume_wwn,
'snapvx_target': 'false',
'snapvx_source': 'false',
'storageGroupId': [defaultstoragegroup_name,
storagegroup_name_f]},
{'cap_gb': 1,
'cap_cyl': 546,
'num_of_storage_groups': 1,
'volumeId': device_id2,
'volume_identifier': 'OS-%s' % test_volume.id,
'wwn': '600012345',
'storageGroupId': [defaultstoragegroup_name,
storagegroup_name_f]},
{'cap_gb': 1,
'cap_cyl': 546,
'num_of_storage_groups': 0,
'volumeId': device_id3,
'volume_identifier': '123',
'wwn': '600012345'},
{'cap_gb': 1,
'cap_cyl': 546,
'num_of_storage_groups': 1,
'volumeId': device_id4,
'volume_identifier': 'random_name',
'wwn': '600012345',
'storageGroupId': ['random_sg_1',
'random_sg_2']},
]
volume_details_attached = {'cap_gb': 2,
'num_of_storage_groups': 1,
'volumeId': device_id,
'volume_identifier': 'OS-%s' % test_volume.id,
'wwn': volume_wwn,
'snapvx_target': 'false',
'snapvx_source': 'false',
'storageGroupId': [storagegroup_name_f]}
volume_details_no_sg = {'cap_gb': 2,
'num_of_storage_groups': 1,
'volumeId': device_id,
'volume_identifier': 'OS-%s' % test_volume.id,
'wwn': volume_wwn,
'snapvx_target': 'false',
'snapvx_source': 'false',
'storageGroupId': []}
volume_details_attached_async = (
{'cap_gb': 2,
'num_of_storage_groups': 1,
'volumeId': device_id,
'volume_identifier': 'OS-%s' % test_volume.id,
'wwn': volume_wwn,
'snapvx_target': 'false',
'snapvx_source': 'false',
'storageGroupId': [
rdf_managed_async_grp, storagegroup_name_f + '-RA']})
volume_details_legacy = {'cap_gb': 2,
'num_of_storage_groups': 1,
'volumeId': device_id,
'volume_identifier': test_volume.id,
'wwn': volume_wwn,
'snapvx_target': 'false',
'snapvx_source': 'false',
'storageGroupId': []}
volume_list = [
{'id': '6b70de13-98c5-46b2-8f24-e4e96a8988fa',
'count': 2,
'maxPageSize': 1,
'resultList': {'result': [{'volumeId': device_id}],
'from': 0, 'to': 1}},
{'resultList': {'result': [{'volumeId': device_id2}]}},
{'id': '6b70de13-98c5-46b2-8f24-e4e96a8988fa',
'count': 2,
'maxPageSize': 1,
'resultList': {'result': [{'volumeId': device_id},
{'volumeId': device_id2}],
'from': 0, 'to': 1}}]
private_vol_details = {
'id': '6b70de13-98c5-46b2-8f24-e4e96a8988fa',
'count': 2,
'maxPageSize': 1,
'resultList': {
'result': [{
'timeFinderInfo': {
'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'snapshotName': 'temp-1',
'device': device_id,
'generation': '0'},
'lnkSnapshotGenInfo': [
{'targetDevice': device_id2,
'state': 'Copied'}]}]},
{'tgtSrcSnapshotGenInfo': {
'snapshotName': 'temp-1',
'targetDevice': device_id2,
'sourceDevice': device_id,
'generation': '0',
'state': 'Copied'}}],
'snapVXSrc': 'true',
'snapVXTgt': 'true'},
'rdfInfo': {'RDFSession': [
{'SRDFStatus': 'Ready',
'pairState': 'Synchronized',
'remoteDeviceID': device_id2,
'remoteSymmetrixID': remote_array}]}}],
'from': 0, 'to': 1}}
# Service Levels / Workloads
workloadtype = {'workloadId': ['OLTP', 'OLTP_REP', 'DSS', 'DSS_REP']}
srp_slo_details = {'serviceLevelDemand': [
{'serviceLevelId': 'None'}, {'serviceLevelId': 'Diamond'},
{'serviceLevelId': 'Gold'}, {'serviceLevelId': 'Optimized'}]}
slo_details = ['None', 'Diamond', 'Gold', 'Optimized']
powermax_slo_details = {'sloId': ['Bronze', 'Diamond', 'Gold',
'Optimized', 'Platinum', 'Silver']}
powermax_model_details = {'symmetrixId': array,
'model': 'PowerMax_2000',
'ucode': '5978.1091.1092'}
vmax_slo_details = {'sloId': ['Diamond', 'Optimized']}
vmax_model_details = {'model': 'VMAX450F'}
# replication
volume_snap_vx = {'snapshotLnks': [],
'snapshotSrcs': [
{'generation': 0,
'linkedDevices': [
{'targetDevice': device_id2,
'percentageCopied': 100,
'state': 'Copied',
'copy': True,
'defined': True,
'linked': True}],
'snapshotName': test_snapshot_snap_name,
'state': 'Established'}]}
capabilities = {'symmetrixCapability': [{'rdfCapable': True,
'snapVxCapable': True,
'symmetrixId': '0001111111'},
{'symmetrixId': array,
'snapVxCapable': True,
'rdfCapable': True}]}
group_snap_vx = {'generation': 0,
'isLinked': False,
'numUniqueTracks': 0,
'isRestored': False,
'name': group_snapshot_name,
'numStorageGroupVolumes': 1,
'state': ['Established'],
'timeToLiveExpiryDate': 'N/A',
'isExpired': False,
'numSharedTracks': 0,
'timestamp': '00:30:50 Fri, 02 Jun 2017 IST +0100',
'numSourceVolumes': 1
}
group_snap_vx_1 = {'generation': 0,
'isLinked': False,
'numUniqueTracks': 0,
'isRestored': False,
'name': group_snapshot_name,
'numStorageGroupVolumes': 1,
'state': ['Copied'],
'timeToLiveExpiryDate': 'N/A',
'isExpired': False,
'numSharedTracks': 0,
'timestamp': '00:30:50 Fri, 02 Jun 2017 IST +0100',
'numSourceVolumes': 1,
'linkedStorageGroup':
{'name': target_group_name,
'percentageCopied': 100},
}
grp_snapvx_links = [{'name': target_group_name,
'percentageCopied': 100},
{'name': 'another-target',
'percentageCopied': 90}]
rdf_group_list = {'rdfGroupID': [{'rdfgNumber': rdf_group_no_1,
'label': rdf_group_name_1},
{'rdfgNumber': rdf_group_no_2,
'label': rdf_group_name_2},
{'rdfgNumber': rdf_group_no_3,
'label': rdf_group_name_3},
{'rdfgNumber': rdf_group_no_4,
'label': rdf_group_name_4}]}
rdf_group_details = {'modes': ['Synchronous'],
'remoteSymmetrix': remote_array,
'label': rdf_group_name_1,
'type': 'Dynamic',
'numDevices': 1,
'remoteRdfgNumber': rdf_group_no_1,
'rdfgNumber': rdf_group_no_1}
rdf_group_vol_details = {'remoteRdfGroupNumber': rdf_group_no_1,
'localSymmetrixId': array,
'volumeConfig': 'RDF1+TDEV',
'localRdfGroupNumber': rdf_group_no_1,
'localVolumeName': device_id,
'rdfpairState': 'Synchronized',
'remoteVolumeName': device_id2,
'localVolumeState': 'Ready',
'rdfMode': 'Synchronous',
'remoteVolumeState': 'Write Disabled',
'remoteSymmetrixId': remote_array}
rdf_group_vol_details_not_synced = {
'remoteRdfGroupNumber': rdf_group_no_1, 'localSymmetrixId': array,
'volumeConfig': 'RDF1+TDEV', 'localRdfGroupNumber': rdf_group_no_1,
'localVolumeName': device_id, 'rdfpairState': 'syncinprog',
'remoteVolumeName': device_id2, 'localVolumeState': 'Ready',
'rdfMode': 'Synchronous', 'remoteVolumeState': 'Write Disabled',
'remoteSymmetrixId': remote_array}
# system
job_list = [{'status': 'SUCCEEDED',
'jobId': '12345',
'result': 'created',
'resourceLink': 'storagegroup/%s' % storagegroup_name_f},
{'status': 'RUNNING', 'jobId': '55555'},
{'status': 'FAILED', 'jobId': '09999'}]
symmetrix = [{'symmetrixId': array,
'model': 'VMAX250F',
'ucode': '5977.1091.1092'},
{'symmetrixId': array_herc,
'model': 'PowerMax 2000',
'ucode': '5978.1091.1092'}]
version_details = {'version': 'V9.1.0.1054'}
headroom = {'headroom': [{'headroomCapacity': 20348.29}]}
ucode_5978_foxtail = {'ucode': '5978.435.435'}
p_vol_rest_response_single = {
'id': 'f3aab01c-a5a8-4fb4-af2b-16ae1c46dc9e_0', 'count': 1,
'expirationTime': 1521650650793, 'maxPageSize': 1000,
'resultList': {'to': 1, 'from': 1, 'result': [
{'volumeHeader': {
'capGB': 1.0, 'capMB': 1026.0, 'volumeId': '00001',
'status': 'Ready', 'configuration': 'TDEV'}}]}}
p_vol_rest_response_none = {
'id': 'f3aab01c-a5a8-4fb4-af2b-16ae1c46dc9e_0', 'count': 0,
'expirationTime': 1521650650793, 'maxPageSize': 1000,
'resultList': {'to': 0, 'from': 0, 'result': []}}
p_vol_rest_response_iterator_1 = {
'id': 'f3aab01c-a5a8-4fb4-af2b-16ae1c46dc9e_0', 'count': 1500,
'expirationTime': 1521650650793, 'maxPageSize': 1000,
'resultList': {'to': 1, 'from': 1, 'result': [
{'volumeHeader': {
'capGB': 1.0, 'capMB': 1026.0, 'volumeId': '00002',
'status': 'Ready', 'configuration': 'TDEV'}}]}}
p_vol_rest_response_iterator_2 = {
'to': 2000, 'from': 1001, 'result': [
{'volumeHeader': {
'capGB': 1.0, 'capMB': 1026.0, 'volumeId': '00001',
'status': 'Ready', 'configuration': 'TDEV'}}]}
rest_iterator_resonse_one = {
'to': 1000, 'from': 1, 'result': [
{'volumeHeader': {
'capGB': 1.0, 'capMB': 1026.0, 'volumeId': '00001',
'status': 'Ready', 'configuration': 'TDEV'}}]}
rest_iterator_resonse_two = {
'to': 1500, 'from': 1001, 'result': [
{'volumeHeader': {
'capGB': 1.0, 'capMB': 1026.0, 'volumeId': '00002',
'status': 'Ready', 'configuration': 'TDEV'}}]}
# COMMON.PY
priv_vol_func_response_single = [
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {
'mirror': False, 'snapVXTgt': False,
'cloneTarget': False, 'cloneSrc': False,
'snapVXSrc': True, 'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'timestamp': 1512763278000, 'expired': False,
'secured': False, 'snapshotName': 'testSnap1',
'device': '00001', 'generation': 0, 'timeToLive': 0
}}]}]}}]
priv_vol_func_response_multi = [
{'volumeHeader': {
'private': False, 'capGB': 100.0, 'capMB': 102400.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'numStorageGroups': 0,
'reservationInfo': {'reserved': False}, 'mapped': False,
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'maskingInfo': {'masked': False},
'timeFinderInfo': {
'mirror': False, 'snapVXTgt': False,
'cloneTarget': False, 'cloneSrc': False,
'snapVXSrc': True, 'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'timestamp': 1512763278000, 'expired': False,
'secured': False, 'snapshotName': 'testSnap1',
'device': '00001', 'generation': 0, 'timeToLive': 0
}}]}]}},
{'volumeHeader': {
'private': False, 'capGB': 200.0, 'capMB': 204800.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00002', 'status': 'Ready', 'numStorageGroups': 0,
'reservationInfo': {'reserved': False}, 'mapped': False,
'encapsulated': False, 'formattedName': '00002',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'maskingInfo': {'masked': False},
'timeFinderInfo': {
'mirror': False, 'snapVXTgt': False,
'cloneTarget': False, 'cloneSrc': False,
'snapVXSrc': True, 'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'timestamp': 1512763278000, 'expired': False,
'secured': False, 'snapshotName': 'testSnap2',
'device': '00002', 'generation': 0, 'timeToLive': 0
}}]}]}},
{'volumeHeader': {
'private': False, 'capGB': 300.0, 'capMB': 307200.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00003', 'status': 'Ready', 'numStorageGroups': 0,
'reservationInfo': {'reserved': False}, 'mapped': False,
'encapsulated': False, 'formattedName': '00003',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'maskingInfo': {'masked': False},
'timeFinderInfo': {
'mirror': False, 'snapVXTgt': False,
'cloneTarget': False, 'cloneSrc': False,
'snapVXSrc': True, 'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'timestamp': 1512763278000, 'expired': False,
'secured': False, 'snapshotName': 'testSnap3',
'device': '00003', 'generation': 0, 'timeToLive': 0
}}]}]}},
{'volumeHeader': {
'private': False, 'capGB': 400.0, 'capMB': 409600.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00004', 'status': 'Ready', 'numStorageGroups': 0,
'reservationInfo': {'reserved': False}, 'mapped': False,
'encapsulated': False, 'formattedName': '00004',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'maskingInfo': {'masked': False},
'timeFinderInfo': {
'mirror': False, 'snapVXTgt': False,
'cloneTarget': False, 'cloneSrc': False,
'snapVXSrc': True, 'snapVXSession': [
{'srcSnapshotGenInfo': [
{'snapshotHeader': {
'timestamp': 1512763278000, 'expired': False,
'secured': False, 'snapshotName': 'testSnap4',
'device': '00004', 'generation': 0, 'timeToLive': 0
}}]}]}}]
priv_vol_func_response_multi_invalid = [
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 10.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {'snapVXTgt': False, 'snapVXSrc': False}},
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00002', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00002',
'system_resource': False, 'numSymDevMaskingViews': 1,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {'snapVXTgt': False, 'snapVXSrc': False}},
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'CKD',
'volumeId': '00003', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00003',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {'snapVXTgt': False, 'snapVXSrc': False}},
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00004', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00004',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", "userDefinedIdentifier": "N/A",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {'snapVXTgt': True, 'snapVXSrc': False}},
{'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00005', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00005',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': 'OS-vol', "userDefinedIdentifier": "OS-vol",
'configuration': 'TDEV'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': False,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False},
'timeFinderInfo': {'snapVXTgt': False, 'snapVXSrc': False}}]
volume_create_info_dict = {utils.ARRAY: array, utils.DEVICE_ID: device_id}
volume_info_dict = {
'volume_id': volume_id,
'service_level': 'Diamond',
'masking_view': 'OS-HostX-F-OS-fibre-PG-MV',
'host': fake_host,
'display_name': 'attach_vol_name',
'volume_updated_time': '2018-03-05 20:32:41',
'port_group': 'OS-fibre-PG',
'operation': 'attach', 'srp': 'SRP_1',
'initiator_group': 'OS-HostX-F-IG',
'serial_number': '000197800123',
'parent_storage_group': 'OS-HostX-F-OS-fibre-PG-SG',
'workload': 'DSS',
'child_storage_group': 'OS-HostX-SRP_1-DiamondDSS-OS-fibre-PG'}
add_volume_sg_info_dict = {
"storageGroupId": defaultstoragegroup_name,
"slo": "Optimized",
"service_level": "Optimized",
"base_slo_name": "Optimized",
"srp": "SRP_1",
"slo_compliance": "NONE",
"num_of_vols": 39,
"num_of_child_sgs": 0,
"num_of_parent_sgs": 0,
"num_of_masking_views": 0,
"num_of_snapshots": 0,
"cap_gb": 109.06,
"device_emulation": "FBA",
"type": "Standalone",
"unprotected": "true",
"compression": "true",
"compressionRatio": "1.0:1",
"compression_ratio_to_one": 1,
"vp_saved_percent": 99.9
}
storage_group_with_tags = deepcopy(add_volume_sg_info_dict)
storage_group_with_tags.update({"tags": sg_tags})
data_dict = {volume_id: volume_info_dict}
platform = 'Linux-4.4.0-104-generic-x86_64-with-Ubuntu-16.04-xenial'
unisphere_version = u'V9.1.0.17'
unisphere_version_90 = "V9.0.0.1"
openstack_release = '12.0.0.0b3.dev401'
openstack_version = '12.0.0'
python_version = '2.7.12'
vmax_driver_version = '4.1'
vmax_firmware_version = u'5977.1125.1125'
vmax_model = u'VMAX250F'
version_dict = {
'unisphere_for_powermax_version': unisphere_version,
'openstack_release': openstack_release,
'openstack_version': openstack_version,
'python_version': python_version,
'powermax_cinder_driver_version': vmax_driver_version,
'openstack_platform': platform,
'storage_firmware_version': vmax_firmware_version,
'serial_number': array,
'storage_model': vmax_model}
u4p_failover_config = {
'u4p_failover_backoff_factor': '2',
'u4p_failover_retries': '3',
'u4p_failover_timeout': '10',
'u4p_primary': '10.10.10.10',
'u4p_failover_autofailback': 'True',
'u4p_failover_targets': [
{'san_ip': '10.10.10.11',
'san_api_port': '8443',
'san_login': 'test',
'san_password': 'test',
'driver_ssl_cert_verify': '/path/to/cert',
'driver_ssl_cert_path': 'True'},
{'san_ip': '10.10.10.12',
'san_api_port': '8443',
'san_login': 'test',
'san_password': 'test',
'driver_ssl_cert_verify': 'True'},
{'san_ip': '10.10.10.11',
'san_api_port': '8443',
'san_login': 'test',
'san_password': 'test',
'driver_ssl_cert_verify': '/path/to/cert',
'driver_ssl_cert_path': 'False'}]}
u4p_failover_target = [{
'RestServerIp': '10.10.10.11',
'RestServerPort': '8443',
'RestUserName': 'test',
'RestPassword': 'test',
'SSLVerify': '/path/to/cert'},
{'RestServerIp': '10.10.10.12',
'RestServerPort': '8443',
'RestUserName': 'test',
'RestPassword': 'test',
'SSLVerify': 'True'}]
snapshot_src_details = {'snapshotSrcs': [{
'snapshotName': 'temp-000AA-snapshot_for_clone',
'generation': 0, 'state': 'Established', 'expired': False,
'linkedDevices': [{'targetDevice': device_id2, 'state': 'Copied',
'copy': True}]},
{'snapshotName': 'temp-000AA-snapshot_for_clone', 'generation': 1,
'state': 'Established', 'expired': False,
'linkedDevices': [{'targetDevice': device_id3, 'state': 'Copied',
'copy': True}]}],
'snapshotLnks': []}
snapshot_tgt_details = {"snapshotLnks": [{
"linkSourceName": device_id2, "state": "Linked", "copy": False}]}
snap_tgt_vol_details = {"timeFinderInfo": {"snapVXSession": [{
"tgtSrcSnapshotGenInfo": {
"generation": 6, "expired": True,
"snapshotName": "temp-000AA-snapshot_for_clone"}}]}}
snap_tgt_session = {
'generation': 0, 'expired': False, 'copy_mode': False,
'snap_name': 'temp-000AA-snapshot_for_clone', 'state': 'Copied',
'source_vol_id': device_id, 'target_vol_id': device_id2}
snap_tgt_session_cm_enabled = {
'generation': 0, 'expired': False, 'copy_mode': True,
'snap_name': 'temp-000AA-snapshot_for_clone', 'state': 'Copied',
'source_vol_id': device_id, 'target_vol_id': device_id2}
snap_src_sessions = [
{'generation': 0, 'expired': False, 'copy_mode': False,
'snap_name': 'temp-000AA-snapshot_for_clone', 'state': 'Copied',
'source_vol_id': device_id, 'target_vol_id': device_id3},
{'generation': 1, 'expired': False, 'copy_mode': False,
'snap_name': 'temp-000AA-snapshot_for_clone', 'state': 'Copied',
'source_vol_id': device_id, 'target_vol_id': device_id4}]
device_label = 'OS-00001'
priv_vol_response_rep = {
'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", 'configuration': 'TDEV',
'userDefinedIdentifier': 'OS-00001'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': True,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False,
'RDFSession': [
{'SRDFStatus': 'Ready',
'SRDFReplicationMode': 'Synchronized',
'remoteDeviceID': device_id2,
'remoteSymmetrixID': remote_array,
'SRDFGroupNumber': 1,
'SRDFRemoteGroupNumber': 1}]}}
priv_vol_response_metro_active_rep = {
'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", 'configuration': 'TDEV',
'userDefinedIdentifier': 'OS-00001'},
'maskingInfo': {'masked': False},
'rdfInfo': {
'dynamicRDF': False, 'RDF': True,
'concurrentRDF': False,
'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False,
'RDFSession': [
{'SRDFStatus': 'Ready',
'SRDFReplicationMode': 'Active',
'remoteDeviceID': device_id2,
'remoteSymmetrixID': remote_array,
'SRDFGroupNumber': 1,
'SRDFRemoteGroupNumber': 1}]}}
priv_vol_response_no_rep = {
'volumeHeader': {
'private': False, 'capGB': 1.0, 'capMB': 1026.0,
'serviceState': 'Normal', 'emulationType': 'FBA',
'volumeId': '00001', 'status': 'Ready', 'mapped': False,
'numStorageGroups': 0, 'reservationInfo': {'reserved': False},
'encapsulated': False, 'formattedName': '00001',
'system_resource': False, 'numSymDevMaskingViews': 0,
'nameModifier': "", 'configuration': 'TDEV',
'userDefinedIdentifier': 'OS-00001'},
'maskingInfo': {'masked': False},
'rdfInfo': {'RDF': False}}
snap_device_label = ('%(dev)s:%(label)s' % {'dev': device_id,
'label': managed_snap_id})
priv_snap_response = {
'deviceName': snap_device_label, 'snapshotLnks': [],
'snapshotSrcs': [
{'generation': 0,
'linkedDevices': [
{'targetDevice': device_id2, 'percentageCopied': 100,
'state': 'Copied', 'copy': True, 'defined': True,
'linked': True}],
'snapshotName': test_snapshot_snap_name,
'state': 'Established'}]}
volume_metadata = {
'DeviceID': device_id, 'ArrayID': array, 'ArrayModel': array_model}
# retype metadata dict
retype_metadata_dict = {
'device_id': device_id,
'rdf_group_no': '10',
'remote_array': remote_array,
'target_device_id': device_id,
'rep_mode': 'Asynchronous',
'replication_status': 'enabled',
'target_array_model': array_model}
retype_metadata_dict2 = {
'default_sg_name': 'default-sg',
'service_level': 'Diamond'
}
rep_info_dict = {
'device_id': device_id,
'local_array': array, 'remote_array': remote_array,
'target_device_id': device_id2, 'target_name': 'test_vol',
'rdf_group_no': rdf_group_no_1, 'rep_mode': 'Metro',
'replication_status': 'Enabled', 'rdf_group_label': rdf_group_name_1,
'target_array_model': array_model,
'rdf_mgmt_grp': rdf_managed_async_grp}
create_vol_with_replication_payload = {
'executionOption': 'ASYNCHRONOUS',
'editStorageGroupActionParam': {
'expandStorageGroupParam': {
'addVolumeParam': {
'emulation': 'FBA',
'create_new_volumes': 'False',
'volumeAttributes': [
{'num_of_vols': 1,
'volumeIdentifier': {
'identifier_name': (
volume_details[0]['volume_identifier']),
'volumeIdentifierChoice': 'identifier_name'},
'volume_size': test_volume.size,
'capacityUnit': 'GB'}],
'remoteSymmSGInfoParam': {
'force': 'true',
'remote_symmetrix_1_id': remote_array,
'remote_symmetrix_1_sgs': [
defaultstoragegroup_name]}}}}}
r1_sg_list = [default_sg_no_slo_re_enabled,
rdf_managed_async_grp]
r2_sg_list = deepcopy(r1_sg_list)
replication_model = (
{'provider_location': six.text_type(provider_location),
'metadata': {'DeviceID': device_id,
'DeviceLabel': 'OS-%s' % volume_id,
'ArrayID': array,
'ArrayModel': array_model,
'ServiceLevel': 'Silver',
'Workload': 'NONE',
'Emulation': 'FBA',
'Configuration': 'TDEV',
'CompressionDisabled': False,
'R2-DeviceID': device_id2,
'R2-ArrayID': remote_array,
'R2-ArrayModel': array_model,
'ReplicationMode': 'Synchronous',
'RDFG-Label': rdf_group_name_1,
'R1-RDFG': rdf_group_no_1,
'R2-RDFG': rdf_group_no_1}})
non_replication_model = (
{'provider_location': six.text_type(provider_location),
'metadata': {'DeviceID': device_id,
'DeviceLabel': 'OS-%s' % volume_id,
'ArrayID': array,
'ArrayModel': array_model,
'ServiceLevel': 'Silver',
'Workload': 'NONE',
'Emulation': 'FBA',
'Configuration': 'TDEV',
'CompressionDisabled': False}})