X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=common%2Fpython%2Frift%2Fmano%2Fyang_translator%2Frwmano%2Fyang%2Fyang_vld.py;fp=common%2Fpython%2Frift%2Fmano%2Fyang_translator%2Frwmano%2Fyang%2Fyang_vld.py;h=eb47dafb37fc7a668dc542ca6b75734bf70717d9;hb=6f07e6f33f751ab4ffe624f6037f887b243bece2;hp=0000000000000000000000000000000000000000;hpb=72a563886272088feb7cb52e4aafbe6d2c580ff9;p=osm%2FSO.git diff --git a/common/python/rift/mano/yang_translator/rwmano/yang/yang_vld.py b/common/python/rift/mano/yang_translator/rwmano/yang/yang_vld.py new file mode 100644 index 00000000..eb47dafb --- /dev/null +++ b/common/python/rift/mano/yang_translator/rwmano/yang/yang_vld.py @@ -0,0 +1,127 @@ +# Copyright 2016 RIFT.io Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from copy import deepcopy + +from rift.mano.yang_translator.common.exception import ValidationError +from rift.mano.yang_translator.common.utils import _ +from rift.mano.yang_translator.rwmano.syntax.tosca_resource \ + import ToscaResource + +TARGET_CLASS_NAME = 'YangVld' + + +class YangVld(ToscaResource): + '''Class for RIFT.io YANG VLD descriptor translation to TOSCA type.''' + + yangtype = 'vld' + + OTHER_KEYS = (VNFD_CP_REF) = \ + ('vnfd_connection_point_ref') + + VLD_TYPE_MAP = { + 'ELAN': ToscaResource.T_VL1, + } + + def __init__(self, + log, + name, + type_, + yang): + super(YangVld, self).__init__(log, + name, + type_, + yang) + self.yang = yang + self.props = {} + + def process_vld(self, vnfds): + self.log.debug(_("Process VLD desc {0}").format(self.name)) + + dic = deepcopy(self.yang) + + for key in self.REQUIRED_FIELDS: + self.props[key] = dic.pop(key) + + self.id = self.props[self.ID] + + if self.TYPE_Y in dic: + self.props[self.TYPE] = dic.pop(self.TYPE_Y) + if self.props[self.TYPE] not in self.VLD_TYPE_MAP: + err_msg = (_("{0}: VLD type {1} not supported"). + format(self, self.props[self.TYPE])) + self.log.error(err_msg) + raise ValidationError(message=err_msg) + + if self.VNFD_CP_REF in dic: + for cp_ref in dic.pop(self.VNFD_CP_REF): + vnfd_idx = cp_ref.pop(self.MEM_VNF_INDEX_REF) + vnfd_id = cp_ref.pop(self.VNFD_ID_REF) + vnfd_cp = cp_ref.pop(self.VNFD_CP_REF) + if vnfd_idx in vnfds: + vnfd = vnfds[vnfd_idx] + if vnfd.id == vnfd_id: + # Update the CP as linked to this VLD + vnfd.update_cp_vld(vnfd_cp, self.name) + else: + err_msg = (_("{0}, The VNFD memebr index {1} and id " + "{2} did not match the VNFD {3} with " + "id {4}").format(self, vnfd_idx, vnfd_id, + vnfd.name, vnfd.id)) + self.log.error(err_msg) + raise ValidationError(message=err_msg) + else: + err_msg = (_("{0}, Did not find VNFD memer index {1}"). + format(self, vnfd_idx)) + self.log.error(err_msg) + raise ValidationError(message=err_msg) + + self.remove_ignored_fields(dic) + if len(dic): + self.log.warn(_("{0}, Did not process the following for " + "VLD {1}: {2}"). + format(self, self.props, dic)) + self.log.debug(_("{0}, VLD: {1}").format(self, self.props)) + + def generate_tosca_type(self, tosca): + self.log.debug(_("{0} Generate tosa types"). + format(self, tosca)) + + if self.T_VL1 not in tosca[self.NODE_TYPES]: + tosca[self.NODE_TYPES][self.T_VL1] = { + self.DERIVED_FROM: 'tosca.nodes.nfv.VL.ELAN', + self.PROPERTIES: { + 'description': + {self.TYPE: self.STRING}, + }, + } + + return tosca + + def generate_tosca_template(self, tosca): + self.log.debug(_("{0} Generate tosa types"). + format(self, tosca)) + + node = {} + node[self.TYPE] = self.VLD_TYPE_MAP[self.props.pop(self.TYPE)] + + # Remove + self.props.pop(self.ID) + self.props.pop(self.VERSION) + node[self.PROPERTIES] = self.props + + tosca[self.TOPOLOGY_TMPL][self.NODE_TMPL][self.name] = node + + return tosca