[TEST] Do not try to recreate already created SDC resources 14/121314/2
authorMichal Jagiello <michal.jagiello@t-mobile.pl>
Tue, 11 May 2021 07:56:34 +0000 (07:56 +0000)
committerMorgan Richomme <morgan.richomme@orange.com>
Mon, 17 May 2021 16:39:04 +0000 (16:39 +0000)
When try to recreate SDC resources like VF, PNF or Service it's API returns errors.
Check before onboarding if resource we want to create already exists.

Issue-ID: TEST-333
Signed-off-by: Michal Jagiello <michal.jagiello@t-mobile.pl>
Change-Id: Idcedfa18331ec898fa446d6d7689885a485a1a86
(cherry picked from commit 060210803b263b681e696bc40bdbe9f254d729db)

src/onaptests/configuration/basic_vm_macro_settings.py
src/onaptests/steps/onboard/pnf.py
src/onaptests/steps/onboard/service.py
src/onaptests/steps/onboard/vf.py

index 7bce5db..adf3cd3 100644 (file)
@@ -1,6 +1,7 @@
 import os
 import openstack
 from pathlib import Path
+from uuid import uuid4
 
 from yaml import load
 
@@ -57,4 +58,4 @@ try:
 except (FileNotFoundError, ValueError):
     raise onap_test_exceptions.TestConfigurationException
 
-SERVICE_INSTANCE_NAME = "basic_vm_macro_service_instance"
+SERVICE_INSTANCE_NAME = f"basic_macro_{str(uuid4())}"
index 547e0c0..01f2248 100644 (file)
@@ -49,14 +49,15 @@ class PnfOnboardStep(BaseStep):
         super().execute()
         vendor: Vendor = Vendor(name=settings.VENDOR_NAME)
         pnf: Pnf = Pnf(name=settings.PNF_NAME, vendor=vendor)
-        pnf.create()
-        pnf.add_deployment_artifact(
-            artifact_type=settings.PNF_ARTIFACT_TYPE,
-            artifact_name=settings.PNF_ARTIFACT_NAME,
-            artifact_label=settings.PNF_ARTIFACT_LABEL,
-            artifact=settings.PNF_ARTIFACT_FILE_PATH
-        )
-        pnf.onboard()
+        if not pnf.created():
+            pnf.create()
+            pnf.add_deployment_artifact(
+                artifact_type=settings.PNF_ARTIFACT_TYPE,
+                artifact_name=settings.PNF_ARTIFACT_NAME,
+                artifact_label=settings.PNF_ARTIFACT_LABEL,
+                artifact=settings.PNF_ARTIFACT_FILE_PATH
+            )
+            pnf.onboard()
 
 
 class YamlTemplatePnfOnboardStep(YamlTemplateBaseStep):
@@ -104,12 +105,17 @@ class YamlTemplatePnfOnboardStep(YamlTemplateBaseStep):
         if "pnfs" in self.yaml_template:
             vendor: Vendor = Vendor(name=settings.VENDOR_NAME)
             for pnf in self.yaml_template["pnfs"]:
