X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=inline;f=common%2Fpython%2Frift%2Fmano%2Fyang_translator%2Frwmano%2Fyang%2Fyang_vnfd.py;h=84fdf22e1412955f03e06b443095602bdd2bf549;hb=f314b4af9744068a7ed7a6a6314220c3aa857523;hp=1094c14194e2072f6c08a6ea0ae9d15c0d1b57fc;hpb=93f10aabdba5a1c745d002654c0bb6345a682a47;p=osm%2FSO.git diff --git a/common/python/rift/mano/yang_translator/rwmano/yang/yang_vnfd.py b/common/python/rift/mano/yang_translator/rwmano/yang/yang_vnfd.py index 1094c141..84fdf22e 100644 --- a/common/python/rift/mano/yang_translator/rwmano/yang/yang_vnfd.py +++ b/common/python/rift/mano/yang_translator/rwmano/yang/yang_vnfd.py @@ -35,6 +35,15 @@ class YangVnfd(ToscaResource): ('mgmt_interface', 'http_endpoint', 'monitoring_param') vnf_prefix_type = 'tosca.nodes.nfv.riftio.' + VALUE_TYPE_CONVERSION_MAP = { + 'INTEGER' : 'integer', + 'INT' : 'integer', + 'STRING' : 'string', + 'DECIMAL' : 'float', + 'INTEGER': 'INTEGER', + 'DECIMAL' : 'float' + + } def __init__(self, log, @@ -56,6 +65,7 @@ class YangVnfd(ToscaResource): self.vnf_type = None self.tosca = None self.script_files = [] + self.service_function_type = None def handle_yang(self): self.log.debug(_("Process VNFD desc {0}: {1}").format(self.name, @@ -99,7 +109,7 @@ class YangVnfd(ToscaResource): for parameter in init_conf_prim['parameter']: init_conf['parameter'].append({parameter['name']: parameter['value']}) init_config_prims.append(init_conf) - vnf_conf['initial_config_primitive'] = init_config_prims + vnf_conf['initial_config'] = init_config_prims self.vnf_configuration = vnf_conf @@ -167,6 +177,9 @@ class YangVnfd(ToscaResource): mon_param['url_path'] = param['http_endpoint_ref'] if 'json_query_method' in param: mon_param['json_query_method'] = param['json_query_method'].lower() + #if 'value_type' in param: + # mon_param['constraints'] = {} + # mon_param['constraints']['value_type'] = YangVnfd.VALUE_TYPE_CONVERSION_MAP[param['value_type'].upper()] if 'group_tag' in param: ui_param['group_tag'] = param['group_tag'] if 'widget_type' in param: @@ -197,6 +210,9 @@ class YangVnfd(ToscaResource): "connection-point {1}: {2}"). format(self, name, cp_dic)) + def process_service_type(dic): + self.service_function_type = dic['service_function_type'] + ENDPOINTS_MAP = { self.MGMT_INTF: process_mgmt_intf, self.HTTP_EP: process_http_ep, @@ -206,7 +222,8 @@ class YangVnfd(ToscaResource): dic = deepcopy(self.yang) try: for key in self.REQUIRED_FIELDS: - self.props[key] = dic.pop(key) + if key in dic: + self.props[key] = dic.pop(key) self.id = self.props[self.ID] @@ -224,6 +241,9 @@ class YangVnfd(ToscaResource): if self.VNF_CONFIG in dic: process_vnf_config(dic.pop(self.VNF_CONFIG)) + if 'service_function_type' in dic: + process_service_type(dic) + self.remove_ignored_fields(dic) if len(dic): self.log.warn(_("{0}, Did not process the following for " @@ -243,7 +263,8 @@ class YangVnfd(ToscaResource): vdu.set_vld(cp_name, vld_name) break def _generate_vnf_type(self, tosca): - name = self.name.split('_', 1)[0] + name = self.name.replace("_","") + name = name.split('_', 1)[0] self.vnf_type = "{0}{1}{2}".format(self.vnf_prefix_type, name, 'VNF') if self.NODE_TYPES not in tosca and self.vnf_type: tosca[self.NODE_TYPES] = {} @@ -284,11 +305,13 @@ class YangVnfd(ToscaResource): mon_param = {} mon_param['properties'] = self.mon_param[0] tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][vdu.get_name(self.name)][self.CAPABILITIES]['monitoring_param'] = mon_param #TEST - if len(self.mon_param) == 2: - mon_param = {} - mon_param = {} - mon_param['properties'] = self.mon_param[1] - tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][vdu.get_name(self.name)][self.CAPABILITIES]['monitoring_param_1'] = mon_param + if len(self.mon_param) > 1: + for idx in range(1, len(self.mon_param)): + monitor_param_name = "monitoring_param_{}".format(idx) + mon_param = {} + mon_param = {} + mon_param['properties'] = self.mon_param[idx] + tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][vdu.get_name(self.name)][self.CAPABILITIES][monitor_param_name] = mon_param node = {} node[self.TYPE] = self.T_VNF1 @@ -355,14 +378,39 @@ class YangVnfd(ToscaResource): for vdu in self.vdus: if conn_point in vdu.cp_name_to_cp_node: conn_point_node_name = vdu.cp_name_to_cp_node[conn_point] - self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.REQUIREMENTS].\ - append({virtualLink : "[{0}, {1}]".format(conn_point_node_name, "virtualLink")}) + if {virtualLink : "[{0}, {1}]".format(conn_point_node_name, "virtualLink")} not in \ + self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.REQUIREMENTS]: + self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.REQUIREMENTS].\ + append({virtualLink : "[{0}, {1}]".format(conn_point_node_name, "virtualLink")}) if self.REQUIREMENTS not in self.tosca[self.NODE_TYPES][self.vnf_type]: self.tosca[self.NODE_TYPES][self.vnf_type][self.REQUIREMENTS] = [] - self.tosca[self.NODE_TYPES][self.vnf_type][self.REQUIREMENTS].append({virtualLink : { - "type": "tosca.nodes.nfv.VL"}}) + if {virtualLink : {"type": "tosca.nodes.nfv.VL"}} not in self.tosca[self.NODE_TYPES][self.vnf_type][self.REQUIREMENTS]: + self.tosca[self.NODE_TYPES][self.vnf_type][self.REQUIREMENTS].append({virtualLink : { + "type": "tosca.nodes.nfv.VL"}}) + + def generate_forwarder_sub_mapping(self, sub_link): + if self.CAPABILITIES not in self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING]: + self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.CAPABILITIES] = {} + self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.CAPABILITIES] + self.tosca[self.TOPOLOGY_TMPL][self.SUBSTITUTION_MAPPING][self.CAPABILITIES][sub_link[1]] = \ + "[{}, forwarder]".format(sub_link[2]) + + def generate_sfc_link(self, sfs_conn_point_name): + for vdu in self.vdus: + if sfs_conn_point_name in vdu.cp_name_to_cp_node: + conn_point_node_name = vdu.cp_name_to_cp_node[sfs_conn_point_name] + if conn_point_node_name in self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL]: + if self.CAPABILITIES not in self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL]: + self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][conn_point_node_name][self.CAPABILITIES] = {} + self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][conn_point_node_name][self.CAPABILITIES]['sfc'] = {self.PROPERTIES: {}} + self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][conn_point_node_name] \ + [self.CAPABILITIES]['sfc'][self.PROPERTIES]['sfc_type'] = 'sf' + + if self.service_function_type: + self.tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][conn_point_node_name] \ + [self.CAPABILITIES]['sfc'][self.PROPERTIES]['sf_type'] = self.service_function_type def generate_tosca(self): tosca = {}