Merge "Fix XtremIO multi cluster support"
This commit is contained in:
commit
120f3e21e4
@ -124,7 +124,7 @@ def get_obj(typ, name, idx):
|
||||
return {"content": xms_data[typ][idx]}
|
||||
|
||||
|
||||
def xms_request(object_type='volumes', request_typ='GET', data=None,
|
||||
def xms_request(object_type='volumes', method='GET', data=None,
|
||||
name=None, idx=None, ver='v1'):
|
||||
if object_type == 'snapshots':
|
||||
object_type = 'volumes'
|
||||
@ -133,7 +133,7 @@ def xms_request(object_type='volumes', request_typ='GET', data=None,
|
||||
res = xms_data[object_type]
|
||||
except KeyError:
|
||||
raise exception.VolumeDriverException
|
||||
if request_typ == 'GET':
|
||||
if method == 'GET':
|
||||
if name or idx:
|
||||
return get_obj(object_type, name, idx)
|
||||
else:
|
||||
@ -144,7 +144,7 @@ def xms_request(object_type='volumes', request_typ='GET', data=None,
|
||||
obj['index']),
|
||||
"name": obj.get('name')}
|
||||
for obj in res.values()]}
|
||||
elif request_typ == 'POST':
|
||||
elif method == 'POST':
|
||||
data = fix_data(data, object_type)
|
||||
name_key = get_xms_obj_key(data)
|
||||
try:
|
||||
@ -164,7 +164,7 @@ def xms_request(object_type='volumes', request_typ='GET', data=None,
|
||||
|
||||
return {"links": [{"href": "/%s/%d" %
|
||||
(object_type, data[typ2id[object_type]][2])}]}
|
||||
elif request_typ == 'DELETE':
|
||||
elif method == 'DELETE':
|
||||
if object_type == 'consistency-group-volumes':
|
||||
data = [cgv for cgv in
|
||||
xms_data['consistency-group-volumes'].values()
|
||||
@ -176,34 +176,34 @@ def xms_request(object_type='volumes', request_typ='GET', data=None,
|
||||
del xms_data[object_type][data['index']]
|
||||
else:
|
||||
raise exception.NotFound()
|
||||
elif request_typ == 'PUT':
|
||||
elif method == 'PUT':
|
||||
obj = get_obj(object_type, name, idx)['content']
|
||||
data = fix_data(data, object_type)
|
||||
del data['index']
|
||||
obj.update(data)
|
||||
|
||||
|
||||
def xms_bad_request(object_type='volumes', request_typ='GET', data=None,
|
||||
def xms_bad_request(object_type='volumes', method='GET', data=None,
|
||||
name=None, idx=None, ver='v1'):
|
||||
if request_typ == 'GET':
|
||||
if method == 'GET':
|
||||
raise exception.NotFound()
|
||||
elif request_typ == 'POST':
|
||||
elif method == 'POST':
|
||||
raise exception.VolumeBackendAPIException('Failed to create ig')
|
||||
|
||||
|
||||
def xms_failed_rename_snapshot_request(object_type='volumes',
|
||||
request_typ='GET', data=None,
|
||||
method='GET', data=None,
|
||||
name=None, idx=None, ver='v1'):
|
||||
if request_typ == 'POST':
|
||||
if method == 'POST':
|
||||
xms_data['volumes'][27] = {}
|
||||
return {
|
||||
"links": [
|
||||
{
|
||||
"href": "https://host/api/json/v2/types/snapshots/27",
|
||||
"rel": "self"}]}
|
||||
elif request_typ == 'PUT':
|
||||
elif method == 'PUT':
|
||||
raise exception.VolumeBackendAPIException(data='Failed to delete')
|
||||
elif request_typ == 'DELETE':
|
||||
elif method == 'DELETE':
|
||||
del xms_data['volumes'][27]
|
||||
|
||||
|
||||
@ -320,6 +320,12 @@ class EMCXIODriverISCSITestCase(test.TestCase):
|
||||
xms_data['clusters'] = clusters
|
||||
self.driver.check_for_setup_error()
|
||||
|
||||
def test_client4_uses_v2(self, req):
|
||||
def base_req(*args, **kwargs):
|
||||
self.assertIn('v2', args)
|
||||
req.side_effect = base_req
|
||||
self.driver.client.req('volumes')
|
||||
|
||||
def test_create_extend_delete_volume(self, req):
|
||||
req.side_effect = xms_request
|
||||
self.driver.create_volume(self.data.test_volume)
|
||||
|
@ -104,7 +104,7 @@ class XtremIOClient(object):
|
||||
@utils.retry(exception.XtremIOArrayBusy,
|
||||
CONF.xtremio_array_busy_retry_count,
|
||||
CONF.xtremio_array_busy_retry_interval, 1)
|
||||
def req(self, object_type='volumes', request_typ='GET', data=None,
|
||||
def req(self, object_type='volumes', method='GET', data=None,
|
||||
name=None, idx=None, ver='v1'):
|
||||
if not data:
|
||||
data = {}
|
||||
@ -122,15 +122,15 @@ class XtremIOClient(object):
|
||||
elif idx:
|
||||
url = '%s/%d' % (url, idx)
|
||||
key = str(idx)
|
||||
if request_typ in ('GET', 'DELETE'):
|
||||
if method in ('GET', 'DELETE'):
|
||||
params.update(data)
|
||||
self.update_url(params, self.cluster_id)
|
||||
if request_typ != 'GET':
|
||||
if method != 'GET':
|
||||
self.update_data(data, self.cluster_id)
|
||||
LOG.debug('data: %s', data)
|
||||
LOG.debug('%(type)s %(url)s', {'type': request_typ, 'url': url})
|
||||
LOG.debug('%(type)s %(url)s', {'type': method, 'url': url})
|
||||
try:
|
||||
response = requests.request(request_typ, url, params=params,
|
||||
response = requests.request(method, url, params=params,
|
||||
data=json.dumps(data),
|
||||
verify=self.verify,
|
||||
auth=(self.configuration.san_login,
|
||||
@ -140,7 +140,7 @@ class XtremIOClient(object):
|
||||
raise exception.VolumeDriverException(message=msg)
|
||||
|
||||
if 200 <= response.status_code < 300:
|
||||
if request_typ in ('GET', 'POST'):
|
||||
if method in ('GET', 'POST'):
|
||||
return response.json()
|
||||
else:
|
||||
return ''
|
||||
@ -279,6 +279,11 @@ class XtremIOClient4(XtremIOClient):
|
||||
super(XtremIOClient4, self).__init__(configuration, cluster_id)
|
||||
self._cluster_name = None
|
||||
|
||||
def req(self, object_type='volumes', method='GET', data=None,
|
||||
name=None, idx=None, ver='v2'):
|
||||
return super(XtremIOClient4, self).req(object_type, method, data,
|
||||
name, idx, ver)
|
||||
|
||||
def get_extra_capabilities(self):
|
||||
return {'consistencygroup_support': True}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user