226 lines
9.4 KiB
Python
226 lines
9.4 KiB
Python
# Copyright (C) 2019 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_db.sqlalchemy import models
|
|
from oslo_utils import timeutils
|
|
import sqlalchemy as sa
|
|
from sqlalchemy import DateTime
|
|
from sqlalchemy import orm
|
|
|
|
from tacker.db import model_base
|
|
from tacker.db import models_v1
|
|
from tacker.db import types
|
|
|
|
|
|
class VnfPackageUserData(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin):
|
|
"""Contains all info about vnf packages UserDefinedData."""
|
|
|
|
__tablename__ = 'vnf_packages_user_data'
|
|
id = sa.Column(sa.Integer, nullable=False, primary_key=True)
|
|
package_uuid = sa.Column(sa.String(36),
|
|
sa.ForeignKey('vnf_packages.id'),
|
|
nullable=False)
|
|
key = sa.Column(sa.String(255), nullable=False)
|
|
value = sa.Column(sa.String(255), nullable=False)
|
|
|
|
|
|
class VnfSoftwareImageMetadata(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin):
|
|
"""Contains all info about vnf packages software image metadata."""
|
|
|
|
__tablename__ = 'vnf_software_image_metadata'
|
|
id = sa.Column(sa.Integer, nullable=False, primary_key=True)
|
|
image_uuid = sa.Column(sa.String(36),
|
|
sa.ForeignKey('vnf_software_images.id'),
|
|
nullable=False)
|
|
key = sa.Column(sa.String(255), nullable=False)
|
|
value = sa.Column(sa.String(255), nullable=False)
|
|
|
|
|
|
class VnfSoftwareImage(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasId):
|
|
"""Contains all info about vnf packages software images."""
|
|
|
|
__tablename__ = 'vnf_software_images'
|
|
software_image_id = sa.Column(sa.Integer, nullable=False)
|
|
flavour_uuid = sa.Column(sa.String(36), sa.ForeignKey(
|
|
'vnf_deployment_flavours.id'), nullable=False)
|
|
name = sa.Column(sa.String(255), nullable=True)
|
|
provider = sa.Column(sa.String(255), nullable=True)
|
|
version = sa.Column(sa.String(255), nullable=True)
|
|
algorithm = sa.Column(sa.String(64), nullable=True)
|
|
hash = sa.Column(sa.String(128), nullable=True)
|
|
container_format = sa.Column(sa.String(20), nullable=True)
|
|
disk_format = sa.Column(sa.String(20), nullable=True)
|
|
min_disk = sa.Column(sa.Integer, nullable=False)
|
|
min_ram = sa.Column(sa.Integer, nullable=False)
|
|
size = sa.Column(sa.BigInteger, nullable=False)
|
|
image_path = sa.Column(sa.Text, nullable=False)
|
|
|
|
_metadata = orm.relationship(
|
|
VnfSoftwareImageMetadata,
|
|
primaryjoin='and_(VnfSoftwareImage.id == '
|
|
'VnfSoftwareImageMetadata.image_uuid)')
|
|
|
|
@property
|
|
def metadetails(self):
|
|
return {m.key: m.value for m in self._metadata}
|
|
|
|
|
|
class VnfDeploymentFlavour(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasId):
|
|
"""Contains all info about vnf packages Deployment Flavours."""
|
|
|
|
__tablename__ = 'vnf_deployment_flavours'
|
|
package_uuid = sa.Column(sa.String(36),
|
|
sa.ForeignKey('vnf_packages.id'),
|
|
nullable=False)
|
|
flavour_id = sa.Column(sa.String(255), nullable=False)
|
|
flavour_description = sa.Column(sa.Text(), nullable=False)
|
|
instantiation_levels = sa.Column(sa.Text(), nullable=True)
|
|
|
|
software_images = orm.relationship(
|
|
VnfSoftwareImage, primaryjoin='and_(VnfDeploymentFlavour.id == '
|
|
'VnfSoftwareImage.flavour_uuid,'
|
|
'VnfSoftwareImage.deleted == 0)')
|
|
|
|
|
|
class VnfPackageVnfdSoftDeleteMixin(object):
|
|
deleted_at = sa.Column(DateTime)
|
|
deleted = sa.Column(sa.String(36), default='0')
|
|
|
|
def soft_delete(self, session):
|
|
"""Mark this object as deleted."""
|
|
self.deleted = self.id
|
|
self.deleted_at = timeutils.utcnow()
|
|
self.save(session=session)
|
|
|
|
|
|
class VnfPackageVnfd(model_base.BASE, VnfPackageVnfdSoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasId):
|
|
"""Contains all info about vnf packages VNFD."""
|
|
|
|
__tablename__ = 'vnf_package_vnfd'
|
|
__table_args__ = (
|
|
sa.schema.UniqueConstraint("vnfd_id", "deleted",
|
|
name="uniq_vnf_package_vnfd0vnfd_id0deleted"),
|
|
)
|
|
|
|
package_uuid = sa.Column(sa.String(36),
|
|
sa.ForeignKey('vnf_packages.id'),
|
|
nullable=False)
|
|
vnfd_id = sa.Column(types.Uuid, nullable=False)
|
|
vnf_provider = sa.Column(sa.String(255), nullable=False)
|
|
vnf_product_name = sa.Column(sa.String(255), nullable=False)
|
|
vnf_software_version = sa.Column(sa.String(255), nullable=False)
|
|
vnfd_version = sa.Column(sa.String(255), nullable=False)
|
|
|
|
|
|
class VnfPackage(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasTenant,
|
|
models_v1.HasId):
|
|
"""Contains all info about vnf packages."""
|
|
|
|
__tablename__ = 'vnf_packages'
|
|
onboarding_state = sa.Column(sa.String(255), nullable=False)
|
|
operational_state = sa.Column(sa.String(255), nullable=False)
|
|
usage_state = sa.Column(sa.String(255), nullable=False)
|
|
algorithm = sa.Column(sa.String(64), nullable=True)
|
|
hash = sa.Column(sa.String(128), nullable=True)
|
|
location_glance_store = sa.Column(sa.Text(), nullable=True)
|
|
size = sa.Column(sa.BigInteger, nullable=False, default=0)
|
|
|
|
_metadata = orm.relationship(
|
|
VnfPackageUserData,
|
|
primaryjoin='and_(VnfPackage.id == '
|
|
'VnfPackageUserData.package_uuid)')
|
|
|
|
vnf_deployment_flavours = orm.relationship(
|
|
VnfDeploymentFlavour,
|
|
primaryjoin='and_(VnfPackage.id == '
|
|
'VnfDeploymentFlavour.package_uuid,'
|
|
'VnfDeploymentFlavour.deleted == 0)')
|
|
|
|
vnfd = orm.relationship(
|
|
VnfPackageVnfd, uselist=False,
|
|
primaryjoin='and_(VnfPackage.id == '
|
|
'VnfPackageVnfd.package_uuid,'
|
|
'VnfPackageVnfd.deleted == 0)')
|
|
|
|
@property
|
|
def metadetails(self):
|
|
return {m.key: m.value for m in self._metadata}
|
|
|
|
|
|
class VnfInstance(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasId):
|
|
"""Represents a Vnf Instance."""
|
|
|
|
__tablename__ = 'vnf_instances'
|
|
vnf_instance_name = sa.Column(sa.String(255), nullable=True)
|
|
vnf_instance_description = sa.Column(sa.String(1024), nullable=True)
|
|
vnf_provider = sa.Column(sa.String(255), nullable=False)
|
|
vnf_product_name = sa.Column(sa.String(255), nullable=False)
|
|
vnf_software_version = sa.Column(sa.String(255), nullable=False)
|
|
vnfd_version = sa.Column(sa.String(255), nullable=False)
|
|
vnfd_id = sa.Column(types.Uuid, nullable=False)
|
|
instantiation_state = sa.Column(sa.String(255), nullable=False)
|
|
task_state = sa.Column(sa.String(255), nullable=True)
|
|
vim_connection_info = sa.Column(sa.JSON(), nullable=True)
|
|
tenant_id = sa.Column('tenant_id', sa.String(length=64), nullable=False)
|
|
|
|
|
|
class VnfInstantiatedInfo(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin):
|
|
"""Contain the details of VNF instance"""
|
|
|
|
__tablename__ = 'vnf_instantiated_info'
|
|
id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
|
|
vnf_instance_id = sa.Column(sa.String,
|
|
sa.ForeignKey('vnf_instances.id'),
|
|
nullable=False)
|
|
flavour_id = sa.Column(sa.String(255), nullable=False)
|
|
ext_cp_info = sa.Column(sa.JSON(), nullable=False)
|
|
ext_virtual_link_info = sa.Column(sa.JSON(), nullable=True)
|
|
ext_managed_virtual_link_info = sa.Column(sa.JSON(), nullable=True)
|
|
vnfc_resource_info = sa.Column(sa.JSON(), nullable=True)
|
|
vnf_virtual_link_resource_info = sa.Column(sa.JSON(), nullable=True)
|
|
virtual_storage_resource_info = sa.Column(sa.JSON(), nullable=True)
|
|
vnf_state = sa.Column(sa.String(255), nullable=False)
|
|
instance_id = sa.Column(sa.String(255), nullable=True)
|
|
instantiation_level_id = sa.Column(sa.String(255), nullable=True)
|
|
additional_params = sa.Column(sa.JSON(), nullable=True)
|
|
|
|
vnf_instance = orm.relationship(VnfInstance,
|
|
backref=orm.backref('instantiated_vnf_info', uselist=False),
|
|
foreign_keys=vnf_instance_id,
|
|
primaryjoin='and_(VnfInstantiatedInfo.vnf_instance_id == '
|
|
'VnfInstance.id, VnfInstantiatedInfo.deleted == 0)')
|
|
|
|
|
|
class VnfResource(model_base.BASE, models.SoftDeleteMixin,
|
|
models.TimestampMixin, models_v1.HasId):
|
|
"""Resources belongs to the VNF"""
|
|
|
|
__tablename__ = 'vnf_resources'
|
|
vnf_instance_id = sa.Column(sa.String(36),
|
|
sa.ForeignKey('vnf_instances.id'),
|
|
nullable=False)
|
|
resource_name = sa.Column(sa.String(255), nullable=True)
|
|
resource_type = sa.Column(sa.String(255), nullable=False)
|
|
resource_identifier = sa.Column(sa.String(255), nullable=False)
|
|
resource_status = sa.Column(sa.String(255), nullable=False)
|