Rename device db name into vnf name

Next patches will refactor plugin codes.

Change-Id: I7052bc7557998b087f8e32a5d6823feaa55d5e40
Partial-bug: #1589018
This commit is contained in:
gong yong sheng 2016-08-02 09:54:39 +08:00
parent 55bc0c33d4
commit 2ee4dd9d44
6 changed files with 151 additions and 88 deletions

View File

@ -0,0 +1,56 @@
# Copyright 2016 OpenStack Foundation
#
# 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.
#
"""rename device db tables
Revision ID: 22f5385a3d50
Revises: 22f5385a3d4f
Create Date: 2016-08-01 15:47:51.161749
"""
# revision identifiers, used by Alembic.
revision = '22f5385a3d50'
down_revision = '22f5385a3d4f'
from alembic import op
import sqlalchemy as sa
def upgrade(active_plugins=None, options=None):
# commands auto generated by Alembic - please adjust! #
op.rename_table('devicetemplates', 'vnfds')
op.rename_table('devicetemplateattributes', 'vnfdattributes')
op.rename_table('devices', 'vnfs')
op.rename_table('deviceattributes', 'vnfattributes')
op.alter_column('vnfdattributes', 'template_id',
new_column_name='vnfd_id',
existing_type=sa.String(length=36),
existing_nullable=False)
op.alter_column('servicetypes', 'template_id',
new_column_name='vnfd_id',
existing_type=sa.String(length=36),
existing_nullable=False)
op.alter_column('vnfs', 'template_id', new_column_name='vnfd_id',
existing_type=sa.String(length=36),
existing_nullable=False)
op.alter_column('vnfattributes', 'device_id', new_column_name='vnf_id',
existing_type=sa.String(length=36),
existing_nullable=False)
# end Alembic commands #
def downgrade(active_plugins=None, options=None):
pass

View File

@ -1 +1 @@
22f5385a3d4f 22f5385a3d50

View File

@ -131,7 +131,7 @@ class NfvoPluginDb(nfvo.NFVOPluginBase, db_base.CommonDbMixin):
def is_vim_still_in_use(self, context, vim_id): def is_vim_still_in_use(self, context, vim_id):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
devices_db = context.session.query(vm_db.Device).filter_by( devices_db = context.session.query(vm_db.VNF).filter_by(
vim_id=vim_id).first() vim_id=vim_id).first()
if devices_db is not None: if devices_db is not None:
raise nfvo.VimInUseException(vim_id=vim_id) raise nfvo.VimInUseException(vim_id=vim_id)

View File

