diff options
author | Michal Jagiello <michal.jagiello@t-mobile.pl> | 2020-07-16 19:16:42 +0200 |
---|---|---|
committer | Michal Jagiello <michal.jagiello@t-mobile.pl> | 2020-08-24 17:39:38 +0000 |
commit | f9b0c349a5c83f9278f6b115d334598201d9d7e6 (patch) | |
tree | 474e0928dda4a7fd8340f27ab72bb5bee7683fce /src/onaptests/steps/instantiate/vf_module_ala_carte.py | |
parent | 9d674116f24285d68a80597202d393b74ac544ce (diff) |
First proposal for the structure for pythonsdk based scenarios
Issue-ID: TEST-240
Change-Id: Ic989b26442b868363af7b3872bff49dd70d78be0
Signed-off-by: Michal Jagiello <michal.jagiello@t-mobile.pl>
Diffstat (limited to 'src/onaptests/steps/instantiate/vf_module_ala_carte.py')
-rw-r--r-- | src/onaptests/steps/instantiate/vf_module_ala_carte.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/onaptests/steps/instantiate/vf_module_ala_carte.py b/src/onaptests/steps/instantiate/vf_module_ala_carte.py new file mode 100644 index 0000000..fd4b368 --- /dev/null +++ b/src/onaptests/steps/instantiate/vf_module_ala_carte.py @@ -0,0 +1,112 @@ +import time +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.so.instantiation import VnfParameter + +from ..base import YamlTemplateBaseStep +from .vnf_ala_carte import YamlTemplateVnfAlaCarteInstantiateStep + + +class YamlTemplateVfModuleAlaCarteInstantiateStep(YamlTemplateBaseStep): + """Instantiate vf module a'la carte using YAML template.""" + + def __init__(self, cleanup=False): + """Initialize step. + + Substeps: + - YamlTemplateVnfAlaCarteInstantiateStep. + """ + super().__init__(cleanup=cleanup) + self._yaml_template: dict = 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: + return f"{self.service_name}-{str(uuid4())}" + 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 + + """ + 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"] + ) + + def execute(self) -> None: + """Instantiate Vf module. + + Use settings values: + - GLOBAL_CUSTOMER_ID. + + Raises: + Exception: Vf module instantiation failed + + """ + 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) + service_instance: ServiceInstance = service_subscription.get_service_instance_by_name(self.service_instance_name) + for vnf_instance in service_instance.vnf_instances: + vf_module_instantiation = vnf_instance.add_vf_module( + vnf_instance.vnf.vf_module, + vnf_parameters= self.get_vnf_parameters(vnf_instance.vnf.vnf_name)) + while not vf_module_instantiation.finished: + time.sleep(10) + if vf_module_instantiation.failed: + raise Exception("Vf module instantiation failed") |