# mock_call_req_aai.side_effect =[r1]
mock_call_req.side_effect = [r1, r2, r3, ret]
- req_data = {'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367',
- 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
- 'vnfDescriptorId': 'vcpe_vfw_zte_1_0',
- 'additionalParam': {'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9',
- 'NatIpRange': '192.167.0.10-192.168.0.20',
- 'm6000_mng_ip': '192.168.11.11',
- 'externalPluginManageNetworkName': 'plugin_net_2014',
- 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e',
- 'externalManageNetworkName': 'mng_net_2017',
- 'sfc_data_network': 'sfc_data_net_2016',
- 'externalDataNetworkName': 'Flow_out_net',
- 'inputs':{}}}
+ req_data = {
+ 'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367',
+ 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a',
+ 'vnfDescriptorId': 'vcpe_vfw_zte_1_0',
+ 'additionalParam': {
+ 'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9',
+ 'NatIpRange': '192.167.0.10-192.168.0.20',
+ 'm6000_mng_ip': '192.168.11.11',
+ 'externalPluginManageNetworkName': 'plugin_net_2014',
+ 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e',
+ 'externalManageNetworkName': 'mng_net_2017',
+ 'sfc_data_network': 'sfc_data_net_2016',
+ 'externalDataNetworkName': 'Flow_out_net',
+ 'inputs': {}
+ }
+ }
response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs",
data=json.dumps(req_data), content_type="application/json")
u'type': u'ztevmanagerdriver',
u'createTime': u'2016-10-31 11:08:39',
u'description': u''}
- resp_body = {"responsedescriptor":
- {"status": "processing", "responsehistorylist": [
- {"status": "error",
- "progress": 255,
- "errorcode": "",
- "responseid": 20,
- "statusdescription": "'JsonParser' object has no attribute 'parser_info'"}],
- "responseid": 21,
- "errorcode": "",
- "progress": 40,
- "statusdescription": "Create nf apply resource failed"},
- "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"}
+ resp_body = {
+ "responsedescriptor": {
+ "status": "processing",
+ "responsehistorylist": [
+ {
+ "status": "error",
+ "progress": 255,
+ "errorcode": "",
+ "responseid": 20,
+ "statusdescription": "'JsonParser' object has no attribute 'parser_info'"
+ }
+ ],
+ "responseid": 21,
+ "errorcode": "",
+ "progress": 40,
+ "statusdescription": "Create nf apply resource failed"
+ },
+ "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"
+ }
r1 = [0, json.JSONEncoder().encode(vnfm_info), '200']
r2 = [0, json.JSONEncoder().encode(resp_body), '200']
# mock_call_req_aai.side_effect = [r1]
mock_call_req.side_effect = [r1, r2]
- response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".
- format(
+ response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".format(
vnfmid=vnfm_info["vnfmId"],
jobid=resp_body["jobid"],
- responseId=resp_body["responsedescriptor"]["responseid"]))
+ responseId=resp_body["responsedescriptor"]["responseid"])
+ )
self.assertEqual(str(status.HTTP_200_OK), response.status_code)
"vnfmid": "13232222",
"nfvoid": "03212234",
"vimid": "12345678",
- "exvimidlist ":
- ["exvimid"],
+ "exvimidlist ": [
+ "exvimid"
+ ],
"tenant": " tenant1",
"vnfistanceid": "1234",
"operationright": "0",
"vmlist": [
{
"vmflavor": "SMP",
- "vmnumber": "3"},
+ "vmnumber": "3"
+ },
{
"vmflavor": "CMP",
- "vmnumber": "3"}
- ]}
+ "vmnumber": "3"
+ }
+ ]
+ }
mock_call_req.return_value = ret
response = self.client.put("/api/ztevmanagerdriver/v1/resource/grant",
# @mock.patch.object(restcall, 'call_req_aai')
@mock.patch.object(restcall, 'call_req')
def test_scale(self, mock_call_req):
- job_info = {"jobid":"801","nfInstanceId":"101"}
+ job_info = {"jobid": "801", "nfInstanceId": "101"}
vnfm_info = {u'userName': u'admin',
u'vendor': u'ZTE',
u'name': u'ZTE_VNFM_237_62',
u'description': u''}
ret = [0, json.JSONEncoder().encode(job_info), "202"]
- ret_vnfm = [0,json.JSONEncoder().encode(vnfm_info), "200"]
+ ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"]
# mock_call_req_aai.side_effect = [ret_vnfm]
mock_call_req.side_effect = [ret_vnfm, ret]
vnfd_info = {
- "vnf_flavours":[
+ "vnf_flavours": [
{
- "flavour_id":"flavour1",
- "description":"",
- "vdu_profiles":[
+ "flavour_id": "flavour1",
+ "description": "",
+ "vdu_profiles": [
{
- "vdu_id":"vdu1Id",
+ "vdu_id": "vdu1Id",
"instances_minimum_number": 1,
"instances_maximum_number": 4,
- "local_affinity_antiaffinity_rule":[
+ "local_affinity_antiaffinity_rule": [
{
- "affinity_antiaffinity":"affinity",
- "scope":"node",
+ "affinity_antiaffinity": "affinity",
+ "scope": "node",
+
}
]
}
],
- "scaling_aspects":[
+ "scaling_aspects": [
{
"id": "demo_aspect",
"name": "demo_aspect",
}
],
"element_groups": [
- {
- "group_id": "elementGroup1",
- "description": "",
- "properties":{
- "name": "elementGroup1",
- },
- "members": ["gsu_vm","pfu_vm"],
- }
+ {
+ "group_id": "elementGroup1",
+ "description": "",
+ "properties": {
+ "name": "elementGroup1"
+ },
+ "members": [
+ "gsu_vm",
+ "pfu_vm"
+ ]
+ }
]
}
scale_vnf_data = {
- "type":"SCALE_OUT",
- "aspectId":"demo_aspect",
- "numberOfSteps":"3",
- "additionalParam":{
- "vnfdModel":vnfd_info
+ "type": "SCALE_OUT",
+ "aspectId": "demo_aspect",
+ "numberOfSteps": "3",
+ "additionalParam": {
+ "vnfdModel": vnfd_info
}
}
-
response = self.client.post("/api/ztevmanagerdriver/v1/100/vnfs/101/scale",
- data=json.dumps(scale_vnf_data), content_type='application/json')
+ data=json.dumps(scale_vnf_data), content_type='application/json')
self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code)
self.assertDictEqual(job_info, response.data)
query_vnfm_url = "api/extsys/v1/vnfms/%s"
query_package_url = "api/nslcm/v1/vnfpackage/%s"
-#Query vnfm_info from nslcm
+
+# Query vnfm_info from nslcm
def get_vnfminfo_from_nslcm(vnfmid):
ret = req_by_msb("api/nslcm/v1/vnfms/%s" % vnfmid, "GET")
return ret
+
# Query vnfm_info from esr
def vnfm_get(vnfmid):
ret = call_aai("api/aai-esr-server/v1/vnfms/%s" % vnfmid, "GET")
return ret
+
# Query vnfd_info from nslcm
def vnfd_get(vnfpackageid):
ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % vnfpackageid, "GET")
return ret
+
# Query vnfpackage_info from nslcm
def vnfpackage_get(csarid):
ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % csarid, "GET")
"additionalParam": ""}
create_vnf_resp_mapping = {
"VNFInstanceID": "vnfInstanceId",
- "JobId": "jobid",}
+ "JobId": "jobid"
+}
@api_view(http_method_names=['POST'])
vnf_detail_url = "v1/vnfs/%s"
vnf_detail_resp_mapping = {
- "VNFInstanseStatus": "status",}
+ "VNFInstanseStatus": "status"
+}
@api_view(http_method_names=['GET'])
"ErrorCode": "errorCode",
"ResponseId": "responseId",
"ResponseHistoryList": "responseHistoryList",
- "ResponseDescriptor": "responseDescriptor",}
+ "ResponseDescriptor": "responseDescriptor"
+}
@api_view(http_method_names=['GET'])
"VMFlavor": "",
"VMNumber": "",
"VMIDlist": "",
- "VMUUID": "",}
+ "VMUUID": ""
+}
@api_view(http_method_names=['POST'])
scale_type = ignorcase_get(request.data, "type")
aspect_id = ignorcase_get(request.data, "aspectId")
number_of_steps = ignorcase_get(request.data, "numberOfSteps")
- extension = ignorcase_get(request.data, "additionalParam")
- vnfd_model = ignorcase_get(extension, "vnfdModel")
+ # extension = ignorcase_get(request.data, "additionalParam")
+ # vnfd_model = ignorcase_get(extension, "vnfdModel")
data = {
'vnfmid': vnfm_id,
'nfvoid': 1,
'scaletype': '0' if scale_type == 'SCALE_OUT' else '1',
- 'vmlist': [{'VMNumber':number_of_steps,'VMFlavor':aspect_id}],
- 'extension':''
+ 'vmlist': [{'VMNumber': number_of_steps, 'VMFlavor': aspect_id}],
+ 'extension': ''
}
'''
for vdu_id in get_vdus(vnfd_model, aspect_id):
content=json.JSONEncoder().encode(data))
logger.info("ret=%s", ret)
if ret[0] != 0:
- return Response(data={'error':'scale error'}, status=ret[2])
+ return Response(data={'error': 'scale error'}, status=ret[2])
resp_data = json.JSONDecoder().decode(ret[1])
# jobId = resp_data["jobid"]
logger.info("resp_data=%s", resp_data)
except Exception as e:
- logger.error("Error occurred when scaling VNF")
+ logger.error("Error occurred when scaling VNF,error:%s", e.message)
logger.error(traceback.format_exc())
- return Response(data={'error':'scale expection'}, status='500')
+ return Response(data={'error': 'scale expection'}, status='500')
return Response(data=resp_data, status=ret[2])
nf_healing_url = '/api/v1/nf_m_i/nfs/{vnfInstanceID}/vms/operation'
+
@api_view(http_method_names=['POST'])
def heal(request, *args, **kwargs):
logger.info("====heal_vnf===")
# jobId = resp_data["jobid"]
logger.info("resp_data=%s", resp_data)
except Exception as e:
- logger.error("Error occurred when healing VNF")
+ logger.error("Error occurred when healing VNF,error:%s", e.message)
logger.error(traceback.format_exc())
return Response(data={'error': 'heal expection'}, status='500')
return Response(data=resp_data, status=ret[2])
-#@staticmethod
+
def get_vdus(nf_model, aspect_id):
associated_group = ''
members = []