tacker/tacker/objects/vnf_instantiated_info.py

1102 lines
41 KiB
Python

# Copyright (C) 2020 NTT DATA
# All Rights Reserved.
#
# 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 oslo_log import log as logging
from tacker.common import exceptions
from tacker.common import utils
from tacker.db import api as db_api
from tacker.db.db_sqlalchemy import api
from tacker.db.db_sqlalchemy import models
from tacker.objects import base
from tacker.objects import fields
LOG = logging.getLogger(__name__)
@db_api.context_manager.writer
def _instantiate_vnf_info_update(context, vnf_instance_id, values):
vnf_info = api.model_query(context, models.VnfInstantiatedInfo). \
filter_by(vnf_instance_id=vnf_instance_id).first()
needs_create = False
if vnf_info and vnf_info['deleted']:
raise exceptions.VnfInstantiatedInfoNotFound(
vnf_instance_id=vnf_instance_id)
elif not vnf_info:
values['vnf_instance_id'] = vnf_instance_id
vnf_info = models.VnfInstantiatedInfo(**values)
needs_create = True
if needs_create:
vnf_info.save(session=context.session)
else:
vnf_info.update(values)
vnf_info.save(session=context.session)
return vnf_info
@base.TackerObjectRegistry.register
class InstantiatedVnfInfo(base.TackerObject, base.TackerObjectDictCompat,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'flavour_id': fields.StringField(nullable=False),
'vnf_instance_id': fields.UUIDField(nullable=False),
'ext_cp_info': fields.ListOfObjectsField(
'VnfExtCpInfo', nullable=False),
'ext_virtual_link_info': fields.ListOfObjectsField(
'ExtVirtualLinkInfo', nullable=True, default=[]),
'ext_managed_virtual_link_info': fields.ListOfObjectsField(
'ExtManagedVirtualLinkInfo', nullable=True, default=[]),
'vnfc_resource_info': fields.ListOfObjectsField(
'VnfcResourceInfo', nullable=True, default=[]),
'vnf_virtual_link_resource_info': fields.ListOfObjectsField(
'VnfVirtualLinkResourceInfo', nullable=True, default=[]),
'virtual_storage_resource_info': fields.ListOfObjectsField(
'VirtualStorageResourceInfo', nullable=True, default=[]),
'vnfc_info': fields.ListOfObjectsField(
'VnfcInfo', nullable=True, default=[]),
'vnf_state': fields.VnfOperationalStateTypeField(nullable=False,
default=fields.VnfOperationalStateType.STOPPED),
'instance_id': fields.StringField(nullable=True, default=None),
'instantiation_level_id': fields.StringField(nullable=True,
default=None),
'additional_params': fields.DictOfStringsField(nullable=True,
default={})
}
ALL_ATTRIBUTES = {
'instantiatedInfo': {
'flavourId': ('id', 'string', 'VnfInstantiatedInfo'),
'vnfInstanceId':
('vnf_instance_id', 'string', 'VnfInstantiatedInfo'),
'vnfState': ('vnf_state', 'string', 'VnfInstantiatedInfo'),
'instanceId': ('instance_id', 'string', 'VnfInstantiatedInfo'),
'instantiationLevelId':
('instantiation_level_id', 'string', 'VnfInstantiatedInfo'),
'extCpInfo/*': ('ext_cp_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'extVirtualLinkInfo/*': ('ext_virtual_link_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'extManagedVirtualLinkInfo/*': (
'ext_managed_virtual_link_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'vnfcResourceInfo/*': (
'vnfc_resource_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'vnfVirtualLinkResourceInfo/*': (
'vnf_virtual_link_resource_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'virtualStorageResourceInfo/*': (
'virtual_storage_resource_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'additionalParams/*': (
'additional_params', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
'vnfcInfo/*': (
'vnfc_info', 'key_value_pair',
{"key_column": "key", "value_column": "value",
"model": "VnfInstantiatedInfo"}),
}
}
FLATTEN_ATTRIBUTES = utils.flatten_dict(ALL_ATTRIBUTES.copy())
@staticmethod
def _from_db_object(context, inst_vnf_info, db_inst_vnf_info):
special_fields = ['ext_cp_info', 'ext_virtual_link_info',
'ext_managed_virtual_link_info',
'vnfc_resource_info',
'vnf_virtual_link_resource_info',
'virtual_storage_resource_info',
'vnfc_info']
for key in inst_vnf_info.fields:
if key in special_fields:
continue
setattr(inst_vnf_info, key, db_inst_vnf_info.get(key))
ext_cp_info = db_inst_vnf_info['ext_cp_info']
ext_cp_info_list = [VnfExtCpInfo.obj_from_primitive(ext_cp, context)
for ext_cp in ext_cp_info]
inst_vnf_info.ext_cp_info = ext_cp_info_list
vnfc_resource_info = db_inst_vnf_info['vnfc_resource_info']
vnfc_resource_info_list = [VnfcResourceInfo.obj_from_primitive(
vnfc_resource, context) for vnfc_resource in vnfc_resource_info]
inst_vnf_info.vnfc_resource_info = vnfc_resource_info_list
storage_res_info = db_inst_vnf_info['virtual_storage_resource_info']
storage_res_info_list = [VirtualStorageResourceInfo.
obj_from_primitive(storage_resource, context)
for storage_resource in storage_res_info]
inst_vnf_info.virtual_storage_resource_info = storage_res_info_list
ext_virtual_link_info = db_inst_vnf_info['ext_virtual_link_info']
ext_vl_info_list = [ExtVirtualLinkInfo.obj_from_primitive(
ext_vl_info, context) for ext_vl_info in ext_virtual_link_info]
inst_vnf_info.ext_virtual_link_info = ext_vl_info_list
ext_mng_vl_info = db_inst_vnf_info['ext_managed_virtual_link_info']
ext_managed_vl_info_list = [ExtManagedVirtualLinkInfo.
obj_from_primitive(ext_managed_vl_info, context) for
ext_managed_vl_info in ext_mng_vl_info]
inst_vnf_info.ext_managed_virtual_link_info = ext_managed_vl_info_list
vnf_vl_resource_info = db_inst_vnf_info[
'vnf_virtual_link_resource_info']
vnf_vl_info_list = [VnfVirtualLinkResourceInfo.
obj_from_primitive(vnf_vl_info, context) for vnf_vl_info in
vnf_vl_resource_info]
inst_vnf_info.vnf_virtual_link_resource_info = vnf_vl_info_list
vnfc_info = db_inst_vnf_info[
'vnfc_info']
vnfc_info_list = [VnfcInfo.
obj_from_primitive(vnfc, context) for vnfc in
vnfc_info]
inst_vnf_info.vnfc_info = vnfc_info_list
inst_vnf_info._context = context
inst_vnf_info.obj_reset_changes()
return inst_vnf_info
@base.remotable
def save(self):
updates = {}
changes = self.obj_what_changed()
for field in self.fields:
if (self.obj_attr_is_set(field) and
isinstance(self.fields[field], fields.ListOfObjectsField)):
field_list = getattr(self, field)
updates[field] = [obj.obj_to_primitive() for obj in field_list]
elif field in changes:
updates[field] = self[field]
vnf_info = _instantiate_vnf_info_update(self._context,
self.vnf_instance_id,
updates)
self._from_db_object(self._context, self, vnf_info)
self.obj_reset_changes()
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
instantiate_vnf_info = super(
InstantiatedVnfInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'ext_cp_info' in primitive.keys():
obj_data = [VnfExtCpInfo.obj_from_primitive(
vnf_ext_cp, context) for vnf_ext_cp in primitive.get(
'ext_cp_info', [])]
primitive.update({'ext_cp_info': obj_data})
if 'ext_virtual_link_info' in primitive.keys():
obj_data = [ExtVirtualLinkInfo.obj_from_primitive(
ext_virtual_link,
context) for ext_virtual_link in primitive.get(
'ext_virtual_link_info', [])]
primitive.update({'ext_virtual_link_info': obj_data})
if 'ext_managed_virtual_link_info' in primitive.keys():
obj_data = [ExtManagedVirtualLinkInfo.obj_from_primitive(
ext_managed_v_link,
context) for ext_managed_v_link in primitive.get(
'ext_managed_virtual_link_info', [])]
primitive.update({'ext_managed_virtual_link_info': obj_data})
if 'vnfc_resource_info' in primitive.keys():
obj_data = [VnfcResourceInfo.obj_from_primitive(
vnf_resource_info,
context) for vnf_resource_info in primitive.get(
'vnfc_resource_info', [])]
primitive.update({'vnfc_resource_info': obj_data})
if 'vnf_virtual_link_resource_info' in primitive.keys():
obj_data = [VnfVirtualLinkResourceInfo.obj_from_primitive(
vnf_v_link_resource,
context) for vnf_v_link_resource in primitive.get(
'vnf_virtual_link_resource_info', [])]
primitive.update({'vnf_virtual_link_resource_info': obj_data})
if 'virtual_storage_resource_info' in primitive.keys():
obj_data = [VirtualStorageResourceInfo.obj_from_primitive(
virtual_storage_info,
context) for virtual_storage_info in primitive.get(
'virtual_storage_resource_info', [])]
primitive.update({'virtual_storage_resource_info': obj_data})
if 'vnfc_info' in primitive.keys():
obj_data = [VnfcInfo.obj_from_primitive(
vnfc_info, context) for vnfc_info in primitive.get(
'vnfc_info', [])]
primitive.update({'vnfc_info': obj_data})
instantiate_vnf_info = \
InstantiatedVnfInfo._from_dict(primitive)
return instantiate_vnf_info
@classmethod
def obj_from_db_obj(cls, context, db_obj):
return cls._from_db_object(context, cls(), db_obj)
@classmethod
def _from_dict(cls, data_dict):
flavour_id = data_dict.get('flavour_id')
ext_cp_info = data_dict.get('ext_cp_info', [])
ext_virtual_link_info = data_dict.get('ext_virtual_link_info', [])
ext_managed_virtual_link_info = data_dict.get(
'ext_managed_virtual_link_info', [])
vnfc_resource_info = data_dict.get('vnfc_resource_info', [])
vnf_virtual_link_resource_info = data_dict.get(
'vnf_virtual_link_resource_info', [])
virtual_storage_resource_info = data_dict.get(
'virtual_storage_resource_info', [])
vnf_state = data_dict.get('vnf_state')
instantiation_level_id = data_dict.get('instantiation_level_id')
additional_params = data_dict.get('additional_params', {})
vnfc_info = data_dict.get('vnfc_info', [])
obj = cls(flavour_id=flavour_id, ext_cp_info=ext_cp_info,
ext_virtual_link_info=ext_virtual_link_info,
ext_managed_virtual_link_info=ext_managed_virtual_link_info,
vnfc_resource_info=vnfc_resource_info,
vnf_virtual_link_resource_info=vnf_virtual_link_resource_info,
virtual_storage_resource_info=virtual_storage_resource_info,
vnfc_info=vnfc_info,
vnf_state=vnf_state,
instantiation_level_id=instantiation_level_id,
additional_params=additional_params)
return obj
def to_dict(self):
data = {'flavour_id': self.flavour_id,
'vnf_state': self.vnf_state}
ext_cp_info_list = []
for ext_cp_info in self.ext_cp_info:
ext_cp_info_list.append(ext_cp_info.to_dict())
data.update({'ext_cp_info': ext_cp_info_list})
if self.ext_virtual_link_info:
exp_virt_link_info_list = []
for exp_virt_link_info in self.ext_virtual_link_info:
exp_virt_link_info_list.append(exp_virt_link_info.to_dict())
data.update({'ext_virtual_link_info': exp_virt_link_info_list})
if self.ext_managed_virtual_link_info:
ext_managed_virt_info_list = []
for exp_managed_virt_link_info in \
self.ext_managed_virtual_link_info:
info = exp_managed_virt_link_info.to_dict()
ext_managed_virt_info_list.append(info)
data.update({'ext_managed_virtual_link_info':
ext_managed_virt_info_list})
if self.vnfc_resource_info:
vnfc_resource_info_list = []
for vnfc_resource_info in self.vnfc_resource_info:
vnfc_resource_info_list.append(vnfc_resource_info.to_dict())
data.update({'vnfc_resource_info': vnfc_resource_info_list})
if self.vnf_virtual_link_resource_info:
virt_link_info = []
for vnf_virtual_link_resource_info in \
self.vnf_virtual_link_resource_info:
info = vnf_virtual_link_resource_info.to_dict()
virt_link_info.append(info)
data.update({'vnf_virtual_link_resource_info': virt_link_info})
if self.virtual_storage_resource_info:
virtual_storage_resource_info_list = []
for virtual_storage_resource_info in \
self.virtual_storage_resource_info:
info = virtual_storage_resource_info.to_dict()
virtual_storage_resource_info_list.append(info)
data.update({'virtual_storage_resource_info':
virtual_storage_resource_info_list})
if self.vnfc_info:
vnfc_info = []
for vnfc in self.vnfc_info:
info = vnfc.to_dict()
vnfc_info.append(info)
data.update({'vnfc_info': vnfc_info})
data.update({'additional_params':
self.additional_params})
return data
def reinitialize(self):
# Reinitialize vnf to non instantiated state.
self.ext_cp_info = []
self.ext_virtual_link_info = []
self.ext_managed_virtual_link_info = []
self.vnfc_resource_info = []
self.vnf_virtual_link_resource_info = []
self.virtual_storage_resource_info = []
self.instance_id = None
self.vnf_state = fields.VnfOperationalStateType.STOPPED
self.vnfc_info = []
@base.TackerObjectRegistry.register
class VnfExtCpInfo(base.TackerObject, base.TackerObjectDictCompat,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'cpd_id': fields.StringField(nullable=False),
'cp_protocol_info': fields.ListOfObjectsField(
'CpProtocolInfo', nullable=False, default=[]),
'ext_link_port_id': fields.StringField(nullable=True, default=None),
'associated_vnfc_cp_id': fields.StringField(nullable=False)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_ext_cp_info = super(
VnfExtCpInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'cp_protocol_info' in primitive.keys():
obj_data = [CpProtocolInfo.obj_from_primitive(
ext_cp, context) for ext_cp in primitive.get(
'cp_protocol_info', [])]
primitive.update({'cp_protocol_info': obj_data})
obj_ext_cp_info = VnfExtCpInfo._from_dict(primitive)
return obj_ext_cp_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
cpd_id = data_dict.get('cpd_id')
cp_protocol_info = data_dict.get('cp_protocol_info', [])
ext_link_port_id = data_dict.get('ext_link_port_id')
associated_vnfc_cp_id = data_dict.get('associated_vnfc_cp_id')
obj = cls(id=id, cpd_id=cpd_id,
cp_protocol_info=cp_protocol_info,
ext_link_port_id=ext_link_port_id,
associated_vnfc_cp_id=associated_vnfc_cp_id)
return obj
def to_dict(self):
data = {'id': self.id,
'cpd_id': self.cpd_id,
'ext_link_port_id': self.ext_link_port_id,
'associated_vnfc_cp_id': self.associated_vnfc_cp_id}
cp_protocol_info_list = []
for cp_protocol_info in self.cp_protocol_info:
cp_protocol_info_list.append(cp_protocol_info.to_dict())
data.update({'cp_protocol_info': cp_protocol_info_list})
return data
@base.TackerObjectRegistry.register
class CpProtocolInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'layer_protocol': fields.StringField(nullable=False),
'ip_over_ethernet': fields.ObjectField(
'IpOverEthernetAddressInfo', nullable=True, default=None),
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_cp_protocol = super(CpProtocolInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'ip_over_ethernet' in primitive.keys():
obj_data = IpOverEthernetAddressInfo.obj_from_primitive(
primitive.get('ip_over_ethernet', {}), context)
primitive.update({'ip_over_ethernet': obj_data})
obj_cp_protocol = CpProtocolInfo._from_dict(primitive)
return obj_cp_protocol
@classmethod
def _from_dict(cls, data_dict):
layer_protocol = data_dict.get('layer_protocol')
ip_over_ethernet = data_dict.get('ip_over_ethernet')
obj = cls(layer_protocol=layer_protocol,
ip_over_ethernet=ip_over_ethernet)
return obj
def to_dict(self):
data = {'layer_protocol': self.layer_protocol}
if self.ip_over_ethernet:
data.update({'ip_over_ethernet': self.ip_over_ethernet.to_dict()})
return data
@base.TackerObjectRegistry.register
class IpOverEthernetAddressInfo(base.TackerObject,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'mac_address': fields.StringField(nullable=True, default=None),
'ip_addresses': fields.ListOfObjectsField('IpAddress', nullable=True,
default=[]),
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
ip_over_ethernet = super(
IpOverEthernetAddressInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'ip_addresses' in primitive.keys():
obj_data = [IpAddress._from_dict(
ip_address) for ip_address in primitive.get(
'ip_addresses', [])]
primitive.update({'ip_addresses': obj_data})
ip_over_ethernet = IpOverEthernetAddressInfo._from_dict(primitive)
return ip_over_ethernet
@classmethod
def _from_dict(cls, data_dict):
mac_address = data_dict.get('mac_address')
ip_addresses = data_dict.get('ip_addresses', [])
obj = cls(mac_address=mac_address, ip_addresses=ip_addresses)
return obj
def to_dict(self):
data = {'mac_address': self.mac_address}
if self.ip_addresses:
ip_addresses_list = []
for ip_addresses in self.ip_addresses:
ip_addresses_list.append(ip_addresses.to_dict())
data.update({'ip_addresses': ip_addresses_list})
return data
@base.TackerObjectRegistry.register
class IpAddress(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'type': fields.IpAddressTypeField(nullable=False),
'subnet_id': fields.StringField(nullable=True, default=None),
'is_dynamic': fields.BooleanField(nullable=True, default=False),
'addresses': fields.ListOfStringsField(nullable=True, default=[]),
}
@classmethod
def _from_dict(cls, data_dict):
type = data_dict.get('type', fields.IpAddressType.IPV4)
subnet_id = data_dict.get('subnet_id')
is_dynamic = data_dict.get('is_dynamic', False)
addresses = data_dict.get('addresses', [])
obj = cls(type=type, subnet_id=subnet_id, is_dynamic=is_dynamic,
addresses=addresses)
return obj
def to_dict(self):
return {'type': self.type,
'subnet_id': self.subnet_id,
'is_dynamic': self.is_dynamic,
'addresses': self.addresses}
@base.TackerObjectRegistry.register
class ExtVirtualLinkInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'resource_handle': fields.ObjectField(
'ResourceHandle', nullable=False),
'ext_link_ports': fields.ListOfObjectsField(
'ExtLinkPortInfo', nullable=True, default=[]),
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_ext_virt_link = super(
ExtVirtualLinkInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'resource_handle' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('resource_handle'))
primitive.update({'resource_handle': obj_data})
if 'ext_link_ports' in primitive.keys():
obj_data = [ExtLinkPortInfo.obj_from_primitive(
ext_link_port_info, context)
for ext_link_port_info in primitive.get(
'ext_link_ports', [])]
primitive.update({'ext_link_ports': obj_data})
obj_ext_virt_link = ExtVirtualLinkInfo._from_dict(primitive)
return obj_ext_virt_link
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id', '')
resource_handle = data_dict.get('resource_handle')
ext_link_ports = data_dict.get('ext_link_ports', [])
obj = cls(id=id, resource_handle=resource_handle,
ext_link_ports=ext_link_ports)
return obj
def to_dict(self):
data = {'id': self.id,
'resource_handle': self.resource_handle.to_dict()}
if self.ext_link_ports:
ext_link_ports = []
for ext_link_port in self.ext_link_ports:
ext_link_ports.append(ext_link_port.to_dict())
data.update({'ext_link_ports': ext_link_ports})
return data
@base.TackerObjectRegistry.register
class ExtLinkPortInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.UUIDField(nullable=False),
'resource_handle': fields.ObjectField(
'ResourceHandle', nullable=False),
'cp_instance_id': fields.StringField(nullable=True, default=None)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_link_port_info = super(
ExtLinkPortInfo, cls).obj_from_primitive(primitive, context)
else:
if 'resource_handle' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('resource_handle'))
primitive.update({'resource_handle': obj_data})
obj_link_port_info = ExtLinkPortInfo._from_dict(primitive)
return obj_link_port_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
resource_handle = data_dict.get('resource_handle')
cp_instance_id = data_dict.get('cp_instance_id')
obj = cls(id=id, resource_handle=resource_handle,
cp_instance_id=cp_instance_id)
return obj
def to_dict(self):
return {'id': self.id,
'resource_handle': self.resource_handle.to_dict(),
'cp_instance_id': self.cp_instance_id}
@base.TackerObjectRegistry.register
class ExtManagedVirtualLinkInfo(base.TackerObject,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'vnf_virtual_link_desc_id': fields.StringField(nullable=False),
'network_resource': fields.ObjectField(
'ResourceHandle', nullable=False),
'vnf_link_ports': fields.ListOfObjectsField(
'VnfLinkPortInfo', nullable=True, default=[]),
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_ext_managed_virt_link = super(
ExtManagedVirtualLinkInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'network_resource' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('network_resource'))
primitive.update({'network_resource': obj_data})
if 'vnf_link_ports' in primitive.keys():
obj_data = [VnfLinkPortInfo.obj_from_primitive(
vnf_link_port, context)
for vnf_link_port in primitive.get(
'vnf_link_ports', [])]
primitive.update({'vnf_link_ports': obj_data})
obj_ext_managed_virt_link = ExtManagedVirtualLinkInfo._from_dict(
primitive)
return obj_ext_managed_virt_link
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
vnf_virtual_link_desc_id = data_dict.get('vnf_virtual_link_desc_id')
network_resource = data_dict.get('network_resource')
vnf_link_ports = data_dict.get('vnf_link_ports', [])
obj = cls(id=id, vnf_virtual_link_desc_id=vnf_virtual_link_desc_id,
network_resource=network_resource,
vnf_link_ports=vnf_link_ports)
return obj
def to_dict(self):
data = {'id': self.id,
'vnf_virtual_link_desc_id': self.vnf_virtual_link_desc_id,
'network_resource': self.network_resource.to_dict()}
if self.vnf_link_ports:
vnf_link_ports = []
for vnf_link_port in self.vnf_link_ports:
vnf_link_ports.append(vnf_link_port.to_dict())
data.update({'vnf_link_ports': vnf_link_ports})
return data
@base.TackerObjectRegistry.register
class VnfLinkPortInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'resource_handle': fields.ObjectField(
'ResourceHandle', nullable=False),
'cp_instance_id': fields.StringField(nullable=True, default=None)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
vnf_port_link_info = super(
VnfLinkPortInfo, cls).obj_from_primitive(primitive, context)
else:
if 'resource_handle' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('resource_handle'))
primitive.update({'resource_handle': obj_data})
vnf_port_link_info = VnfLinkPortInfo._from_dict(primitive)
return vnf_port_link_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
resource_handle = data_dict.get('resource_handle')
cp_instance_id = data_dict.get('cp_instance_id')
obj = cls(id=id, resource_handle=resource_handle,
cp_instance_id=cp_instance_id)
return obj
def to_dict(self):
return {'id': self.id,
'resource_handle': self.resource_handle.to_dict(),
'cp_instance_id': self.cp_instance_id}
@base.TackerObjectRegistry.register
class VnfcResourceInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'vdu_id': fields.StringField(nullable=False),
'compute_resource': fields.ObjectField(
'ResourceHandle', nullable=False),
'storage_resource_ids': fields.ListOfStringsField(nullable=True,
default=[]),
'vnfc_cp_info': fields.ListOfObjectsField(
'VnfcCpInfo', nullable=True, default=[]),
'metadata': fields.DictOfStringsField(nullable=True, default={})
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
vnfc_resource_info = super(
VnfcResourceInfo, cls).obj_from_primitive(primitive, context)
else:
if 'compute_resource' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('compute_resource'))
primitive.update({'compute_resource': obj_data})
if 'vnfc_cp_info' in primitive.keys():
obj_data = [VnfcCpInfo.obj_from_primitive(
vnfc_cp_info, context)
for vnfc_cp_info in primitive.get(
'vnfc_cp_info', [])]
primitive.update({'vnfc_cp_info': obj_data})
vnfc_resource_info = VnfcResourceInfo._from_dict(primitive)
return vnfc_resource_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
vdu_id = data_dict.get('vdu_id')
compute_resource = data_dict.get('compute_resource')
storage_resource_ids = data_dict.get('storage_resource_ids', [])
vnfc_cp_info = data_dict.get('vnfc_cp_info', [])
metadata = data_dict.get('metadata', {})
obj = cls(id=id, vdu_id=vdu_id,
compute_resource=compute_resource,
storage_resource_ids=storage_resource_ids,
vnfc_cp_info=vnfc_cp_info, metadata=metadata)
return obj
def to_dict(self):
data = {'id': self.id,
'vdu_id': self.vdu_id,
'compute_resource': self.compute_resource.to_dict(),
'storage_resource_ids': self.storage_resource_ids}
if self.vnfc_cp_info:
vnfc_cp_info_list = []
for vnfc_cp_info in self.vnfc_cp_info:
vnfc_cp_info_list.append(vnfc_cp_info.to_dict())
data.update({'vnfc_cp_info': vnfc_cp_info_list})
return data
@base.TackerObjectRegistry.register
class VnfcCpInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'cpd_id': fields.StringField(nullable=False),
'vnf_ext_cp_id': fields.StringField(nullable=True, default=None),
'cp_protocol_info': fields.ListOfObjectsField(
'CpProtocolInfo', nullable=True, default=[]),
'vnf_link_port_id': fields.StringField(nullable=True, default=None)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_vnfc_cp_info = super(VnfcCpInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'cp_protocol_info' in primitive.keys():
obj_data = [CpProtocolInfo.obj_from_primitive(
ext_cp, context) for ext_cp in primitive.get(
'cp_protocol_info', [])]
primitive.update({'cp_protocol_info': obj_data})
obj_vnfc_cp_info = VnfcCpInfo._from_dict(primitive)
return obj_vnfc_cp_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
cpd_id = data_dict.get('cpd_id')
vnf_ext_cp_id = data_dict.get('vnf_ext_cp_id')
cp_protocol_info = data_dict.get('cp_protocol_info', [])
vnf_link_port_id = data_dict.get('vnf_link_port_id')
obj = cls(id=id, cpd_id=cpd_id,
vnf_ext_cp_id=vnf_ext_cp_id,
cp_protocol_info=cp_protocol_info,
vnf_link_port_id=vnf_link_port_id)
return obj
def to_dict(self):
data = {'id': self.id,
'cpd_id': self.cpd_id,
'vnf_ext_cp_id': self.vnf_ext_cp_id,
'vnf_link_port_id': self.vnf_link_port_id}
if self.cp_protocol_info:
cp_protocol_info_list = []
for cp_protocol_info in self.cp_protocol_info:
cp_protocol_info_list.append(cp_protocol_info.to_dict())
data.update({'cp_protocol_info': cp_protocol_info_list})
return data
@base.TackerObjectRegistry.register
class VnfVirtualLinkResourceInfo(base.TackerObject,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'vnf_virtual_link_desc_id': fields.StringField(nullable=False),
'network_resource': fields.ObjectField(
'ResourceHandle', nullable=False),
'vnf_link_ports': fields.ListOfObjectsField(
'VnfLinkPortInfo', nullable=True, default=[])
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_vnf_virtual_link = super(
VnfVirtualLinkResourceInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'network_resource' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('network_resource'))
primitive.update({'network_resource': obj_data})
if 'vnf_link_ports' in primitive.keys():
obj_data = [VnfLinkPortInfo.obj_from_primitive(
vnf_link_port, context)
for vnf_link_port in primitive.get(
'vnf_link_ports', [])]
primitive.update({'vnf_link_ports': obj_data})
obj_vnf_virtual_link = VnfVirtualLinkResourceInfo._from_dict(
primitive)
return obj_vnf_virtual_link
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
vnf_virtual_link_desc_id = data_dict.get(
'vnf_virtual_link_desc_id')
network_resource = data_dict.get('network_resource')
vnf_link_ports = data_dict.get('vnf_link_ports', [])
obj = cls(id=id, vnf_virtual_link_desc_id=vnf_virtual_link_desc_id,
network_resource=network_resource,
vnf_link_ports=vnf_link_ports)
return obj
def to_dict(self):
data = {'id': self.id,
'vnf_virtual_link_desc_id': self.vnf_virtual_link_desc_id,
'network_resource': self.network_resource.to_dict()}
if self.vnf_link_ports:
vnf_link_ports = []
for vnf_link_port in self.vnf_link_ports:
vnf_link_ports.append(vnf_link_port.to_dict())
data['vnf_link_ports'] = vnf_link_ports
return data
@base.TackerObjectRegistry.register
class VirtualStorageResourceInfo(base.TackerObject,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'virtual_storage_desc_id': fields.StringField(nullable=False),
'storage_resource': fields.ObjectField(
'ResourceHandle', nullable=False)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_virtual_storage = super(
VirtualStorageResourceInfo, cls).obj_from_primitive(
primitive, context)
else:
if 'storage_resource' in primitive.keys():
obj_data = ResourceHandle._from_dict(
primitive.get('storage_resource'))
primitive.update({'storage_resource': obj_data})
obj_virtual_storage = VirtualStorageResourceInfo._from_dict(
primitive)
return obj_virtual_storage
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
virtual_storage_desc_id = data_dict.get('virtual_storage_desc_id')
storage_resource = data_dict.get('storage_resource')
obj = cls(id=id, virtual_storage_desc_id=virtual_storage_desc_id,
storage_resource=storage_resource)
return obj
def to_dict(self):
return {'id': self.id,
'virtual_storage_desc_id': self.virtual_storage_desc_id,
'storage_resource': self.storage_resource.to_dict()}
@base.TackerObjectRegistry.register
class VnfcInfo(base.TackerObject, base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'id': fields.StringField(nullable=False),
'vdu_id': fields.StringField(nullable=False),
'vnfc_state': fields.StringField(nullable=False)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
obj_vnfc_info = super(
VnfcInfo, cls).obj_from_primitive(
primitive, context)
else:
obj_vnfc_info = VnfcInfo._from_dict(
primitive)
return obj_vnfc_info
@classmethod
def _from_dict(cls, data_dict):
id = data_dict.get('id')
vdu_id = data_dict.get('vdu_id')
vnfc_state = data_dict.get('vnfc_state')
obj = cls(id=id, vdu_id=vdu_id,
vnfc_state=vnfc_state)
return obj
def to_dict(self):
return {'id': self.id,
'vdu_id': self.vdu_id,
'vnfc_state': self.vnfc_state}
@base.TackerObjectRegistry.register
class ResourceHandle(base.TackerObject,
base.TackerPersistentObject):
# Version 1.0: Initial version
VERSION = '1.0'
# TODO(esto-aln):Add vimConnectionId in Type:ResourceHandle
fields = {
'resource_id': fields.StringField(nullable=False, default=""),
'vim_level_resource_type': fields.StringField(nullable=True,
default=None)
}
@classmethod
def obj_from_primitive(cls, primitive, context):
if 'tacker_object.name' in primitive:
resource_handle = super(
ResourceHandle, cls).obj_from_primitive(
primitive, context)
else:
resource_handle = ResourceHandle._from_dict(primitive)
return resource_handle
@classmethod
def _from_dict(cls, data_dict):
resource_id = data_dict.get('resource_id', "")
vim_level_resource_type = data_dict.get('vim_level_resource_type')
obj = cls(resource_id=resource_id,
vim_level_resource_type=vim_level_resource_type)
return obj
def to_dict(self):
return {'resource_id': self.resource_id,
'vim_level_resource_type': self.vim_level_resource_type}