@ -42,9 +42,10 @@ CREATE_STATES = (constants.PENDING_CREATE, constants.DEAD)
########################################################################### ###########################################################################
# db tables # db tables
class DeviceTemplate(model_base.BASE, models_v1.HasId, models_v1.HasTenant): class VNFD(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
"""Represents template to create hosting device.""" """Represents VNFD to create VNF."""
__tablename__ = 'vnfds'
# Descriptive name # Descriptive name
name = sa.Column(sa.String(255), nullable=False) name = sa.Column(sa.String(255), nullable=False)
description = sa.Column(sa.Text) description = sa.Column(sa.Text)
@ -61,7 +62,7 @@ class DeviceTemplate(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
mgmt_driver = sa.Column(sa.String(255)) mgmt_driver = sa.Column(sa.String(255))
# (key, value) pair to spin up # (key, value) pair to spin up
attributes = orm.relationship('DeviceTemplateAttribute', attributes = orm.relationship('VNFDAttribute',
backref='template') backref='template')
@ -71,32 +72,36 @@ class ServiceType(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
Since a device may provide many services, This is one-to-many Since a device may provide many services, This is one-to-many
relationship. relationship.
""" """
template_id = sa.Column(types.Uuid, sa.ForeignKey('devicetemplates.id'), vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfds.id'),
nullable=False) nullable=False)
service_type = sa.Column(sa.String(64), nullable=False) service_type = sa.Column(sa.String(64), nullable=False)
class DeviceTemplateAttribute(model_base.BASE, models_v1.HasId): class VNFDAttribute(model_base.BASE, models_v1.HasId):
"""Represents attributes necessary for spinning up VM in (key, value) pair """Represents attributes necessary for spinning up VM in (key, value) pair
key value pair is adopted for being agnostic to actuall manager of VMs key value pair is adopted for being agnostic to actuall manager of VMs
like nova, heat or others. e.g. image-id, flavor-id for Nova. like nova, heat or others. e.g. image-id, flavor-id for Nova.
The interpretation is up to actual driver of hosting device. The interpretation is up to actual driver of hosting device.
""" """
template_id = sa.Column(types.Uuid, sa.ForeignKey('devicetemplates.id'),
__tablename__ = 'vnfdattributes'
vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfds.id'),
nullable=False) nullable=False)
key = sa.Column(sa.String(255), nullable=False) key = sa.Column(sa.String(255), nullable=False)
value = sa.Column(sa.TEXT(65535), nullable=True) value = sa.Column(sa.TEXT(65535), nullable=True)
class Device(model_base.BASE, models_v1.HasId, models_v1.HasTenant): class VNF(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
"""Represents devices that hosts services. """Represents devices that hosts services.
Here the term, 'VM', is intentionally avoided because it can be Here the term, 'VM', is intentionally avoided because it can be
VM or other container. VM or other container.
""" """
template_id = sa.Column(types.Uuid, sa.ForeignKey('devicetemplates.id'))
template = orm.relationship('DeviceTemplate') __tablename__ = 'vnfs'
vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfds.id'))
vnfd = orm.relationship('VNFD')
name = sa.Column(sa.String(255), nullable=False) name = sa.Column(sa.String(255), nullable=False)
description = sa.Column(sa.Text, nullable=True) description = sa.Column(sa.Text, nullable=True)
@ -109,7 +114,7 @@ class Device(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
# opaque string. # opaque string.
# e.g. (driver, mgmt_url) = (ssh, ip address), ... # e.g. (driver, mgmt_url) = (ssh, ip address), ...
mgmt_url = sa.Column(sa.String(255), nullable=True) mgmt_url = sa.Column(sa.String(255), nullable=True)
attributes = orm.relationship("DeviceAttribute", backref="device") attributes = orm.relationship("VNFAttribute", backref="device")
status = sa.Column(sa.String(64), nullable=False) status = sa.Column(sa.String(64), nullable=False)
vim_id = sa.Column(types.Uuid, sa.ForeignKey('vims.id'), nullable=False) vim_id = sa.Column(types.Uuid, sa.ForeignKey('vims.id'), nullable=False)
@ -118,14 +123,16 @@ class Device(model_base.BASE, models_v1.HasId, models_v1.HasTenant):
error_reason = sa.Column(sa.Text, nullable=True) error_reason = sa.Column(sa.Text, nullable=True)
class DeviceAttribute(model_base.BASE, models_v1.HasId): class VNFAttribute(model_base.BASE, models_v1.HasId):
"""Represents kwargs necessary for spinning up VM in (key, value) pair. """Represents kwargs necessary for spinning up VM in (key, value) pair.
key value pair is adopted for being agnostic to actuall manager of VMs key value pair is adopted for being agnostic to actuall manager of VMs
like nova, heat or others. e.g. image-id, flavor-id for Nova. like nova, heat or others. e.g. image-id, flavor-id for Nova.
The interpretation is up to actual driver of hosting device. The interpretation is up to actual driver of hosting device.
""" """
device_id = sa.Column(types.Uuid, sa.ForeignKey('devices.id'),
__tablename__ = 'vnfattributes'
vnf_id = sa.Column(types.Uuid, sa.ForeignKey('vnfs.id'),
nullable=False) nullable=False)
key = sa.Column(sa.String(255), nullable=False) key = sa.Column(sa.String(255), nullable=False)
# json encoded value. example # json encoded value. example
@ -150,11 +157,11 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
try: try:
return self._get_by_id(context, model, id) return self._get_by_id(context, model, id)
except orm_exc.NoResultFound: except orm_exc.NoResultFound:
if issubclass(model, DeviceTemplate): if issubclass(model, VNFD):
raise vnfm.DeviceTemplateNotFound(device_template_id=id) raise vnfm.DeviceTemplateNotFound(device_template_id=id)
elif issubclass(model, ServiceType): elif issubclass(model, ServiceType):
raise vnfm.ServiceTypeNotFound(service_type_id=id) raise vnfm.ServiceTypeNotFound(service_type_id=id)
if issubclass(model, Device): if issubclass(model, VNF):
raise vnfm.DeviceNotFound(device_id=id) raise vnfm.DeviceNotFound(device_id=id)
else: else:
raise raise
@ -186,11 +193,11 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
LOG.debug(_('device_db attributes %s'), device_db.attributes) LOG.debug(_('device_db attributes %s'), device_db.attributes)
res = { res = {
'device_template': 'device_template':
self._make_template_dict(device_db.template), self._make_template_dict(device_db.vnfd),
'attributes': self._make_dev_attrs_dict(device_db.attributes), 'attributes': self._make_dev_attrs_dict(device_db.attributes),
} }
key_list = ('id', 'tenant_id', 'name', 'description', 'instance_id', key_list = ('id', 'tenant_id', 'name', 'description', 'instance_id',
'vim_id', 'placement_attr', 'template_id', 'status', 'vim_id', 'placement_attr', 'vnfd_id', 'status',
'mgmt_url', 'error_reason') 'mgmt_url', 'error_reason')
res.update((key, device_db[key]) for key in key_list) res.update((key, device_db[key]) for key in key_list)
return self._fields(res, fields) return self._fields(res, fields)
@ -227,7 +234,7 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
template_id = str(uuid.uuid4()) template_id = str(uuid.uuid4())
template_db = DeviceTemplate( template_db = VNFD(
id=template_id, id=template_id,
tenant_id=tenant_id, tenant_id=tenant_id,
name=template.get('name'), name=template.get('name'),
@ -236,9 +243,9 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
mgmt_driver=mgmt_driver) mgmt_driver=mgmt_driver)
context.session.add(template_db) context.session.add(template_db)
for (key, value) in template.get('attributes', {}).items(): for (key, value) in template.get('attributes', {}).items():
attribute_db = DeviceTemplateAttribute( attribute_db = VNFDAttribute(
id=str(uuid.uuid4()), id=str(uuid.uuid4()),
template_id=template_id, vnfd_id=template_id,
key=key, key=key,
value=value) value=value)
context.session.add(attribute_db) context.session.add(attribute_db)
@ -247,7 +254,7 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
service_type_db = ServiceType( service_type_db = ServiceType(
id=str(uuid.uuid4()), id=str(uuid.uuid4()),
tenant_id=tenant_id, tenant_id=tenant_id,
template_id=template_id, vnfd_id=template_id,
service_type=service_type) service_type=service_type)
context.session.add(service_type_db) context.session.add(service_type_db)
@ -259,7 +266,7 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
def update_device_template(self, context, device_template_id, def update_device_template(self, context, device_template_id,
device_template): device_template):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
template_db = self._get_resource(context, DeviceTemplate, template_db = self._get_resource(context, VNFD,
device_template_id) device_template_id)
template_db.update(device_template['device_template']) template_db.update(device_template['device_template'])
return self._make_template_dict(template_db) return self._make_template_dict(template_db)
@ -268,27 +275,27 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
# TODO(yamahata): race. prevent from newly inserting hosting device # TODO(yamahata): race. prevent from newly inserting hosting device
# that refers to this template # that refers to this template
devices_db = context.session.query(Device).filter_by( devices_db = context.session.query(VNF).filter_by(
template_id=device_template_id).first() vnfd_id=device_template_id).first()
if devices_db is not None: if devices_db is not None:
raise vnfm.DeviceTemplateInUse( raise vnfm.DeviceTemplateInUse(
device_template_id=device_template_id) device_template_id=device_template_id)
context.session.query(ServiceType).filter_by( context.session.query(ServiceType).filter_by(
template_id=device_template_id).delete() vnfd_id=device_template_id).delete()
context.session.query(DeviceTemplateAttribute).filter_by( context.session.query(VNFDAttribute).filter_by(
template_id=device_template_id).delete() vnfd_id=device_template_id).delete()
template_db = self._get_resource(context, DeviceTemplate, template_db = self._get_resource(context, VNFD,
device_template_id) device_template_id)
context.session.delete(template_db) context.session.delete(template_db)
def get_device_template(self, context, device_template_id, fields=None): def get_device_template(self, context, device_template_id, fields=None):
template_db = self._get_resource(context, DeviceTemplate, template_db = self._get_resource(context, VNFD,
device_template_id) device_template_id)
return self._make_template_dict(template_db) return self._make_template_dict(template_db)
def get_device_templates(self, context, filters, fields=None): def get_device_templates(self, context, filters, fields=None):
return self._get_collection(context, DeviceTemplate, return self._get_collection(context, VNFD,
self._make_template_dict, self._make_template_dict,
filters=filters, fields=fields) filters=filters, fields=fields)
@ -298,19 +305,19 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
LOG.debug(_('required_attributes %s'), required_attributes) LOG.debug(_('required_attributes %s'), required_attributes)
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
query = ( query = (
context.session.query(DeviceTemplate). context.session.query(VNFD).
filter( filter(
sa.exists(). sa.exists().
where(sa.and_( where(sa.and_(
DeviceTemplate.id == ServiceType.template_id, VNFD.id == ServiceType.vnfd_id,
ServiceType.service_type == service_type)))) ServiceType.service_type == service_type))))
for key in required_attributes: for key in required_attributes:
query = query.filter( query = query.filter(
sa.exists(). sa.exists().
where(sa.and_( where(sa.and_(
DeviceTemplate.id == VNFD.id ==
DeviceTemplateAttribute.template_id, VNFDAttribute.vnfd_id,
DeviceTemplateAttribute.key == key))) VNFDAttribute.key == key)))
LOG.debug(_('statements %s'), query) LOG.debug(_('statements %s'), query)
template_db = query.first() template_db = query.first()
if template_db: if template_db:
@ -318,14 +325,14 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
def _device_attribute_update_or_create( def _device_attribute_update_or_create(
self, context, device_id, key, value): self, context, device_id, key, value):
arg = (self._model_query(context, DeviceAttribute). arg = (self._model_query(context, VNFAttribute).
filter(DeviceAttribute.device_id == device_id). filter(VNFAttribute.vnf_id == device_id).
filter(DeviceAttribute.key == key).first()) filter(VNFAttribute.key == key).first())
if arg: if arg:
arg.value = value arg.value = value
else: else:
arg = DeviceAttribute( arg = VNFAttribute(
id=str(uuid.uuid4()), device_id=device_id, id=str(uuid.uuid4()), vnf_id=device_id,
key=key, value=value) key=key, value=value)
context.session.add(arg) context.session.add(arg)
@ -340,22 +347,22 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
vim_id = device.get('vim_id') vim_id = device.get('vim_id')
placement_attr = device.get('placement_attr', {}) placement_attr = device.get('placement_attr', {})
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
template_db = self._get_resource(context, DeviceTemplate, template_db = self._get_resource(context, VNFD,
template_id) template_id)
device_db = Device(id=device_id, device_db = VNF(id=device_id,
tenant_id=tenant_id, tenant_id=tenant_id,
name=name, name=name,
description=template_db.description, description=template_db.description,
instance_id=None, instance_id=None,
template_id=template_id, vnfd_id=template_id,
vim_id=vim_id, vim_id=vim_id,
placement_attr=placement_attr, placement_attr=placement_attr,
status=constants.PENDING_CREATE, status=constants.PENDING_CREATE,
error_reason=None) error_reason=None)
context.session.add(device_db) context.session.add(device_db)
for key, value in attributes.items(): for key, value in attributes.items():
arg = DeviceAttribute( arg = VNFAttribute(
id=str(uuid.uuid4()), device_id=device_id, id=str(uuid.uuid4()), vnf_id=device_id,
key=key, value=value) key=key, value=value)
context.session.add(arg) context.session.add(arg)
@ -367,9 +374,9 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
mgmt_url, device_dict): mgmt_url, device_dict):
LOG.debug(_('device_dict %s'), device_dict) LOG.debug(_('device_dict %s'), device_dict)
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
query = (self._model_query(context, Device). query = (self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(Device.status.in_(CREATE_STATES)). filter(VNF.status.in_(CREATE_STATES)).
one()) one())
query.update({'instance_id': instance_id, 'mgmt_url': mgmt_url}) query.update({'instance_id': instance_id, 'mgmt_url': mgmt_url})
if instance_id is None or device_dict['status'] == constants.ERROR: if instance_id is None or device_dict['status'] == constants.ERROR:
@ -383,17 +390,17 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
def _create_device_status(self, context, device_id, new_status): def _create_device_status(self, context, device_id, new_status):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
query = (self._model_query(context, Device). query = (self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(Device.status.in_(CREATE_STATES)).one()) filter(VNF.status.in_(CREATE_STATES)).one())
query.update({'status': new_status}) query.update({'status': new_status})
def _get_device_db(self, context, device_id, current_statuses, new_status): def _get_device_db(self, context, device_id, current_statuses, new_status):
try: try:
device_db = ( device_db = (
self._model_query(context, Device). self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(Device.status.in_(current_statuses)). filter(VNF.status.in_(current_statuses)).
with_lockmode('update').one()) with_lockmode('update').one())
except orm_exc.NoResultFound: except orm_exc.NoResultFound:
raise vnfm.DeviceNotFound(device_id=device_id) raise vnfm.DeviceNotFound(device_id=device_id)
@ -411,15 +418,15 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
def _update_device_post(self, context, device_id, new_status, def _update_device_post(self, context, device_id, new_status,
new_device_dict=None): new_device_dict=None):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
(self._model_query(context, Device). (self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(Device.status == constants.PENDING_UPDATE). filter(VNF.status == constants.PENDING_UPDATE).
update({'status': new_status})) update({'status': new_status}))
dev_attrs = new_device_dict.get('attributes', {}) dev_attrs = new_device_dict.get('attributes', {})
(context.session.query(DeviceAttribute). (context.session.query(VNFAttribute).
filter(DeviceAttribute.device_id == device_id). filter(VNFAttribute.vnf_id == device_id).
filter(~DeviceAttribute.key.in_(dev_attrs.keys())). filter(~VNFAttribute.key.in_(dev_attrs.keys())).
delete(synchronize_session='fetch')) delete(synchronize_session='fetch'))
for (key, value) in dev_attrs.items(): for (key, value) in dev_attrs.items():
@ -438,14 +445,14 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
def _delete_device_post(self, context, device_id, error): def _delete_device_post(self, context, device_id, error):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
query = ( query = (
self._model_query(context, Device). self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(Device.status == constants.PENDING_DELETE)) filter(VNF.status == constants.PENDING_DELETE))
if error: if error:
query.update({'status': constants.ERROR}) query.update({'status': constants.ERROR})
else: else:
(self._model_query(context, DeviceAttribute). (self._model_query(context, VNFAttribute).
filter(DeviceAttribute.device_id == device_id).delete()) filter(VNFAttribute.vnf_id == device_id).delete())
query.delete() query.delete()
# reference implementation. needs to be overrided by subclass # reference implementation. needs to be overrided by subclass
@ -480,17 +487,17 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
self._delete_device_post(context, device_id, False) self._delete_device_post(context, device_id, False)
def get_device(self, context, device_id, fields=None): def get_device(self, context, device_id, fields=None):
device_db = self._get_resource(context, Device, device_id) device_db = self._get_resource(context, VNF, device_id)
return self._make_device_dict(device_db, fields) return self._make_device_dict(device_db, fields)
def get_devices(self, context, filters=None, fields=None): def get_devices(self, context, filters=None, fields=None):
return self._get_collection(context, Device, self._make_device_dict, return self._get_collection(context, VNF, self._make_device_dict,
filters=filters, fields=fields) filters=filters, fields=fields)
def set_device_error_status_reason(self, context, device_id, new_reason): def set_device_error_status_reason(self, context, device_id, new_reason):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
(self._model_query(context, Device). (self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
update({'error_reason': new_reason})) update({'error_reason': new_reason}))
def _mark_device_status(self, device_id, exclude_status, new_status): def _mark_device_status(self, device_id, exclude_status, new_status):
@ -498,9 +505,9 @@ class VNFMPluginDb(vnfm.VNFMPluginBase, db_base.CommonDbMixin):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
try: try:
device_db = ( device_db = (
self._model_query(context, Device). self._model_query(context, VNF).
filter(Device.id == device_id). filter(VNF.id == device_id).
filter(~Device.status.in_(exclude_status)). filter(~VNF.status.in_(exclude_status)).
with_lockmode('update').one()) with_lockmode('update').one())
except orm_exc.NoResultFound: except orm_exc.NoResultFound:
LOG.warning(_('no device found %s'), device_id) LOG.warning(_('no device found %s'), device_id)

View File

@ -97,7 +97,7 @@ class TestVNFMPlugin(db_base.SqlTestCase):
def _insert_dummy_device_template(self): def _insert_dummy_device_template(self):
session = self.context.session session = self.context.session
device_template = vm_db.DeviceTemplate( device_template = vm_db.VNFD(
id='eb094833-995e-49f0-a047-dfb56aaf7c4e', id='eb094833-995e-49f0-a047-dfb56aaf7c4e',
tenant_id='ad7ebc56538745a08ef7c5e97f8bd437', tenant_id='ad7ebc56538745a08ef7c5e97f8bd437',
name='fake_template', name='fake_template',
@ -110,13 +110,13 @@ class TestVNFMPlugin(db_base.SqlTestCase):
def _insert_dummy_device(self): def _insert_dummy_device(self):
session = self.context.session session = self.context.session
device_db = vm_db.Device( device_db = vm_db.VNF(
id='6261579e-d6f3-49ad-8bc3-a9cb974778ff', id='6261579e-d6f3-49ad-8bc3-a9cb974778ff',
tenant_id='ad7ebc56538745a08ef7c5e97f8bd437', tenant_id='ad7ebc56538745a08ef7c5e97f8bd437',
name='fake_device', name='fake_device',
description='fake_device_description', description='fake_device_description',
instance_id='da85ea1a-4ec4-4201-bbb2-8d9249eca7ec', instance_id='da85ea1a-4ec4-4201-bbb2-8d9249eca7ec',
template_id='eb094833-995e-49f0-a047-dfb56aaf7c4e', vnfd_id='eb094833-995e-49f0-a047-dfb56aaf7c4e',
vim_id='6261579e-d6f3-49ad-8bc3-a9cb974778ff', vim_id='6261579e-d6f3-49ad-8bc3-a9cb974778ff',
placement_attr={'region': 'RegionOne'}, placement_attr={'region': 'RegionOne'},
status='ACTIVE') status='ACTIVE')

View File

@ -421,7 +421,7 @@ class VNFMPlugin(vm_db.VNFMPluginDb, VNFMMgmtMixin):
vnf_attributes['template_id'] = vnf_attributes.pop('vnfd_id') vnf_attributes['template_id'] = vnf_attributes.pop('vnfd_id')
vnf_dict = self.create_device(context, vnf) vnf_dict = self.create_device(context, vnf)
vnf_response = copy.deepcopy(vnf_dict) vnf_response = copy.deepcopy(vnf_dict)
vnf_response['vnfd_id'] = vnf_response.pop('template_id') vnf_response['vnfd_id'] = vnf_response.pop('vnfd_id')
return vnf_response return vnf_response
def update_vnf( def update_vnf(