Merge "Remove old flavor_create db api method"
This commit is contained in:
commit
98e9b588e2
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue