Merge "Remove old flavor_create db api method"

This commit is contained in:
Zuul 2018-03-20 18:11:06 +00:00 committed by Gerrit Code Review
commit 98e9b588e2
7 changed files with 17 additions and 161 deletions

View File

@ -1515,13 +1515,6 @@ def console_get(context, console_id, instance_uuid=None):
##################
def flavor_create(context, values, projects=None):
"""Create a new instance type."""
return IMPL.flavor_create(context, values, projects=projects)
####################
def pci_device_get_by_addr(context, node_id, dev_addr):
"""Get PCI device by address."""
return IMPL.pci_device_get_by_addr(context, node_id, dev_addr)

View File

@ -4572,69 +4572,6 @@ def console_get(context, console_id, instance_uuid=None):
##################
@pick_context_manager_writer
def flavor_create(context, values, projects=None):
"""Create a new instance type. In order to pass in extra specs,
the values dict should contain a 'extra_specs' key/value pair:
{'extra_specs' : {'k1': 'v1', 'k2': 'v2', ...}}
"""
specs = values.get('extra_specs')
specs_refs = []
if specs:
for k, v in specs.items():
specs_ref = models.InstanceTypeExtraSpecs()
specs_ref['key'] = k
specs_ref['value'] = v
specs_refs.append(specs_ref)
values['extra_specs'] = specs_refs
instance_type_ref = models.InstanceTypes()
instance_type_ref.update(values)
if projects is None:
projects = []
try:
instance_type_ref.save(context.session)
except db_exc.DBDuplicateEntry as e:
if 'flavorid' in e.columns:
raise exception.FlavorIdExists(flavor_id=values['flavorid'])
raise exception.FlavorExists(name=values['name'])
except Exception as e:
raise db_exc.DBError(e)
for project in set(projects):
access_ref = models.InstanceTypeProjects()
access_ref.update({"instance_type_id": instance_type_ref.id,
"project_id": project})
access_ref.save(context.session)
return _dict_with_extra_specs(instance_type_ref)
def _dict_with_extra_specs(inst_type_query):
"""Takes an instance or instance type query returned
by sqlalchemy and returns it as a dictionary, converting the
extra_specs entry from a list of dicts:
'extra_specs' : [{'key': 'k1', 'value': 'v1', ...}, ...]
to a single dict:
'extra_specs' : {'k1': 'v1'}
"""
inst_type_dict = dict(inst_type_query)
extra_specs = {x['key']: x['value']
for x in inst_type_query['extra_specs']}
inst_type_dict['extra_specs'] = extra_specs
return inst_type_dict
####################
@pick_context_manager_writer
def cell_create(context, values):
cell = models.Cell()

View File

@ -290,7 +290,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
first()
if not result:
raise exception.FlavorNotFound(flavor_id=id)
return db_api._dict_with_extra_specs(result)
return _dict_with_extra_specs(result)
@staticmethod
@require_context
@ -301,7 +301,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
first()
if not result:
raise exception.FlavorNotFoundByName(flavor_name=name)
return db_api._dict_with_extra_specs(result)
return _dict_with_extra_specs(result)
@staticmethod
@require_context
@ -313,7 +313,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
first()
if not result:
raise exception.FlavorNotFound(flavor_id=flavor_id)
return db_api._dict_with_extra_specs(result)
return _dict_with_extra_specs(result)
@staticmethod
def _get_projects_from_db(context, flavorid):

View File

@ -48,7 +48,6 @@ from nova.compute import task_states
from nova.compute import vm_states
import nova.conf
from nova import context
from nova import db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models
from nova import exception
@ -2957,20 +2956,20 @@ class ServersControllerCreateTest(test.TestCase):
def test_create_instance_private_flavor(self):
values = {
'name': 'fake_name',
'memory_mb': 512,
'memory': 512,
'vcpus': 1,
'root_gb': 10,
'ephemeral_gb': 10,
'flavorid': '1324',
'swap': 0,
'rxtx_factor': 0.5,
'vcpu_weight': 1,
'disabled': False,
'is_public': False,
}
db.flavor_create(context.get_admin_context(), values)
self.assertRaises(webob.exc.HTTPBadRequest, self._test_create_instance,
flavor=1324)
flavors.create(**values)
ex = self.assertRaises(webob.exc.HTTPBadRequest,
self._test_create_instance,
flavor=1324)
self.assertEqual('Flavor 1324 could not be found.', six.text_type(ex))
def test_create_server_bad_image_uuid(self):
self.body['server']['min_count'] = 1

View File

@ -324,24 +324,6 @@ class BaseTestCase(test.TestCase):
return inst
def _create_instance_type(self, params=None):
"""Create a test instance type."""
if not params:
params = {}
context = self.context.elevated()
inst = {}
inst['name'] = 'm1.small'
inst['memory_mb'] = 1024
inst['vcpus'] = 1
inst['root_gb'] = 20
inst['ephemeral_gb'] = 10
inst['flavorid'] = '1'
inst['swap'] = 2048
inst['rxtx_factor'] = 1
inst.update(params)
return db.flavor_create(context, inst)['id']
def _create_group(self):
values = {'name': 'testgroup',
'description': 'testgroup',

View File

@ -3395,33 +3395,6 @@ class ServiceTestCase(test.TestCase, ModelsObjectComparatorMixin):
self.assertEqual(0, done)
class BaseInstanceTypeTestCase(test.TestCase, ModelsObjectComparatorMixin):
def setUp(self):
super(BaseInstanceTypeTestCase, self).setUp()
self.ctxt = context.get_admin_context()
self.user_ctxt = context.RequestContext('user', 'user')
def _get_base_values(self):
return {
'name': 'fake_name',
'memory_mb': 512,
'vcpus': 1,
'root_gb': 10,
'ephemeral_gb': 10,
'flavorid': 'fake_flavor',
'swap': 0,
'rxtx_factor': 0.5,
'vcpu_weight': 1,
'disabled': False,
'is_public': True
}
def _create_flavor(self, values, projects=None):
v = self._get_base_values()
v.update(values)
return db.flavor_create(self.ctxt, v, projects)
class InstanceActionTestCase(test.TestCase, ModelsObjectComparatorMixin):
IGNORED_FIELDS = [
'id',
@ -4047,42 +4020,12 @@ class InstanceFaultTestCase(test.TestCase, ModelsObjectComparatorMixin):
self.assertFalse(mock_filter.called)
class InstanceTypeTestCase(BaseInstanceTypeTestCase):
def test_flavor_create(self):
flavor = self._create_flavor({})
ignored_keys = ['id', 'deleted', 'deleted_at', 'updated_at',
'created_at', 'extra_specs']
self.assertIsNotNone(flavor['id'])
self._assertEqualObjects(flavor, self._get_base_values(),
ignored_keys)
def test_flavor_create_duplicate_name(self):
self._create_flavor({})
self.assertRaises(exception.FlavorExists,
self._create_flavor,
{'flavorid': 'some_random_flavor'})
def test_flavor_create_duplicate_flavorid(self):
self._create_flavor({})
self.assertRaises(exception.FlavorIdExists,
self._create_flavor,
{'name': 'some_random_name'})
def test_flavor_create_with_extra_specs(self):
extra_specs = dict(a='abc', b='def', c='ghi')
flavor = self._create_flavor({'extra_specs': extra_specs})
ignored_keys = ['id', 'deleted', 'deleted_at', 'updated_at',
'created_at', 'extra_specs']
self._assertEqualObjects(flavor, self._get_base_values(),
ignored_keys)
self._assertEqualObjects(extra_specs, flavor['extra_specs'])
@mock.patch('time.sleep', new=lambda x: None)
class FixedIPTestCase(BaseInstanceTypeTestCase):
class FixedIPTestCase(test.TestCase, ModelsObjectComparatorMixin):
def setUp(self):
super(FixedIPTestCase, self).setUp()
self.ctxt = context.get_admin_context()
def _timeout_test(self, ctxt, timeout, multi_host):
instance = db.instance_create(ctxt, dict(host='foo'))
net = db.network_create_safe(ctxt, dict(multi_host=multi_host,

View File

@ -299,6 +299,7 @@ class TestOcataCheck(test.TestCase):
'vcpu_weight': 1,
'disabled': False,
'is_public': True,
'deleted': 0
}
self.keypair_values = {
'name': 'foo',
@ -322,7 +323,8 @@ class TestOcataCheck(test.TestCase):
self.migration.upgrade(self.engine)
def test_upgrade_dirty_flavors(self):
db_api.flavor_create(self.context, self.flavor_values)
flavors = db_utils.get_table(self.engine, 'instance_types')
flavors.insert().execute(self.flavor_values)
self.assertRaises(exception.ValidationError,
self.migration.upgrade, self.engine)