1 # -*- coding: utf-8 -*-
3 # Copyright 2020 Whitestack, LLC
4 # *************************************************************
6 # This file is part of OSM Monitoring module
7 # All Rights Reserved to Whitestack, LLC
9 # Licensed under the Apache License, Version 2.0 (the "License"); you may
10 # not use this file except in compliance with the License. You may obtain
11 # a copy of the License at
13 # http://www.apache.org/licenses/LICENSE-2.0
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18 # License for the specific language governing permissions and limitations
21 # For those usages not covered by the Apache License, Version 2.0 please
22 # contact: fbravo@whitestack.com
25 from osm_lcm
.data_utils
import list_utils
28 def get_vdu_list(vnfd
):
29 return vnfd
.get("vdu", ())
32 def get_kdu_list(vnfd
):
33 return vnfd
.get("kdu", ())
36 def get_kdu(vnfd
, kdu_name
):
37 return list_utils
.find_in_list(
38 get_kdu_list(vnfd
), lambda kdu
: kdu
["name"] == kdu_name
42 def get_kdu_services(kdu
):
43 return kdu
.get("service", [])
46 def get_ee_sorted_initial_config_primitive_list(
47 primitive_list
, vca_deployed
, ee_descriptor_id
50 Generates a list of initial-config-primitive based on the list provided by the descriptor. It includes internal
51 primitives as verify-ssh-credentials, or config when needed
52 :param primitive_list: information of the descriptor
53 :param vca_deployed: information of the deployed, needed for known if it is related to an NS, VNF, VDU and if
54 this element contains a ssh public key
55 :param ee_descriptor_id: execution environment descriptor id. It is the value of
56 XXX_configuration.execution-environment-list.INDEX.id; it can be None
57 :return: The modified list. Can ba an empty list, but always a list
59 primitive_list
= primitive_list
or []
62 for p
in primitive_list
63 if p
.get("execution-environment-ref", ee_descriptor_id
) == ee_descriptor_id
66 primitive_list
.sort(key
=lambda val
: int(val
["seq"]))
68 # look for primitive config, and get the position. None if not present
69 config_position
= None
70 for index
, primitive
in enumerate(primitive_list
):
71 if primitive
["name"] == "config":
72 config_position
= index
75 # for NS, add always a config primitive if not present (bug 874)
76 if not vca_deployed
["member-vnf-index"] and config_position
is None:
77 primitive_list
.insert(0, {"name": "config", "parameter": []})
79 # TODO revise if needed: for VNF/VDU add verify-ssh-credentials after config
81 vca_deployed
["member-vnf-index"]
82 and config_position
is not None
83 and vca_deployed
.get("ssh-public-key")
85 primitive_list
.insert(
86 config_position
+ 1, {"name": "verify-ssh-credentials", "parameter": []}
91 def get_ee_sorted_terminate_config_primitive_list(primitive_list
, ee_descriptor_id
):
92 primitive_list
= primitive_list
or []
95 for p
in primitive_list
96 if p
.get("execution-environment-ref", ee_descriptor_id
) == ee_descriptor_id
99 primitive_list
.sort(key
=lambda val
: int(val
["seq"]))
100 return primitive_list
103 def get_vdu_profile(vnfd
, vdu_profile_id
):
104 return list_utils
.find_in_list(
105 vnfd
.get("df", ())[0]["vdu-profile"],
106 lambda vdu_profile
: vdu_profile
["id"] == vdu_profile_id
,
110 def get_kdu_resource_profile(vnfd
, kdu_profile_id
):
111 return list_utils
.find_in_list(
112 vnfd
.get("df", ())[0]["kdu-resource-profile"],
113 lambda kdu_profile
: kdu_profile
["id"] == kdu_profile_id
,
117 def get_configuration(vnfd
, entity_id
):
118 lcm_ops_config
= vnfd
.get("df")[0].get("lcm-operations-configuration")
119 if not lcm_ops_config
:
121 ops_vnf
= lcm_ops_config
.get("operate-vnf-op-config")
124 day12ops
= ops_vnf
.get("day1-2", [])
125 return list_utils
.find_in_list(
126 day12ops
, lambda configuration
: configuration
["id"] == entity_id
130 def get_relation_list(vnfd
, entity_id
):
131 return (get_configuration(vnfd
, entity_id
) or {}).get("relation", [])
134 def get_virtual_link_profiles(vnfd
):
135 return vnfd
.get("df")[0].get("virtual-link-profile", ())
138 def get_vdu(vnfd
, vdu_id
):
139 return list_utils
.find_in_list(vnfd
.get("vdu", ()), lambda vdu
: vdu
["id"] == vdu_id
)
142 def get_vdu_index(vnfd
, vdu_id
):
143 target_vdu
= list_utils
.find_in_list(
144 vnfd
.get("vdu", ()), lambda vdu
: vdu
["id"] == vdu_id
147 return vnfd
.get("vdu", ()).index(target_vdu
)
152 def get_scaling_aspect(vnfd
):
153 return vnfd
.get("df", ())[0].get("scaling-aspect", ())
156 def get_number_of_instances(vnfd
, vdu_id
):
157 return list_utils
.find_in_list(
158 vnfd
.get("df", ())[0].get("instantiation-level", ())[0].get("vdu-level", ()),
159 lambda a_vdu
: a_vdu
["vdu-id"] == vdu_id
,
160 ).get("number-of-instances", 1)
163 def get_juju_ee_ref(vnfd
, entity_id
):
164 return list_utils
.find_in_list(
165 get_configuration(vnfd
, entity_id
).get("execution-environment-list", []),
166 lambda ee
: "juju" in ee
,
170 def find_software_version(vnfd
: dict) -> str:
171 """Find the sotware version in the VNFD descriptors
174 vnfd (dict): Descriptor as a dictionary
177 software-version (str)
180 default_sw_version
= "1.0"
185 if vnfd
.get("software-version"):
186 return vnfd
["software-version"]
189 return default_sw_version
192 def check_helm_ee_in_ns(db_vnfds
: list) -> bool:
193 for vnfd
in db_vnfds
:
194 descriptor_config
= get_configuration(vnfd
, vnfd
["id"])
196 descriptor_config
and "execution-environment-list" in descriptor_config
199 ee_list
= descriptor_config
.get("execution-environment-list", [])
200 if list_utils
.find_in_list(ee_list
, lambda ee_item
: "helm-chart" in ee_item
):