aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdocker/Dockerfile2
-rw-r--r--lcm/ns_vnfs/biz/grant_vnf.py10
-rw-r--r--lcm/ns_vnfs/biz/place_vnfs.py17
-rw-r--r--lcm/ns_vnfs/serializers/serializers.py72
-rw-r--r--lcm/ns_vnfs/tests/tests.py42
5 files changed, 93 insertions, 50 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 32fc8020..2caaf3ee 100755
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -28,7 +28,7 @@ ADD . /service
WORKDIR /service
# get binary zip from nexus - vfc-nfvo-lcm
-RUN wget -q -O vfc-nfvo-lcm.zip 'https://nexus.onap.org/service/local/artifact/maven/redirect?r=snapshots&g=org.onap.vfc.nfvo.lcm&a=vfc-nfvo-lcm&v=LATEST&e=zip' && \
+RUN wget -q -O vfc-nfvo-lcm.zip 'https://nexus.onap.org/service/local/artifact/maven/redirect?r=staging&g=org.onap.vfc.nfvo.lcm&a=vfc-nfvo-lcm&v=LATEST&e=zip' && \
unzip vfc-nfvo-lcm.zip && \
rm -rf vfc-nfvo-lcm.zip
diff --git a/lcm/ns_vnfs/biz/grant_vnf.py b/lcm/ns_vnfs/biz/grant_vnf.py
index faeebecb..6987fc07 100644
--- a/lcm/ns_vnfs/biz/grant_vnf.py
+++ b/lcm/ns_vnfs/biz/grant_vnf.py
@@ -105,12 +105,14 @@ class GrantVnf(object):
offs = OOFDataModel.objects.filter(service_resource_id=ignore_case_get(self.data, "vnfInstanceId"))
if offs.exists():
- for off in offs:
+ vdu_info = json.loads(offs[0].vdu_info)
+ grant_resp['vimAssets'] = {'computeResourceFlavours': []}
+ for vdu in vdu_info:
grant_resp['vimAssets']['computeResourceFlavours'].append({
- 'vimConnectionId': off.vim_id,
- 'resourceProviderId': off.vdu_name,
+ 'vimConnectionId': offs[0].vim_id,
+ 'resourceProviderId': vdu.get("vduName"),
'vnfdVirtualComputeDescId': None, # TODO: required
- 'vimFlavourId': off.flavor_name
+ 'vimFlavourId': vdu.get("flavorName")
})
# grant_resp['additionalparams'][off.vim_id] = off.directive
diff --git a/lcm/ns_vnfs/biz/place_vnfs.py b/lcm/ns_vnfs/biz/place_vnfs.py
index a63c04e3..e288f9dd 100644
--- a/lcm/ns_vnfs/biz/place_vnfs.py
+++ b/lcm/ns_vnfs/biz/place_vnfs.py
@@ -64,14 +64,14 @@ class PlaceVnfs(object):
if self.placements == [] or self.placements == [[]]:
logger.debug("No solution found for request %s " % self.request_id)
self.update_response_to_db(self.request_id, self.transaction_id,
- self.data.get("requestStatus"), "no-solution", "no-solution",
- "no-solution", "no-solution")
+ self.data.get("requestStatus"), "none", "none",
+ "none", "none")
return
for item in self.placements:
if not isinstance(item, list):
self.update_response_to_db(self.request_id, self.transaction_id,
- self.data.get("requestStatus"), "no-solution", "no-solution",
- "no-solution", "no-solution")
+ self.data.get("requestStatus"), "none", "none",
+ "none", "none")
continue
for placement in item:
assignmentInfo = placement.get("assignmentInfo")
@@ -106,8 +106,15 @@ class PlaceVnfs(object):
cloud_owner = placement.get("solution").get("cloudOwner") \
if placement.get("solution").get("cloudOwner") \
else vim_info.get("cloudOwner")
+ location_id = vim_info.get("locationId")
+ if not cloud_owner or not location_id:
+ self.update_response_to_db(self.request_id,
+ self.transaction_id,
+ self.data.get("requestStatus"), "none", "none",
+ "none", "none")
+ return
vim_id = vim_info['vimId'] if vim_info.get('vimId') \
- else cloud_owner + "_" + vim_info.get("locationId")
+ else cloud_owner + "_" + location_id
self.update_response_to_db(requestId=self.request_id,
transactionId=self.transaction_id,
requestStatus=self.data.get("requestStatus"),
diff --git a/lcm/ns_vnfs/serializers/serializers.py b/lcm/ns_vnfs/serializers/serializers.py
index 7dd01150..0d7b8a84 100644
--- a/lcm/ns_vnfs/serializers/serializers.py
+++ b/lcm/ns_vnfs/serializers/serializers.py
@@ -18,7 +18,7 @@ from rest_framework import serializers
class InstVnfReqSerializer(serializers.Serializer):
vnfIndex = serializers.CharField(help_text="Index of VNF", required=True)
nsInstanceId = serializers.CharField(help_text="ID of NS instance", required=True)
- additionalParamForVnf = serializers.CharField(help_text="Additional param for VNF", required=False, allow_null=True)
+ additionalParamForVnf = serializers.CharField(help_text="Additional param for VNF", required=False, allow_null=True, allow_blank=True)
class InstVnfRespSerializer(serializers.Serializer):
@@ -28,7 +28,7 @@ class InstVnfRespSerializer(serializers.Serializer):
class VnfVmsSerializer(serializers.Serializer):
vmID = serializers.CharField(help_text="ID of VM", required=True)
- vmName = serializers.CharField(help_text="Name of VM", required=False, allow_null=True)
+ vmName = serializers.CharField(help_text="Name of VM", required=False, allow_null=True, allow_blank=True)
class GetVnfRespSerializer(serializers.Serializer):
@@ -40,7 +40,7 @@ class GetVnfRespSerializer(serializers.Serializer):
class TerminateVnfReqSerializer(serializers.Serializer):
terminationType = serializers.CharField(help_text="Termination Type", required=False, allow_null=True)
- gracefulTerminationTimeout = serializers.CharField(help_text="Graceful Termination Timeout", required=False, allow_null=True)
+ gracefulTerminationTimeout = serializers.CharField(help_text="Graceful Termination Timeout", required=False, allow_null=True, allow_blank=True)
class TerminateVnfRespSerializer(serializers.Serializer):
@@ -49,19 +49,19 @@ class TerminateVnfRespSerializer(serializers.Serializer):
class ResourceChangeSerializer(serializers.Serializer):
type = serializers.ChoiceField(help_text="Change Type", choices=["VDU"], required=True)
- resourceDefinitionId = serializers.CharField(help_text="Identifier of resource", required=False, allow_null=True)
- vdu = serializers.CharField(help_text="Identifier identifier of VDU", required=False, allow_null=True)
+ resourceDefinitionId = serializers.CharField(help_text="Identifier of resource", required=False, allow_null=True, allow_blank=True)
+ vdu = serializers.CharField(help_text="Identifier identifier of VDU", required=False, allow_null=True, allow_blank=True)
class GrantVnfReqSerializer(serializers.Serializer):
vnfInstanceId = serializers.CharField(help_text="ID of VNF instance", required=True)
- vnfDescriptorId = serializers.CharField(help_text="ID of VNF Descriptor", required=False, allow_null=True)
+ vnfDescriptorId = serializers.CharField(help_text="ID of VNF Descriptor", required=False, allow_null=True, allow_blank=True)
lifecycleOperation = serializers.ChoiceField(
help_text="Lifecycle Operation",
choices=["Terminal", "Instantiate", "Scalein", "Scaleout", "Scaledown", "Scaleup", "Heal"],
required=True
)
- jobId = serializers.CharField(help_text="ID of Job", required=False, allow_null=True)
+ jobId = serializers.CharField(help_text="ID of Job", required=False, allow_null=True, allow_blank=True)
addResource = ResourceChangeSerializer(help_text="Add resources", many=True)
removeResource = ResourceChangeSerializer(help_text="Remove resources", many=True)
additionalParam = serializers.DictField(
@@ -83,21 +83,21 @@ class VimSerializer(serializers.Serializer):
class GrantVnfRespSerializer(serializers.Serializer):
- vnfInstanceId = serializers.CharField(help_text="ID of VNF instance", required=False, allow_null=True)
+ vnfInstanceId = serializers.CharField(help_text="ID of VNF instance", required=False, allow_null=True, allow_blank=True)
vim = VimSerializer(help_text="VIM Info", required=True)
class AffectedVnfcSerializer(serializers.Serializer):
- vnfcInstanceId = serializers.CharField(help_text="ID of VNFC instance", required=False, allow_null=True)
- vduId = serializers.CharField(help_text="ID of VDU in VNFD", required=False, allow_null=True)
+ vnfcInstanceId = serializers.CharField(help_text="ID of VNFC instance", required=False, allow_null=True, allow_blank=True)
+ vduId = serializers.CharField(help_text="ID of VDU in VNFD", required=False, allow_null=True, allow_blank=True)
changeType = serializers.ChoiceField(
help_text="Type of Change",
choices=["added", "removed", "modified"],
required=True
)
- vimId = serializers.CharField(help_text="ID of VIM", required=False, allow_null=True)
- vmId = serializers.CharField(help_text="ID of virtual machine", required=False, allow_null=True)
- vmName = serializers.CharField(help_text="Name of virtual machine", required=False, allow_null=True)
+ vimId = serializers.CharField(help_text="ID of VIM", required=False, allow_null=True, allow_blank=True)
+ vmId = serializers.CharField(help_text="ID of virtual machine", required=False, allow_null=True, allow_blank=True)
+ vmName = serializers.CharField(help_text="Name of virtual machine", required=False, allow_null=True, allow_blank=True)
class NetworkResourceSerializer(serializers.Serializer):
@@ -106,13 +106,13 @@ class NetworkResourceSerializer(serializers.Serializer):
choices=["network", "port"],
required=True
)
- resourceId = serializers.CharField(help_text="ID of network resource", required=False, allow_null=True)
- resourceName = serializers.CharField(help_text="Name of network resource", required=False, allow_null=True)
+ resourceId = serializers.CharField(help_text="ID of network resource", required=False, allow_null=True, allow_blank=True)
+ resourceName = serializers.CharField(help_text="Name of network resource", required=False, allow_null=True, allow_blank=True)
class AffectedVirtualLinkSerializer(serializers.Serializer):
- vlInstanceId = serializers.CharField(help_text="ID of VL instance", required=False, allow_null=True)
- vldId = serializers.CharField(help_text="ID of VLD in VNFD", required=False, allow_null=True)
+ vlInstanceId = serializers.CharField(help_text="ID of VL instance", required=False, allow_null=True, allow_blank=True)
+ vldId = serializers.CharField(help_text="ID of VLD in VNFD", required=False, allow_null=True, allow_blank=True)
changeType = serializers.ChoiceField(
help_text="Type of Change",
choices=["added", "removed", "modified"],
@@ -122,13 +122,13 @@ class AffectedVirtualLinkSerializer(serializers.Serializer):
class PortResourceSerializer(serializers.Serializer):
- vimId = serializers.CharField(help_text="ID of VIM", required=False, allow_null=True)
- resourceId = serializers.CharField(help_text="ID of Resource", required=False, allow_null=True)
- resourceName = serializers.CharField(help_text="Name of Resource", required=False, allow_null=True)
- tenant = serializers.CharField(help_text="ID of Tenant", required=False, allow_null=True)
- ipAddress = serializers.CharField(help_text="IP address of port", required=False, allow_null=True)
- macAddress = serializers.CharField(help_text="MAC address of port", required=False, allow_null=True)
- instId = serializers.CharField(help_text="Instance id of server to which the port is attached to", required=False, allow_null=True)
+ vimId = serializers.CharField(help_text="ID of VIM", required=False, allow_null=True, allow_blank=True)
+ resourceId = serializers.CharField(help_text="ID of Resource", required=False, allow_null=True, allow_blank=True)
+ resourceName = serializers.CharField(help_text="Name of Resource", required=False, allow_null=True, allow_blank=True)
+ tenant = serializers.CharField(help_text="ID of Tenant", required=False, allow_null=True, allow_blank=True)
+ ipAddress = serializers.CharField(help_text="IP address of port", required=False, allow_null=True, allow_blank=True)
+ macAddress = serializers.CharField(help_text="MAC address of port", required=False, allow_null=True, allow_blank=True)
+ instId = serializers.CharField(help_text="Instance id of server to which the port is attached to", required=False, allow_null=True, allow_blank=True)
class AffectedCpSerializer(serializers.Serializer):
@@ -137,11 +137,11 @@ class AffectedCpSerializer(serializers.Serializer):
choices=["added", "removed", "modified"],
required=True
)
- virtualLinkInstanceId = serializers.CharField(help_text="ID of VL instance", required=False, allow_null=True)
- cpInstanceId = serializers.CharField(help_text="ID of CP instance", required=False, allow_null=True)
- cpdId = serializers.CharField(help_text="ID of CPD in VNFD", required=False, allow_null=True)
- ownerType = serializers.CharField(help_text="Type of Owner", required=False, allow_null=True)
- ownerId = serializers.CharField(help_text="ID of Owner", required=False, allow_null=True)
+ virtualLinkInstanceId = serializers.CharField(help_text="ID of VL instance", required=False, allow_null=True, allow_blank=True)
+ cpInstanceId = serializers.CharField(help_text="ID of CP instance", required=False, allow_null=True, allow_blank=True)
+ cpdId = serializers.CharField(help_text="ID of CPD in VNFD", required=False, allow_null=True, allow_blank=True)
+ ownerType = serializers.CharField(help_text="Type of Owner", required=False, allow_null=True, allow_blank=True)
+ ownerId = serializers.CharField(help_text="ID of Owner", required=False, allow_null=True, allow_blank=True)
portResource = PortResourceSerializer(help_text="Port Resource", required=False, allow_null=True)
@@ -160,8 +160,8 @@ class NotifyLcmReqSerializer(serializers.Serializer):
choices=["Terminal", "Instantiate", "Scalein", "Scaleout", "Scaledown", "Scaleup", "Heal"],
required=True
)
- jobId = serializers.CharField(help_text="ID of Job", required=False, allow_null=True)
- vnfdmodule = serializers.CharField(help_text="VNFD Module", required=False, allow_null=True)
+ jobId = serializers.CharField(help_text="ID of Job", required=False, allow_null=True, allow_blank=True)
+ vnfdmodule = serializers.CharField(help_text="VNFD Module", required=False, allow_null=True, allow_blank=True)
affectedVnfc = AffectedVnfcSerializer(help_text="Affected VNFC", many=True)
affectedVl = AffectedVirtualLinkSerializer(help_text="Affected VL", many=True)
affectedCp = AffectedCpSerializer(help_text="Affected CP", many=True)
@@ -174,8 +174,8 @@ class ScaleVnfDataSerializer(serializers.Serializer):
choices=["SCALE_IN", "SCALE_OUT"],
required=True
)
- aspectId = serializers.CharField(help_text="Aspect ID of the VNF that is requested to be scaled", required=False, allow_null=True)
- numberOfSteps = serializers.CharField(help_text="Number of scaling steps to be executed as part of this ScaleVnf operation", required=False, allow_null=True)
+ aspectId = serializers.CharField(help_text="Aspect ID of the VNF that is requested to be scaled", required=False, allow_null=True, allow_blank=True)
+ numberOfSteps = serializers.CharField(help_text="Number of scaling steps to be executed as part of this ScaleVnf operation", required=False, allow_null=True, allow_blank=True)
additionalParam = serializers.DictField(
help_text="Additional parameters passed by the NFVO as input to the scaling process, specific to the VNF being scaled",
child=serializers.CharField(help_text="Additional parameters", allow_blank=True),
@@ -246,7 +246,7 @@ class CandidateSerializer(serializers.Serializer):
required=True
)
cloudOwner = serializers.CharField(
- help_text="The name of a cloud owner. Only required if identifier Type is cloudRegionId", required=False)
+ help_text="The name of a cloud owner. Only required if identifier Type is cloudRegionId", required=False, allow_null=True, allow_blank=True)
class LicenseSolutionSerializer(serializers.Serializer):
@@ -306,8 +306,8 @@ class SolutionSerializer(serializers.Serializer):
class PlaceVnfReqSerializer(serializers.Serializer):
requestId = serializers.CharField(help_text="ID of Homing Request", required=True)
- transactionId = serializers.CharField(help_text="ID of Homing Transaction", required=True, allow_null=False)
- statusMessage = serializers.CharField(help_text="Status Message of Request", required=False, allow_null=True)
+ transactionId = serializers.CharField(help_text="ID of Homing Transaction", required=True, allow_null=False, allow_blank=True)
+ statusMessage = serializers.CharField(help_text="Status Message of Request", required=False, allow_null=True, allow_blank=True)
requestStatus = serializers.ChoiceField(
help_text="The Status of a Request",
choices=["completed", "failed", "pending"],
diff --git a/lcm/ns_vnfs/tests/tests.py b/lcm/ns_vnfs/tests/tests.py
index db5931e9..422182ad 100644
--- a/lcm/ns_vnfs/tests/tests.py
+++ b/lcm/ns_vnfs/tests/tests.py
@@ -26,6 +26,7 @@ from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE
from lcm.pub.utils.timeutil import now_time
from lcm.pub.utils.values import ignore_case_get
from lcm.ns_vnfs.biz.create_vnfs import CreateVnfs
+from lcm.ns_vnfs.biz.grant_vnf import GrantVnf
from lcm.ns_vnfs.biz.heal_vnfs import NFHealService
from lcm.ns_vnfs.biz.scale_vnfs import NFManualScaleService
from lcm.ns_vnfs.biz.subscribe import SubscriptionDeletion
@@ -33,6 +34,7 @@ from lcm.ns_vnfs.biz.terminate_nfs import TerminateVnfs
from lcm.ns_vnfs.const import VNF_STATUS, INST_TYPE
from lcm.ns_vnfs.biz import create_vnfs
from lcm.ns_vnfs.biz.place_vnfs import PlaceVnfs
+from lcm.pub.msapi import resmgr
class TestGetVnfViews(TestCase):
@@ -930,10 +932,42 @@ class TestPlaceVnfViews(TestCase):
PlaceVnfs(resp).extract()
db_info = OOFDataModel.objects.filter(request_id=resp.get("requestId"), transaction_id=resp.get("transactionId"))
self.assertEqual(db_info[0].request_status, "completed")
- self.assertEqual(db_info[0].vim_id, "no-solution")
- self.assertEqual(db_info[0].cloud_owner, "no-solution")
- self.assertEqual(db_info[0].cloud_region_id, "no-solution")
- self.assertEqual(db_info[0].vdu_info, "no-solution")
+ self.assertEqual(db_info[0].vim_id, "none")
+ self.assertEqual(db_info[0].cloud_owner, "none")
+ self.assertEqual(db_info[0].cloud_region_id, "none")
+ self.assertEqual(db_info[0].vdu_info, "none")
+
+
+class TestGrantVnfViews(TestCase):
+ def setUp(self):
+ self.vnf_inst_id = str(uuid.uuid4())
+ self.data = {
+ "vnfInstanceId": self.vnf_inst_id,
+ "vnfLcmOpOccId": "1234"
+ }
+ vdu_info_dict = [{"vduName": "vg", "flavorName": "flavor_1", "directive": []}]
+ OOFDataModel(request_id='1234', transaction_id='1234', request_status='done', request_module_name='vg',
+ service_resource_id=self.vnf_inst_id, vim_id='cloudOwner_casa', cloud_owner='cloudOwner',
+ cloud_region_id='casa', vdu_info=json.dumps(vdu_info_dict)).save()
+
+ def tearDown(self):
+ OOFDataModel.objects.all().delete()
+
+ @mock.patch.object(resmgr, "grant_vnf")
+ def test_exec_grant(self, mock_grant):
+ resmgr_grant_resp = {
+ "vim": {
+ "vimId": "cloudOwner_casa",
+ "accessInfo": {
+ "tenant": "tenantA"
+ }
+ }
+ }
+ mock_grant.return_value = resmgr_grant_resp
+ resp = GrantVnf(self.data).exec_grant()
+ self.assertEquals(resp['vimAssets']['computeResourceFlavours'][0]['vimConnectionId'], 'cloudOwner_casa')
+ self.assertEquals(resp['vimAssets']['computeResourceFlavours'][0]['resourceProviderId'], 'vg')
+ self.assertEquals(resp['vimAssets']['computeResourceFlavours'][0]['vimFlavourId'], 'flavor_1')
vnfd_model_dict = {