aboutsummaryrefslogtreecommitdiffstats
path: root/src/onaptests/steps/instantiate/vl_ala_carte.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/onaptests/steps/instantiate/vl_ala_carte.py')
-rw-r--r--src/onaptests/steps/instantiate/vl_ala_carte.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/src/onaptests/steps/instantiate/vl_ala_carte.py b/src/onaptests/steps/instantiate/vl_ala_carte.py
new file mode 100644
index 0000000..3a77c73
--- /dev/null
+++ b/src/onaptests/steps/instantiate/vl_ala_carte.py
@@ -0,0 +1,153 @@
+import time
+import re
+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 Subnet
+from onapsdk.sdc.service import Service
+from onapsdk.vid import LineOfBusiness, Platform
+
+import onaptests.utils.exceptions as onap_test_exceptions
+from ..base import YamlTemplateBaseStep
+from .service_ala_carte import YamlTemplateServiceAlaCarteInstantiateStep
+
+
+class YamlTemplateVlAlaCarteInstantiateStep(YamlTemplateBaseStep):
+ """Instantiate vl a'la carte using YAML template."""
+
+ def __init__(self, cleanup=False):
+ """Initialize step.
+
+ Substeps:
+ - YamlTemplateServiceAlaCarteInstantiateStep.
+ """
+ super().__init__(cleanup=cleanup)
+ self._yaml_template: dict = None
+ self._service_instance_name: str = None
+ self._service_instance: ServiceInstance = None
+ self.add_step(YamlTemplateServiceAlaCarteInstantiateStep(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_subnets(self, network_name: str) -> Iterable[Subnet]:
+ """Get Network parameters from YAML template.
+
+ Args:
+ network_name (str): Network name to get parameters for.
+
+ Yields:
+ Iterator[Iterable[Subnet]]: Subnets
+
+ """
+ # workaround, as Network name differs from model name (added " 0")
+ network_name=re.sub(r"\s\d$", r"", network_name)
+ for net in self.yaml_template[self.service_name]["networks"]:
+ if net["vl_name"] == network_name:
+ if net['subnets'] is None:
+ print("No Subnet defined")
+ else:
+ for subnet in net['subnets']:
+ yield Subnet(
+ name=subnet['subnet-name'],
+ start_address=subnet['start-address'],
+ gateway_address=subnet['gateway-address'],
+ cidr_mask=subnet['cidr-mask'],
+ ip_version=subnet['ip-version'],
+ dhcp_enabled=subnet['dhcp-enabled'])
+
+ @YamlTemplateBaseStep.store_state
+ def execute(self) -> None:
+ """Instantiate Vl.
+
+ Use settings values:
+ - GLOBAL_CUSTOMER_ID.
+
+ Raises:
+ Exception: Vl instantiation failed
+
+ """
+ super().execute()
+ service: Service = Service(self.service_name)
+ 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)
+ self._service_instance = service_instance
+ line_of_business: LineOfBusiness = LineOfBusiness(settings.LINE_OF_BUSINESS)
+ platform: Platform = Platform(settings.PLATFORM)
+ for idx, network in enumerate(service.networks):
+ #for network in self.yaml_template[self.service_name]["networks"]:
+ net_instantiation = service_instance.add_network(
+ network,
+ line_of_business,
+ platform,
+ network_instance_name=f"{self.service_instance_name}_net_{idx}",
+ subnets=self.get_subnets(network.name))
+ while not net_instantiation.finished:
+ time.sleep(10)
+ if net_instantiation.failed:
+ raise onap_test_exceptions.NetworkInstantiateException
+
+ def cleanup(self) -> None:
+ """Cleanup VL.
+
+ Raises:
+ Exception: VL cleaning failed
+ """
+ if settings.CLEANUP_FLAG:
+ for net_instance in self._service_instance.network_instances:
+ self._logger.info("Start network deletion %s",net_instance.name)
+ net_deletion = net_instance.delete()
+ try:
+ net_deletion.wait_for_finish()
+ except TimeoutError:
+ raise onap_test_exceptions.NetworkCleanupException
+ super().cleanup()