-                pnf_obj: Pnf = Pnf(name=pnf["pnf_name"], vendor=vendor)
-                pnf_obj.create()
-                pnf_obj.add_deployment_artifact(
-                    artifact_type=pnf["pnf_artifact_type"],
-                    artifact_name=pnf["pnf_artifact_name"],
-                    artifact_label=pnf["pnf_artifact_label"],
-                    artifact=pnf["pnf_artifact_file_path"]
-                )
-                pnf_obj.onboard()
+                if "heat_files_to_upload" in pnf:
+                    vsp: Vsp = Vsp(name=f"{pnf['pnf_name']}_VSP")
+                else:
+                    vsp = None
+                pnf_obj: Pnf = Pnf(name=pnf["pnf_name"], vendor=vendor, vsp=vsp)
+                if not pnf_obj.created():
+                    pnf_obj.create()
+                    pnf_obj.add_deployment_artifact(
+                        artifact_type=pnf["pnf_artifact_type"],
+                        artifact_name=pnf["pnf_artifact_name"],
+                        artifact_label=pnf["pnf_artifact_label"],
+                        artifact=pnf["pnf_artifact_file_path"]
+                    )
+                    pnf_obj.onboard()
index 6300a43..8a7303b 100644 (file)
@@ -55,16 +55,17 @@ class ServiceOnboardStep(BaseStep):
         """
         super().execute()
         service: Service = Service(name=settings.SERVICE_NAME, instantiation_type=settings.SERVICE_INSTANTIATION_TYPE)
-        service.create()
-        if settings.VL_NAME != "":
-            vl: Vl = Vl(name=settings.VL_NAME)
-            service.add_resource(vl)
-        if settings.VF_NAME != "":
-            vf: Vf = Vf(name=settings.VF_NAME)
-            service.add_resource(vf)
-        if settings.PNF_NAME != "":
-            pnf: Pnf = Pnf(name=settings.PNF_NAME)
-            service.add_resource(pnf)
+        if not service.created():
+            service.create()
+            if settings.VL_NAME != "":
+                vl: Vl = Vl(name=settings.VL_NAME)
+                service.add_resource(vl)
+            if settings.VF_NAME != "":
+                vf: Vf = Vf(name=settings.VF_NAME)
+                service.add_resource(vf)
+            if settings.PNF_NAME != "":
+                pnf: Pnf = Pnf(name=settings.PNF_NAME)
+                service.add_resource(pnf)
         # If the service is already distributed, do not try to checkin/onboard (replay of tests)
         # checkin is done if needed
         # If service is replayed, no need to try to re-onboard the model
@@ -141,12 +142,13 @@ class YamlTemplateServiceOnboardStep(YamlTemplateBaseStep):
         else:
             instantiation_type: ServiceInstantiationType = ServiceInstantiationType.A_LA_CARTE
         service: Service = Service(name=self.service_name, instantiation_type=instantiation_type)
-        service.create()
-        self.declare_resources(service)
-        self.assign_properties(service)
-        # If the service is already distributed, do not try to checkin/onboard (replay of tests)
-        # checkin is done if needed
-        # If service is replayed, no need to try to re-onboard the model
+        if not service.created():
+            service.create()
+            self.declare_resources(service)
+            self.assign_properties(service)
+            # If the service is already distributed, do not try to checkin/onboard (replay of tests)
+            # checkin is done if needed
+            # If service is replayed, no need to try to re-onboard the model
         if not service.distributed:
             try:
                 service.checkin()
index 5f5fc4d..c6582dd 100644 (file)
@@ -40,7 +40,8 @@ class VfOnboardStep(BaseStep):
         super().execute()
         vsp: Vsp = Vsp(name=settings.VSP_NAME)
         vf: Vf = Vf(name=settings.VF_NAME, vsp=vsp)
-        vf.onboard()
+        if not vf.created():
+            vf.onboard()
 
 
 class YamlTemplateVfOnboardStep(YamlTemplateBaseStep):
@@ -85,15 +86,16 @@ class YamlTemplateVfOnboardStep(YamlTemplateBaseStep):
             for vnf in self.yaml_template["vnfs"]:
                 vsp: Vsp = Vsp(name=f"{vnf['vnf_name']}_VSP")
                 vf: Vf = Vf(name=vnf['vnf_name'], vsp=vsp)
-                if all([x in vnf for x in ["vnf_artifact_type",
-                                           "vnf_artifact_name",
-                                           "vnf_artifact_label",
-                                           "vnf_artifact_file_path"]]):
-                    vf.create()
-                    vf.add_deployment_artifact(
-                        artifact_type=vnf["vnf_artifact_type"],
-                        artifact_name=vnf["vnf_artifact_name"],
-                        artifact_label=vnf["vnf_artifact_label"],
-                        artifact=vnf["vnf_artifact_file_path"]
-                    )
-                vf.onboard()
+                if not vf.created():
+                    if all([x in vnf for x in ["vnf_artifact_type",
+                                               "vnf_artifact_name",
+                                               "vnf_artifact_label",
+                                               "vnf_artifact_file_path"]]):
+                        vf.create()
+                        vf.add_deployment_artifact(
+                            artifact_type=vnf["vnf_artifact_type"],
+                            artifact_name=vnf["vnf_artifact_name"],
+                            artifact_label=vnf["vnf_artifact_label"],
+                            artifact=vnf["vnf_artifact_file_path"]
+                        )
+                    vf.onboard()