Merge "Change huawei driver send REST command serially"
This commit is contained in:
commit
4060d2dc3b
|
@ -20,7 +20,8 @@ DEFAULT_TIMEOUT = 60
|
|||
|
||||
MSG_SNAPSHOT_NOT_FOUND = 1073754118
|
||||
IP_ALLOCATIONS = 0
|
||||
SOCKET_TIMEOUT = 720
|
||||
SOCKET_TIMEOUT = 52
|
||||
LOGIN_SOCKET_TIMEOUT = 4
|
||||
|
||||
ACCESS_NFS_RW = "1"
|
||||
ACCESS_NFS_RO = "0"
|
||||
|
|
|
@ -36,6 +36,9 @@ class RestHelper(object):
|
|||
|
||||
def __init__(self, configuration):
|
||||
self.configuration = configuration
|
||||
self.init_http_head()
|
||||
|
||||
def init_http_head(self):
|
||||
self.cookie = http_cookiejar.CookieJar()
|
||||
self.url = None
|
||||
self.headers = {
|
||||
|
@ -43,12 +46,15 @@ class RestHelper(object):
|
|||
"Content-Type": "application/json",
|
||||
}
|
||||
|
||||
def do_call(self, url, data=None, method=None):
|
||||
def do_call(self, url, data=None, method=None,
|
||||
calltimeout=constants.SOCKET_TIMEOUT):
|
||||
"""Send requests to server.
|
||||
|
||||
Send HTTPS call, get response in JSON.
|
||||
Convert response into Python Object and return it.
|
||||
"""
|
||||
if self.url:
|
||||
url = self.url + url
|
||||
if "xx/sessions" not in url:
|
||||
LOG.debug('Request URL: %(url)s\n'
|
||||
'Call Method: %(method)s\n'
|
||||
|
@ -64,7 +70,7 @@ class RestHelper(object):
|
|||
req = urlreq.Request(url, data, self.headers)
|
||||
if method:
|
||||
req.get_method = lambda: method
|
||||
res_temp = urlreq.urlopen(req, timeout=constants.SOCKET_TIMEOUT)
|
||||
res_temp = urlreq.urlopen(req, timeout=calltimeout)
|
||||
res = res_temp.read().decode("utf-8")
|
||||
|
||||
LOG.debug('Response Data: %(res)s.', {'res': res})
|
||||
|
@ -96,7 +102,9 @@ class RestHelper(object):
|
|||
data = jsonutils.dumps({"username": login_info['UserName'],
|
||||
"password": login_info['UserPassword'],
|
||||
"scope": "0"})
|
||||
result = self.do_call(url, data)
|
||||
self.init_http_head()
|
||||
result = self.do_call(url, data,
|
||||
calltimeout=constants.LOGIN_SOCKET_TIMEOUT)
|
||||
|
||||
if((result['error']['code'] != 0)
|
||||
or ("data" not in result)
|
||||
|
@ -119,6 +127,7 @@ class RestHelper(object):
|
|||
|
||||
return deviceid
|
||||
|
||||
@utils.synchronized('huawei_manila', external=True)
|
||||
def call(self, url, data=None, method=None):
|
||||
"""Send requests to server.
|
||||
|
||||
|
@ -140,13 +149,12 @@ class RestHelper(object):
|
|||
'New URL: %(new_url)s\n',
|
||||
{'old_url': old_url,
|
||||
'new_url': self.url})
|
||||
url = url.replace(old_url, self.url)
|
||||
result = self.do_call(url, data, method)
|
||||
return result
|
||||
|
||||
def _create_filesystem(self, fs_param):
|
||||
"""Create file system."""
|
||||
url = self.url + "/filesystem"
|
||||
url = "/filesystem"
|
||||
data = jsonutils.dumps(fs_param)
|
||||
result = self.call(url, data)
|
||||
|
||||
|
@ -237,7 +245,7 @@ class RestHelper(object):
|
|||
reason=(_('Invalid NAS protocol supplied: %s.')
|
||||
% share_proto))
|
||||
|
||||
url = self.url + "/" + share_url_type
|
||||
url = "/" + share_url_type
|
||||
data = jsonutils.dumps(filepath)
|
||||
|
||||
result = self.call(url, data, "POST")
|
||||
|
@ -250,7 +258,7 @@ class RestHelper(object):
|
|||
|
||||
def _delete_share_by_id(self, share_id, share_url_type):
|
||||
"""Delete share by share id."""
|
||||
url = self.url + "/" + share_url_type + "/" + share_id
|
||||
url = "/" + share_url_type + "/" + share_id
|
||||
|
||||
result = self.call(url, None, "DELETE")
|
||||
self._assert_rest_result(result, 'Delete share error.')
|
||||
|
@ -258,13 +266,13 @@ class RestHelper(object):
|
|||
def _delete_fs(self, fs_id):
|
||||
"""Delete file system."""
|
||||
# Get available file system
|
||||
url = self.url + "/filesystem/" + fs_id
|
||||
url = "/filesystem/" + fs_id
|
||||
|
||||
result = self.call(url, None, "DELETE")
|
||||
self._assert_rest_result(result, 'Delete file system error.')
|
||||
|
||||
def _get_cifs_service_status(self):
|
||||
url = self.url + "/CIFSSERVICE"
|
||||
url = "/CIFSSERVICE"
|
||||
result = self.call(url, None, "GET")
|
||||
|
||||
msg = 'Get CIFS service status error.'
|
||||
|
@ -274,7 +282,7 @@ class RestHelper(object):
|
|||
return result['data']['RUNNINGSTATUS']
|
||||
|
||||
def _get_nfs_service_status(self):
|
||||
url = self.url + "/NFSSERVICE"
|
||||
url = "/NFSSERVICE"
|
||||
result = self.call(url, None, "GET")
|
||||
|
||||
msg = 'Get NFS service status error.'
|
||||
|
@ -289,7 +297,7 @@ class RestHelper(object):
|
|||
return service
|
||||
|
||||
def _start_nfs_service_status(self):
|
||||
url = self.url + "/NFSSERVICE"
|
||||
url = "/NFSSERVICE"
|
||||
nfsserviceinfo = {
|
||||
"NFSV4DOMAIN": "localdomain",
|
||||
"RUNNINGSTATUS": "2",
|
||||
|
@ -304,7 +312,7 @@ class RestHelper(object):
|
|||
self._assert_rest_result(result, 'Start NFS service error.')
|
||||
|
||||
def _start_cifs_service_status(self):
|
||||
url = self.url + "/CIFSSERVICE"
|
||||
url = "/CIFSSERVICE"
|
||||
cifsserviceinfo = {
|
||||
"ENABLENOTIFY": "true",
|
||||
"ENABLEOPLOCK": "true",
|
||||
|
@ -341,7 +349,7 @@ class RestHelper(object):
|
|||
return poolinfo
|
||||
|
||||
def _find_all_pool_info(self):
|
||||
url = self.url + "/storagepool"
|
||||
url = "/storagepool"
|
||||
result = self.call(url, None)
|
||||
|
||||
msg = "Query resource pool error."
|
||||
|
@ -366,14 +374,14 @@ class RestHelper(object):
|
|||
return root
|
||||
|
||||
def _remove_access_from_share(self, access_id, access_type):
|
||||
url = self.url + "/" + access_type + "/" + access_id
|
||||
url = "/" + access_type + "/" + access_id
|
||||
result = self.call(url, None, "DELETE")
|
||||
self._assert_rest_result(result, 'delete access from share error!')
|
||||
|
||||
def _get_access_from_count(self, share_id, share_client_type):
|
||||
url_subfix = ("/" + share_client_type + "/count?"
|
||||
+ "filter=PARENTID::" + share_id)
|
||||
url = self.url + url_subfix
|
||||
url = url_subfix
|
||||
result = self.call(url, None, "GET")
|
||||
|
||||
msg = "Get access count by share error!"
|
||||
|
@ -404,7 +412,7 @@ class RestHelper(object):
|
|||
access_to, range_begin,
|
||||
share_client_type):
|
||||
range_end = range_begin + 100
|
||||
url = (self.url + "/" + share_client_type + "?filter=PARENTID::"
|
||||
url = ("/" + share_client_type + "?filter=PARENTID::"
|
||||
+ share_id + "&range=[" + six.text_type(range_begin)
|
||||
+ "-" + six.text_type(range_end) + "]")
|
||||
result = self.call(url, None, "GET")
|
||||
|
@ -418,7 +426,7 @@ class RestHelper(object):
|
|||
share_proto, access_level):
|
||||
"""Allow access to the share."""
|
||||
access_type = self._get_share_client_type(share_proto)
|
||||
url = self.url + "/" + access_type
|
||||
url = "/" + access_type
|
||||
|
||||
access = {}
|
||||
if access_type == "NFS_SHARE_AUTH_CLIENT":
|
||||
|
@ -461,7 +469,7 @@ class RestHelper(object):
|
|||
"""Check the snapshot id exists."""
|
||||
url_subfix = "/FSSNAPSHOT/" + snap_id
|
||||
|
||||
url = self.url + url_subfix
|
||||
url = url_subfix
|
||||
result = self.call(url, None, "GET")
|
||||
|
||||
if result['error']['code'] == constants.MSG_SNAPSHOT_NOT_FOUND:
|
||||
|
@ -477,7 +485,7 @@ class RestHelper(object):
|
|||
|
||||
def _delete_snapshot(self, snap_id):
|
||||
"""Deletes snapshot."""
|
||||
url = self.url + "/FSSNAPSHOT/%s" % snap_id
|
||||
url = "/FSSNAPSHOT/%s" % snap_id
|
||||
data = jsonutils.dumps({"TYPE": "48", "ID": snap_id})
|
||||
result = self.call(url, data, "DELETE")
|
||||
self._assert_rest_result(result, 'Delete snapshot error.')
|
||||
|
@ -492,7 +500,7 @@ class RestHelper(object):
|
|||
"DESCRIPTION": "",
|
||||
}
|
||||
|
||||
url = self.url + "/FSSNAPSHOT"
|
||||
url = "/FSSNAPSHOT"
|
||||
data = jsonutils.dumps(filepath)
|
||||
|
||||
result = self.call(url, data, "POST")
|
||||
|
@ -522,7 +530,7 @@ class RestHelper(object):
|
|||
|
||||
def _get_share_count(self, share_url_type):
|
||||
"""Get share count."""
|
||||
url = self.url + "/" + share_url_type + "/count"
|
||||
url = "/" + share_url_type + "/count"
|
||||
result = self.call(url, None, "GET")
|
||||
self._assert_rest_result(result, 'Get share count error!')
|
||||
|
||||
|
@ -532,7 +540,7 @@ class RestHelper(object):
|
|||
range_begin, share_url_type):
|
||||
"""Get share by share name."""
|
||||
range_end = range_begin + 100
|
||||
url = (self.url + "/" + share_url_type + "?range=["
|
||||
url = ("/" + share_url_type + "?range=["
|
||||
+ six.text_type(range_begin) + "-"
|
||||
+ six.text_type(range_end) + "]")
|
||||
result = self.call(url, None, "GET")
|
||||
|
@ -563,7 +571,7 @@ class RestHelper(object):
|
|||
return share_url_type
|
||||
|
||||
def _get_fsid_by_name(self, share_name):
|
||||
url = self.url + "/FILESYSTEM?range=[0-8191]"
|
||||
url = "/FILESYSTEM?range=[0-8191]"
|
||||
result = self.call(url, None, "GET")
|
||||
self._assert_rest_result(result, 'Get filesystem by name error!')
|
||||
sharename = share_name.replace("-", "_")
|
||||
|
@ -573,7 +581,7 @@ class RestHelper(object):
|
|||
return item['ID']
|
||||
|
||||
def _get_fs_info_by_id(self, fsid):
|
||||
url = self.url + "/filesystem/%s" % fsid
|
||||
url = "/filesystem/%s" % fsid
|
||||
result = self.call(url, None, "GET")
|
||||
|
||||
msg = "Get filesystem info by id error!"
|
||||
|
@ -639,7 +647,7 @@ class RestHelper(object):
|
|||
return snapshot_id
|
||||
|
||||
def _change_share_size(self, fsid, new_size):
|
||||
url = self.url + "/filesystem/%s" % fsid
|
||||
url = "/filesystem/%s" % fsid
|
||||
|
||||
capacityinfo = {
|
||||
"CAPACITY": new_size,
|
||||
|
@ -653,7 +661,7 @@ class RestHelper(object):
|
|||
self._assert_data_in_result(result, msg)
|
||||
|
||||
def _change_fs_name(self, fsid, name):
|
||||
url = self.url + "/filesystem/%s" % fsid
|
||||
url = "/filesystem/%s" % fsid
|
||||
fs_param = {
|
||||
"NAME": name.replace("-", "_"),
|
||||
}
|
||||
|
|
|
@ -169,7 +169,7 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
def _change_file_mode(self, filepath):
|
||||
pass
|
||||
|
||||
def do_call(self, url, data=None, method=None):
|
||||
def do_call(self, url, data=None, method=None, calltimeout=4):
|
||||
url = url.replace('http://100.115.10.69:8082/deviceManager/rest', '')
|
||||
url = url.replace('/210235G7J20000000000/', '')
|
||||
|
||||
|
@ -179,18 +179,23 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
res_json = jsonutils.loads(data)
|
||||
return res_json
|
||||
elif self.test_multi_url_flag == 2:
|
||||
if 'http://100.115.10.70:8082/deviceManager/rest' in url:
|
||||
url = url.replace('http://100.115.10.70:8082/'
|
||||
'deviceManager/rest', '')
|
||||
else:
|
||||
if ('http://100.115.10.70:8082/deviceManager/rest/xx/'
|
||||
'sessions' == url):
|
||||
self.url = url
|
||||
data = data_session("/xx/sessions")
|
||||
res_json = jsonutils.loads(data)
|
||||
return res_json
|
||||
elif (('/xx/sessions' == url) or (self.url is not None
|
||||
and 'http://100.115.10.69:8082/deviceManager/rest'
|
||||
in self.url)):
|
||||
data = '{"error":{"code":-403}}'
|
||||
res_json = jsonutils.loads(data)
|
||||
return res_json
|
||||
|
||||
if url == "/xx/sessions" or url == "sessions":
|
||||
if url == "/xx/sessions" or url == "/sessions":
|
||||
data = data_session(url)
|
||||
|
||||
if url == "storagepool":
|
||||
if url == "/storagepool":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"USERFREECAPACITY":"2097152",
|
||||
"ID":"1",
|
||||
|
@ -199,11 +204,11 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
"USAGETYPE":"2",
|
||||
"USERCONSUMEDCAPACITY":"2097152"}]}"""
|
||||
|
||||
if url == "filesystem":
|
||||
if url == "/filesystem":
|
||||
data = """{"error":{"code":0},"data":{
|
||||
"ID":"4"}}"""
|
||||
|
||||
if url == "NFSHARE" or url == "CIFSHARE":
|
||||
if url == "/NFSHARE" or url == "/CIFSHARE":
|
||||
if self.create_share_flag:
|
||||
data = '{"error":{"code":31755596}}'
|
||||
elif self.create_share_data_flag:
|
||||
|
@ -212,7 +217,7 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
data = """{"error":{"code":0},"data":{
|
||||
"ID":"10"}}"""
|
||||
|
||||
if url == "NFSHARE?range=[100-200]":
|
||||
if url == "/NFSHARE?range=[100-200]":
|
||||
if self.share_exist:
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"1",
|
||||
|
@ -226,104 +231,104 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
"NAME":"test",
|
||||
"SHAREPATH":"/share_fake_uuid_fail/"}]}"""
|
||||
|
||||
if url == "CIFSHARE?range=[100-200]":
|
||||
if url == "/CIFSHARE?range=[100-200]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"2",
|
||||
"FSID":"4",
|
||||
"NAME":"test",
|
||||
"SHAREPATH":"/share_fake_uuid/"}]}"""
|
||||
|
||||
if url == "NFSHARE?range=[0-100]":
|
||||
if url == "/NFSHARE?range=[0-100]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"1",
|
||||
"FSID":"4",
|
||||
"NAME":"test_fail",
|
||||
"SHAREPATH":"/share_fake_uuid_fail/"}]}"""
|
||||
|
||||
if url == "CIFSHARE?range=[0-100]":
|
||||
if url == "/CIFSHARE?range=[0-100]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"2",
|
||||
"FSID":"4",
|
||||
"NAME":"test_fail",
|
||||
"SHAREPATH":"/share_fake_uuid_fail/"}]}"""
|
||||
|
||||
if url == "NFSHARE/1" or url == "CIFSHARE/2":
|
||||
if url == "/NFSHARE/1" or url == "/CIFSHARE/2":
|
||||
data = """{"error":{"code":0}}"""
|
||||
self.delete_flag = True
|
||||
|
||||
if url == "FSSNAPSHOT":
|
||||
if url == "/FSSNAPSHOT":
|
||||
data = """{"error":{"code":0},"data":{
|
||||
"ID":"3"}}"""
|
||||
self.create_snapflag = True
|
||||
|
||||
if url == "FSSNAPSHOT/4@share_snapshot_fake_snapshot_uuid":
|
||||
if url == "/FSSNAPSHOT/4@share_snapshot_fake_snapshot_uuid":
|
||||
if self.snapshot_flag:
|
||||
data = """{"error":{"code":0},"data":{"ID":"3"}}"""
|
||||
else:
|
||||
data = '{"error":{"code":1073754118}}'
|
||||
self.delete_flag = True
|
||||
|
||||
if url == "FSSNAPSHOT/3":
|
||||
if url == "/FSSNAPSHOT/3":
|
||||
data = """{"error":{"code":0}}"""
|
||||
self.delete_flag = True
|
||||
|
||||
if url == "NFS_SHARE_AUTH_CLIENT":
|
||||
if url == "/NFS_SHARE_AUTH_CLIENT":
|
||||
data, self.allow_ro_flag, self.allow_rw_flag = \
|
||||
allow_access('NFS', method, data)
|
||||
self.allow_flag = True
|
||||
|
||||
if url == "CIFS_SHARE_AUTH_CLIENT":
|
||||
if url == "/CIFS_SHARE_AUTH_CLIENT":
|
||||
data, self.allow_ro_flag, self.allow_rw_flag = \
|
||||
allow_access('CIFS', method, data)
|
||||
self.allow_flag = True
|
||||
|
||||
if url == "FSSNAPSHOT?TYPE=48&PARENTID=4"\
|
||||
if url == "/FSSNAPSHOT?TYPE=48&PARENTID=4"\
|
||||
"&&sortby=TIMESTAMP,d&range=[0-2000]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"3",
|
||||
"NAME":"share_snapshot_fake_snapshot_uuid"}]}"""
|
||||
self.delete_flag = True
|
||||
|
||||
if url == "NFS_SHARE_AUTH_CLIENT?"\
|
||||
if url == "/NFS_SHARE_AUTH_CLIENT?"\
|
||||
"filter=PARENTID::1&range=[0-100]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"0",
|
||||
"NAME":"100.112.0.1_fail"}]}"""
|
||||
|
||||
if url == "CIFS_SHARE_AUTH_CLIENT?"\
|
||||
if url == "/CIFS_SHARE_AUTH_CLIENT?"\
|
||||
"filter=PARENTID::2&range=[0-100]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"0",
|
||||
"NAME":"user_name_fail"}]}"""
|
||||
|
||||
if url == "NFS_SHARE_AUTH_CLIENT?"\
|
||||
if url == "/NFS_SHARE_AUTH_CLIENT?"\
|
||||
"filter=PARENTID::1&range=[100-200]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"5",
|
||||
"NAME":"100.112.0.1"}]}"""
|
||||
|
||||
if url == "CIFS_SHARE_AUTH_CLIENT?"\
|
||||
if url == "/CIFS_SHARE_AUTH_CLIENT?"\
|
||||
"filter=PARENTID::2&range=[100-200]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"6",
|
||||
"NAME":"user_name"}]}"""
|
||||
|
||||
if url == "NFS_SHARE_AUTH_CLIENT/5"\
|
||||
or url == "CIFS_SHARE_AUTH_CLIENT/6":
|
||||
if url == "/NFS_SHARE_AUTH_CLIENT/5"\
|
||||
or url == "/CIFS_SHARE_AUTH_CLIENT/6":
|
||||
data = """{"error":{"code":0}}"""
|
||||
self.deny_flag = True
|
||||
|
||||
if url == "NFSHARE/count" or url == "CIFSHARE/count":
|
||||
if url == "/NFSHARE/count" or url == "/CIFSHARE/count":
|
||||
data = """{"error":{"code":0},"data":{
|
||||
"COUNT":"196"}}"""
|
||||
|
||||
if url == "NFS_SHARE_AUTH_CLIENT/count?filter=PARENTID::1"\
|
||||
or url == "CIFS_SHARE_AUTH_CLIENT/count?filter="\
|
||||
if url == "/NFS_SHARE_AUTH_CLIENT/count?filter=PARENTID::1"\
|
||||
or url == "/CIFS_SHARE_AUTH_CLIENT/count?filter="\
|
||||
"PARENTID::2":
|
||||
data = """{"error":{"code":0},"data":{
|
||||
"COUNT":"196"}}"""
|
||||
|
||||
if url == "CIFSSERVICE":
|
||||
if url == "/CIFSSERVICE":
|
||||
if self.service_status_flag:
|
||||
data = """{"error":{"code":0},"data":{
|
||||
"RUNNINGSTATUS":"2"}}"""
|
||||
|
@ -331,7 +336,7 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
data = """{"error":{"code":0},"data":{
|
||||
"RUNNINGSTATUS":"1"}}"""
|
||||
|
||||
if url == "NFSSERVICE":
|
||||
if url == "/NFSSERVICE":
|
||||
if self.service_nfs_status_flag:
|
||||
data = """{"error":{"code":0},
|
||||
"data":{"RUNNINGSTATUS":"2",
|
||||
|
@ -344,12 +349,12 @@ class FakeHuaweiNasHelper(helper.RestHelper):
|
|||
"SUPPORTV4":"true"}}"""
|
||||
self.setupserver_flag = True
|
||||
|
||||
if url == "FILESYSTEM?range=[0-8191]":
|
||||
if url == "/FILESYSTEM?range=[0-8191]":
|
||||
data = """{"error":{"code":0},
|
||||
"data":[{"ID":"4",
|
||||
"NAME":"share_fake_uuid"}]}"""
|
||||
|
||||
if url == "filesystem/4":
|
||||
if url == "/filesystem/4":
|
||||
data, self.extend_share_flag, self.shrink_share_flag = (
|
||||
filesystem(method, data, self.fs_status_flag))
|
||||
self.delete_flag = True
|
||||
|
|
Loading…
Reference in New Issue