aboutsummaryrefslogtreecommitdiffstats
path: root/src/onaptests/steps/instantiate
diff options
context:
space:
mode:
Diffstat (limited to 'src/onaptests/steps/instantiate')
-rw-r--r--src/onaptests/steps/instantiate/k8s_profile_create.py170
-rw-r--r--src/onaptests/steps/instantiate/service_ala_carte.py2
-rw-r--r--src/onaptests/steps/instantiate/vf_module_ala_carte.py16
-rw-r--r--src/onaptests/steps/instantiate/vnf_ala_carte.py3
4 files changed, 184 insertions, 7 deletions
diff --git a/src/onaptests/steps/instantiate/k8s_profile_create.py b/src/onaptests/steps/instantiate/k8s_profile_create.py
new file mode 100644
index 0000000..0bc6c2d
--- /dev/null
+++ b/src/onaptests/steps/instantiate/k8s_profile_create.py
@@ -0,0 +1,170 @@
+from typing import Iterable
+from uuid import uuid4
+from yaml import load
+
+from onapsdk.aai.business import Customer, ServiceInstance, ServiceSubscription
+from onapsdk.configuration import settings
+from onapsdk.msb.k8s import Definition
+from onapsdk.so.instantiation import VnfParameter
+
+import onaptests.utils.exceptions as onap_test_exceptions
+from ..base import BaseStep
+from .vnf_ala_carte import YamlTemplateVnfAlaCarteInstantiateStep
+
+class K8SProfileStep(BaseStep):
+ """CreateK8sProfileStep."""
+
+ def __init__(self, cleanup=False):
+ """Initialize step.
+ """
+ super().__init__(cleanup=cleanup)
+
+ self._yaml_template: dict = None
+ self._service_instance_name: str = None
+ self._service_instance: ServiceInstance = None
+ self.add_step(YamlTemplateVnfAlaCarteInstantiateStep(cleanup))
+
+ @property
+ def yaml_template(self) -> dict:
+ """Step YAML template.
+
+ Load from file if it's a root step, get from parent otherwise.
+
+ Returns:
+ dict: Step YAML template
+
+ """
+ if self.is_root:
+ if not self._yaml_template:
+ with open(settings.SERVICE_YAML_TEMPLATE, "r") as yaml_template:
+ self._yaml_template: dict = load(yaml_template)
+ return self._yaml_template
+ return self.parent.yaml_template
+
+ @property
+ def service_name(self) -> str:
+ """Service name.
+
+ Get from YAML template if it's a root step, get from parent otherwise.
+
+ Returns:
+ str: Service name
+
+ """
+ if self.is_root:
+ return next(iter(self.yaml_template.keys()))
+ return self.parent.service_name
+
+ @property
+ def service_instance_name(self) -> str:
+ """Service instance name.
+
+ Generate using `service_name` and `uuid4()` function if it's a root step,
+ get from parent otherwise.
+
+ Returns:
+ str: Service instance name
+
+ """
+ if self.is_root:
+ if not self._service_instance_name:
+ self._service_instance_name: str = f"{self.service_name}-{str(uuid4())}"
+ return self._service_instance_name
+ return self.parent.service_instance_name
+
+ def get_vnf_parameters(self, vnf_name: str) -> Iterable[VnfParameter]:
+ """Get VNF parameters from YAML template.
+
+ Args:
+ vnf_name (str): VNF name to get parameters for.
+
+ Yields:
+ Iterator[Iterable[VnfParameter]]: VNF parameter
+
+ """
+
+ # workaround, as VNF name differs from model name (added " 0")
+ vnf_name = vnf_name.split()[0]
+ for vnf in self.yaml_template[self.service_name]["vnfs"]:
+ if vnf["vnf_name"] == vnf_name:
+ for vnf_parameter in vnf["vnf_parameters"]:
+ yield VnfParameter(
+ name=vnf_parameter["name"],
+ value=vnf_parameter["value"]
+ )
+
+ @BaseStep.store_state
+ def execute(self):
+ """Creation of k8s profile for resource bundle definition
+
+ Use settings values:
+ - GLOBAL_CUSTOMER_ID
+ - K8S_PROFILE_K8S_VERSION
+ - K8S_PROFILE_ARTIFACT_PATH.
+ """
+ self._logger.info("Create the k8s profile if it doesn't exist")
+ super().execute()
+ customer: Customer = Customer.get_by_global_customer_id(settings.GLOBAL_CUSTOMER_ID)
+ service_subscription: ServiceSubscription = customer.get_service_subscription_by_service_type(self.service_name)
+ self._service_instance: ServiceInstance = service_subscription.get_service_instance_by_name(self.service_instance_name)
+
+ for vnf_instance in self._service_instance.vnf_instances:
+ # possible to have several modules for 1 VNF
+ for vf_module in vnf_instance.vnf.vf_modules:
+ # Define profile (rb_profile) for resource bundle definition
+ # Retrieve resource bundle definition (rbdef) corresponding to vf module
+ rbdef_name = vf_module.metadata["vfModuleModelInvariantUUID"]
+ rbdef_version = vf_module.metadata["vfModuleModelUUID"]
+ rbdef = Definition.get_definition_by_name_version(rbdef_name, rbdef_version)
+ # Get k8s profile name from yaml service template
+ vnf_parameters = self.get_vnf_parameters(vnf_instance.vnf.name)
+ k8s_profile_name = ""
+ k8s_profile_namespace = ""
+ for param in vnf_parameters:
+ if param.name == "k8s-rb-profile-name":
+ k8s_profile_name = param.value
+ if param.name == "k8s-rb-profile-namespace":
+ k8s_profile_namespace = param.value
+ if k8s_profile_name == "" or k8s_profile_namespace == "":
+ self._logger.error("Missing rb profile information")
+ raise onap_test_exceptions.ProfileInformationException
+
+ ######## Check profile for Definition ###################################
+ try:
+ rbdef.get_profile_by_name(k8s_profile_name)
+ except ValueError:
+ ######## Create profile for Definition ###################################
+ profile = rbdef.create_profile(k8s_profile_name,
+ k8s_profile_namespace,
+ settings.K8S_PROFILE_K8S_VERSION)
+ ####### Upload artifact for created profile ##############################
+ profile.upload_artifact(open(settings.K8S_PROFILE_ARTIFACT_PATH, 'rb').read())
+
+ def cleanup(self) -> None:
+ """Cleanup K8S profiles.
+ """
+ self._logger.info("Clean the k8s profile")
+ for vnf_instance in self._service_instance.vnf_instances:
+ # possible to have several modules for 1 VNF
+ for vf_module in vnf_instance.vnf.vf_modules:
+ # Retrieve resource bundle definition (rbdef) corresponding to vf module
+ rbdef_name = vf_module.metadata["vfModuleModelInvariantUUID"]
+ rbdef_version = vf_module.metadata["vfModuleModelUUID"]
+ rbdef = Definition.get_definition_by_name_version(rbdef_name, rbdef_version)
+ # Get k8s profile name from yaml service template
+ vnf_parameters = self.get_vnf_parameters(vnf_instance.vnf.name)
+ k8s_profile_name = ""
+ for param in vnf_parameters:
+ if param.name == "k8s-rb-profile-name":
+ k8s_profile_name = param.value
+ if k8s_profile_name == "":
+ self._logger.error("K8s profile deletion failed, missing rb profile name")
+ raise onap_test_exceptions.ProfileInformationException
+ ######## Delete profile for Definition ###################################
+ try:
+ profile = rbdef.get_profile_by_name(k8s_profile_name)
+ profile.delete()
+ except ValueError:
+ self._logger.error("K8s profile deletion %s failed", k8s_profile_name)
+ raise onap_test_exceptions.ProfileCleanupException
+ super().cleanup()
diff --git a/src/onaptests/steps/instantiate/service_ala_carte.py b/src/onaptests/steps/instantiate/service_ala_carte.py
index 3a99f4d..2b42132 100644
--- a/src/onaptests/steps/instantiate/service_ala_carte.py
+++ b/src/onaptests/steps/instantiate/service_ala_carte.py
@@ -220,7 +220,6 @@ class YamlTemplateServiceAlaCarteInstantiateStep(YamlTemplateBaseStep):
Exception: Service cleaning failed
"""
- super().cleanup()
service_deletion = self._service_instance.delete()
nb_try = 0
nb_try_max = 30
@@ -233,3 +232,4 @@ class YamlTemplateServiceAlaCarteInstantiateStep(YamlTemplateBaseStep):
else:
self._logger.error("Service deletion %s failed", self._service_instance_name)
raise onap_test_exceptions.ServiceCleanupException
+ super.cleanup()
diff --git a/src/onaptests/steps/instantiate/vf_module_ala_carte.py b/src/onaptests/steps/instantiate/vf_module_ala_carte.py
index b5fd7eb..16e2387 100644
--- a/src/onaptests/steps/instantiate/vf_module_ala_carte.py
+++ b/src/onaptests/steps/instantiate/vf_module_ala_carte.py
@@ -11,6 +11,7 @@ from onapsdk.so.instantiation import VnfParameter
import onaptests.utils.exceptions as onap_test_exceptions
from ..base import YamlTemplateBaseStep
from .vnf_ala_carte import YamlTemplateVnfAlaCarteInstantiateStep
+from .k8s_profile_create import K8SProfileStep
class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
"""Instantiate vf module a'la carte using YAML template."""
@@ -26,7 +27,14 @@ class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
self._yaml_template: dict = None
self._service_instance_name: str = None
self._service_instance: ServiceInstance = None
- self.add_step(YamlTemplateVnfAlaCarteInstantiateStep(cleanup))
+ if settings.CLOUD_REGION_TYPE == settings.K8S_REGION_TYPE:
+ # K8SProfileStep creates the requested profile and then calls
+ # YamlTemplateVnfAlaCarteInstantiateStep step
+ self.add_step(K8SProfileStep(cleanup))
+ else:
+ self.add_step(YamlTemplateVnfAlaCarteInstantiateStep(cleanup))
+
+
@property
def yaml_template(self) -> dict:
@@ -88,7 +96,7 @@ class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
"""
# workaround, as VNF name differs from model name (added " 0")
- vnf_name=vnf_name.split()[0]
+ vnf_name = vnf_name.split()[0]
for vnf in self.yaml_template[self.service_name]["vnfs"]:
if vnf["vnf_name"] == vnf_name:
for vnf_parameter in vnf["vnf_parameters"]:
@@ -126,7 +134,7 @@ class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
cloud_region,
tenant,
self._service_instance_name,
- vnf_parameters= self.get_vnf_parameters(vnf_instance.vnf.name))
+ vnf_parameters=self.get_vnf_parameters(vnf_instance.vnf.name))
while not vf_module_instantiation.finished:
time.sleep(10)
if vf_module_instantiation.failed:
@@ -140,7 +148,6 @@ class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
Exception: Vf module cleaning failed
"""
- super().cleanup()
for vnf_instance in self._service_instance.vnf_instances:
self._logger.debug("VNF instance %s found in Service Instance ",
vnf_instance.name)
@@ -161,3 +168,4 @@ class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep):
else:
self._logger.error("VfModule deletion %s failed", vf_module.name)
raise onap_test_exceptions.VfModuleCleanupException
+ super.cleanup()
diff --git a/src/onaptests/steps/instantiate/vnf_ala_carte.py b/src/onaptests/steps/instantiate/vnf_ala_carte.py
index d529219..ad1a241 100644
--- a/src/onaptests/steps/instantiate/vnf_ala_carte.py
+++ b/src/onaptests/steps/instantiate/vnf_ala_carte.py
@@ -120,8 +120,6 @@ class YamlTemplateVnfAlaCarteInstantiateStep(YamlTemplateBaseStep):
Exception: VNF cleaning failed
"""
- super().cleanup()
-
for vnf_instance in self._service_instance.vnf_instances:
vnf_deletion = vnf_instance.delete()
nb_try = 0
@@ -136,3 +134,4 @@ class YamlTemplateVnfAlaCarteInstantiateStep(YamlTemplateBaseStep):
else:
self._logger.error("VNF deletion %s failed", vnf_instance.name)
raise onap_test_exceptions.VnfCleanupException
+ super.cleanup()