First proposal for the structure for pythonsdk based scenarios
[testsuite/pythonsdk-tests.git] / src / onaptests / steps / onboard / service.py
1 from yaml import load
2
3 from onapsdk.configuration import settings
4 from onapsdk.sdc.service import Service
5 from onapsdk.sdc.vf import Vf
6
7 from ..base import BaseStep, YamlTemplateBaseStep
8 from .vf import VfOnboardStep, YamlTemplateVfOnboardStep
9
10
11 class ServiceOnboardStep(BaseStep):
12     """Service onboard step."""
13
14     def __init__(self, cleanup=False):
15         """Initialize step.
16
17         Substeps:
18             - VfOnboardStep.
19         """
20         super().__init__(cleanup=cleanup)
21         self.add_step(VfOnboardStep(cleanup=cleanup))
22
23     def execute(self):
24         """Onboard service.
25
26         Use settings values:
27          - VF_NAME,
28          - SERVICE_NAME.
29
30         """
31         super().execute()
32         vf: Vf = Vf(name=settings.VF_NAME)
33         service: Service = Service(name=settings.SERVICE_NAME, resources=[vf])
34         service.onboard()
35
36
37 class YamlTemplateServiceOnboardStep(YamlTemplateBaseStep):
38     """Service onboard using YAML template step."""
39
40     def __init__(self, cleanup=False):
41         """Initialize step.
42
43         Substeps:
44             - YamlTemplateVfOnboardStep.
45         """
46         super().__init__(cleanup=cleanup)
47         self._yaml_template: dict = None
48         self.add_step(YamlTemplateVfOnboardStep(cleanup=cleanup))
49
50     @property
51     def yaml_template(self) -> dict:
52         """Step YAML template.
53
54         Load from file if it's a root step, get from parent otherwise.
55
56         Returns:
57             dict: Step YAML template
58
59         """
60         if self.is_root:
61             if not self._yaml_template:
62                 with open(settings.SERVICE_YAML_TEMPLATE, "r") as yaml_template:
63                     self._yaml_template: dict = load(yaml_template)
64             return self._yaml_template
65         return self.parent.yaml_template
66
67     @property
68     def service_name(self) -> str:
69         """Service name.
70
71         Get from YAML template if it's a root step, get from parent otherwise.
72
73         Returns:
74             str: Service name
75
76         """
77         if self.is_root:
78             return next(iter(self.yaml_template.keys()))
79         else:
80             return self.parent.service_name
81
82     def execute(self):
83         """Onboard service."""
84         super().execute()
85         service: Service = Service(name=self.service_name,
86                                    resources=[Vf(name=vnf["vnf_name"]) \
87                                                 for vnf in self.yaml_template[self.name]["vnfs"]])
88         service.onboard()