Make compute_api use Instance.create()
This makes compute_api use Instance.create() instead of the db.instance_create() API. Related to blueprint compute-api-objects Change-Id: I2ca1232fd9e12ca2fb57cd2acaa27ebd8aaa6dbe
This commit is contained in:
parent
708ca54a84
commit
4f86f726ab
@ -31,6 +31,8 @@ from nova.compute import vm_states
|
|||||||
from nova import conductor
|
from nova import conductor
|
||||||
from nova.db import base
|
from nova.db import base
|
||||||
from nova import exception
|
from nova import exception
|
||||||
|
from nova.objects import instance as instance_obj
|
||||||
|
from nova.objects import security_group
|
||||||
from nova.openstack.common.gettextutils import _
|
from nova.openstack.common.gettextutils import _
|
||||||
from nova.openstack.common import log as logging
|
from nova.openstack.common import log as logging
|
||||||
from nova.scheduler import rpcapi as scheduler_rpcapi
|
from nova.scheduler import rpcapi as scheduler_rpcapi
|
||||||
@ -92,15 +94,20 @@ class CellsScheduler(base.Base):
|
|||||||
sys_metadata = flavors.save_flavor_info(sys_metadata, instance_type)
|
sys_metadata = flavors.save_flavor_info(sys_metadata, instance_type)
|
||||||
instance_values['system_metadata'] = sys_metadata
|
instance_values['system_metadata'] = sys_metadata
|
||||||
instance_values.pop('name')
|
instance_values.pop('name')
|
||||||
|
if 'security_groups' in instance_values:
|
||||||
|
instance_values = security_group.make_secgroup_list(
|
||||||
|
instance_values['security_groups'])
|
||||||
|
|
||||||
num_instances = len(instance_uuids)
|
num_instances = len(instance_uuids)
|
||||||
for i, instance_uuid in enumerate(instance_uuids):
|
for i, instance_uuid in enumerate(instance_uuids):
|
||||||
instance_values['uuid'] = instance_uuid
|
instance = instance_obj.Instance()
|
||||||
|
instance.update(instance_values)
|
||||||
|
instance.uuid = instance_uuid
|
||||||
instance = self.compute_api.create_db_entry_for_new_instance(
|
instance = self.compute_api.create_db_entry_for_new_instance(
|
||||||
ctxt,
|
ctxt,
|
||||||
instance_type,
|
instance_type,
|
||||||
image,
|
image,
|
||||||
instance_values,
|
instance,
|
||||||
security_groups,
|
security_groups,
|
||||||
block_device_mapping,
|
block_device_mapping,
|
||||||
num_instances, i)
|
num_instances, i)
|
||||||
|
@ -47,11 +47,14 @@ from nova import exception
|
|||||||
from nova import hooks
|
from nova import hooks
|
||||||
from nova.image import glance
|
from nova.image import glance
|
||||||
from nova import network
|
from nova import network
|
||||||
|
from nova.network import model as network_model
|
||||||
from nova.network.security_group import openstack_driver
|
from nova.network.security_group import openstack_driver
|
||||||
from nova.network.security_group import security_group_base
|
from nova.network.security_group import security_group_base
|
||||||
from nova import notifications
|
from nova import notifications
|
||||||
from nova.objects import base as obj_base
|
from nova.objects import base as obj_base
|
||||||
from nova.objects import instance as instance_obj
|
from nova.objects import instance as instance_obj
|
||||||
|
from nova.objects import instance_info_cache
|
||||||
|
from nova.objects import security_group
|
||||||
from nova.openstack.common import excutils
|
from nova.openstack.common import excutils
|
||||||
from nova.openstack.common.gettextutils import _
|
from nova.openstack.common.gettextutils import _
|
||||||
from nova.openstack.common import jsonutils
|
from nova.openstack.common import jsonutils
|
||||||
@ -531,11 +534,10 @@ class API(base.Base):
|
|||||||
LOG.exception(_('Failed to set instance name using '
|
LOG.exception(_('Failed to set instance name using '
|
||||||
'multi_instance_display_name_template.'))
|
'multi_instance_display_name_template.'))
|
||||||
new_name = instance['display_name']
|
new_name = instance['display_name']
|
||||||
updates = {'display_name': new_name}
|
instance.display_name = new_name
|
||||||
if not instance.get('hostname'):
|
if not instance.get('hostname', None):
|
||||||
updates['hostname'] = utils.sanitize_hostname(new_name)
|
instance.hostname = utils.sanitize_hostname(new_name)
|
||||||
instance = self.db.instance_update(context,
|
instance.save()
|
||||||
instance['uuid'], updates)
|
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def _check_config_drive(self, config_drive):
|
def _check_config_drive(self, config_drive):
|
||||||
@ -680,7 +682,7 @@ class API(base.Base):
|
|||||||
'key_name': key_name,
|
'key_name': key_name,
|
||||||
'key_data': key_data,
|
'key_data': key_data,
|
||||||
'locked': False,
|
'locked': False,
|
||||||
'metadata': metadata,
|
'metadata': metadata or {},
|
||||||
'access_ip_v4': access_ip_v4,
|
'access_ip_v4': access_ip_v4,
|
||||||
'access_ip_v6': access_ip_v6,
|
'access_ip_v6': access_ip_v6,
|
||||||
'availability_zone': availability_zone,
|
'availability_zone': availability_zone,
|
||||||
@ -717,9 +719,10 @@ class API(base.Base):
|
|||||||
instances = []
|
instances = []
|
||||||
try:
|
try:
|
||||||
for i in xrange(num_instances):
|
for i in xrange(num_instances):
|
||||||
options = base_options.copy()
|
instance = instance_obj.Instance()
|
||||||
|
instance.update(base_options)
|
||||||
instance = self.create_db_entry_for_new_instance(
|
instance = self.create_db_entry_for_new_instance(
|
||||||
context, instance_type, boot_meta, options,
|
context, instance_type, boot_meta, instance,
|
||||||
security_groups, block_device_mapping,
|
security_groups, block_device_mapping,
|
||||||
num_instances, i)
|
num_instances, i)
|
||||||
|
|
||||||
@ -976,16 +979,19 @@ class API(base.Base):
|
|||||||
if (block_device_mapping or
|
if (block_device_mapping or
|
||||||
image_properties.get('mappings') or
|
image_properties.get('mappings') or
|
||||||
image_properties.get('block_device_mapping')):
|
image_properties.get('block_device_mapping')):
|
||||||
instance['shutdown_terminate'] = False
|
instance.shutdown_terminate = False
|
||||||
|
|
||||||
def _populate_instance_names(self, instance, num_instances):
|
def _populate_instance_names(self, instance, num_instances):
|
||||||
"""Populate instance display_name and hostname."""
|
"""Populate instance display_name and hostname."""
|
||||||
display_name = instance.get('display_name')
|
display_name = instance.get('display_name')
|
||||||
hostname = instance.get('hostname')
|
if instance.obj_attr_is_set('hostname'):
|
||||||
|
hostname = instance.get('hostname')
|
||||||
|
else:
|
||||||
|
hostname = None
|
||||||
|
|
||||||
if display_name is None:
|
if display_name is None:
|
||||||
display_name = self._default_display_name(instance['uuid'])
|
display_name = self._default_display_name(instance['uuid'])
|
||||||
instance['display_name'] = display_name
|
instance.display_name = display_name
|
||||||
|
|
||||||
if hostname is None and num_instances == 1:
|
if hostname is None and num_instances == 1:
|
||||||
# NOTE(russellb) In the multi-instance case, we're going to
|
# NOTE(russellb) In the multi-instance case, we're going to
|
||||||
@ -996,32 +1002,32 @@ class API(base.Base):
|
|||||||
# Otherwise, it will be built after the template based
|
# Otherwise, it will be built after the template based
|
||||||
# display_name.
|
# display_name.
|
||||||
hostname = display_name
|
hostname = display_name
|
||||||
instance['hostname'] = utils.sanitize_hostname(hostname)
|
instance.hostname = utils.sanitize_hostname(hostname)
|
||||||
|
|
||||||
def _default_display_name(self, instance_uuid):
|
def _default_display_name(self, instance_uuid):
|
||||||
return "Server %s" % instance_uuid
|
return "Server %s" % instance_uuid
|
||||||
|
|
||||||
def _populate_instance_for_create(self, base_options, image,
|
def _populate_instance_for_create(self, instance, image, security_groups):
|
||||||
security_groups):
|
|
||||||
"""Build the beginning of a new instance."""
|
"""Build the beginning of a new instance."""
|
||||||
image_properties = image.get('properties', {})
|
image_properties = image.get('properties', {})
|
||||||
|
|
||||||
instance = base_options
|
if not instance.obj_attr_is_set('uuid'):
|
||||||
if not instance.get('uuid'):
|
|
||||||
# Generate the instance_uuid here so we can use it
|
# Generate the instance_uuid here so we can use it
|
||||||
# for additional setup before creating the DB entry.
|
# for additional setup before creating the DB entry.
|
||||||
instance['uuid'] = str(uuid.uuid4())
|
instance['uuid'] = str(uuid.uuid4())
|
||||||
|
|
||||||
instance['launch_index'] = 0
|
instance.launch_index = 0
|
||||||
instance['vm_state'] = vm_states.BUILDING
|
instance.vm_state = vm_states.BUILDING
|
||||||
instance['task_state'] = task_states.SCHEDULING
|
instance.task_state = task_states.SCHEDULING
|
||||||
instance['info_cache'] = {'network_info': '[]'}
|
info_cache = instance_info_cache.InstanceInfoCache()
|
||||||
|
info_cache.instance_uuid = instance.uuid
|
||||||
|
info_cache.network_info = network_model.NetworkInfo()
|
||||||
|
instance.info_cache = info_cache
|
||||||
|
|
||||||
# Store image properties so we can use them later
|
# Store image properties so we can use them later
|
||||||
# (for notifications, etc). Only store what we can.
|
# (for notifications, etc). Only store what we can.
|
||||||
instance.setdefault('system_metadata', {})
|
if not instance.obj_attr_is_set('system_metadata'):
|
||||||
# Make sure we have the dict form that we need for instance_update.
|
instance.system_metadata = {}
|
||||||
instance['system_metadata'] = utils.instance_sys_meta(instance)
|
|
||||||
prefix_format = SM_IMAGE_PROP_PREFIX + '%s'
|
prefix_format = SM_IMAGE_PROP_PREFIX + '%s'
|
||||||
for key, value in image_properties.iteritems():
|
for key, value in image_properties.iteritems():
|
||||||
new_value = unicode(value)[:255]
|
new_value = unicode(value)[:255]
|
||||||
@ -1033,9 +1039,9 @@ class API(base.Base):
|
|||||||
if not base_image_ref:
|
if not base_image_ref:
|
||||||
# base image ref property not previously set through a snapshot.
|
# base image ref property not previously set through a snapshot.
|
||||||
# default to using the image ref as the base:
|
# default to using the image ref as the base:
|
||||||
base_image_ref = base_options['image_ref']
|
base_image_ref = instance.image_ref
|
||||||
|
|
||||||
instance['system_metadata']['image_base_image_ref'] = base_image_ref
|
instance.system_metadata['image_base_image_ref'] = base_image_ref
|
||||||
self.security_group_api.populate_security_groups(instance,
|
self.security_group_api.populate_security_groups(instance,
|
||||||
security_groups)
|
security_groups)
|
||||||
return instance
|
return instance
|
||||||
@ -1043,7 +1049,7 @@ class API(base.Base):
|
|||||||
#NOTE(bcwaldon): No policy check since this is only used by scheduler and
|
#NOTE(bcwaldon): No policy check since this is only used by scheduler and
|
||||||
# the compute api. That should probably be cleaned up, though.
|
# the compute api. That should probably be cleaned up, though.
|
||||||
def create_db_entry_for_new_instance(self, context, instance_type, image,
|
def create_db_entry_for_new_instance(self, context, instance_type, image,
|
||||||
base_options, security_group, block_device_mapping, num_instances,
|
instance, security_group, block_device_mapping, num_instances,
|
||||||
index):
|
index):
|
||||||
"""Create an entry in the DB for this new instance,
|
"""Create an entry in the DB for this new instance,
|
||||||
including any related table updates (such as security group,
|
including any related table updates (such as security group,
|
||||||
@ -1052,8 +1058,7 @@ class API(base.Base):
|
|||||||
This is called by the scheduler after a location for the
|
This is called by the scheduler after a location for the
|
||||||
instance has been determined.
|
instance has been determined.
|
||||||
"""
|
"""
|
||||||
instance = self._populate_instance_for_create(base_options,
|
self._populate_instance_for_create(instance, image, security_group)
|
||||||
image, security_group)
|
|
||||||
|
|
||||||
self._populate_instance_names(instance, num_instances)
|
self._populate_instance_names(instance, num_instances)
|
||||||
|
|
||||||
@ -1061,7 +1066,7 @@ class API(base.Base):
|
|||||||
block_device_mapping)
|
block_device_mapping)
|
||||||
|
|
||||||
self.security_group_api.ensure_default(context)
|
self.security_group_api.ensure_default(context)
|
||||||
instance = self.db.instance_create(context, instance)
|
instance.create(context)
|
||||||
|
|
||||||
if num_instances > 1:
|
if num_instances > 1:
|
||||||
# NOTE(russellb) We wait until this spot to handle
|
# NOTE(russellb) We wait until this spot to handle
|
||||||
@ -3567,4 +3572,8 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
|
|||||||
return [{'name': group['name']} for group in groups]
|
return [{'name': group['name']} for group in groups]
|
||||||
|
|
||||||
def populate_security_groups(self, instance, security_groups):
|
def populate_security_groups(self, instance, security_groups):
|
||||||
instance['security_groups'] = security_groups
|
if not security_groups:
|
||||||
|
instance.security_groups = None
|
||||||
|
return
|
||||||
|
instance.security_groups = security_group.make_secgroup_list(
|
||||||
|
security_groups)
|
||||||
|
@ -28,6 +28,7 @@ from nova.compute import api as compute_api
|
|||||||
from nova import exception
|
from nova import exception
|
||||||
from nova.network import neutronv2
|
from nova.network import neutronv2
|
||||||
from nova.network.security_group import security_group_base
|
from nova.network.security_group import security_group_base
|
||||||
|
from nova.objects import security_group
|
||||||
from nova.openstack.common import excutils
|
from nova.openstack.common import excutils
|
||||||
from nova.openstack.common.gettextutils import _
|
from nova.openstack.common.gettextutils import _
|
||||||
from nova.openstack.common import log as logging
|
from nova.openstack.common import log as logging
|
||||||
@ -460,4 +461,5 @@ class SecurityGroupAPI(security_group_base.SecurityGroupBase):
|
|||||||
def populate_security_groups(self, instance, security_groups):
|
def populate_security_groups(self, instance, security_groups):
|
||||||
# Setting to emply list since we do not want to populate this field
|
# Setting to emply list since we do not want to populate this field
|
||||||
# in the nova database if using the neutron driver
|
# in the nova database if using the neutron driver
|
||||||
instance['security_groups'] = []
|
instance['security_groups'] = security_group.SecurityGroupList()
|
||||||
|
instance['security_groups'].objects = []
|
||||||
|
@ -290,7 +290,7 @@ class Instance(base.NovaObject):
|
|||||||
|
|
||||||
@base.remotable
|
@base.remotable
|
||||||
def create(self, context):
|
def create(self, context):
|
||||||
if hasattr(self, base.get_attrname('id')):
|
if self.obj_attr_is_set('id'):
|
||||||
raise exception.ObjectActionError(action='create',
|
raise exception.ObjectActionError(action='create',
|
||||||
reason='already created')
|
reason='already created')
|
||||||
updates = {}
|
updates = {}
|
||||||
|
@ -93,3 +93,19 @@ class SecurityGroupList(base.ObjectListBase, base.NovaObject):
|
|||||||
return _make_secgroup_list(context, cls(),
|
return _make_secgroup_list(context, cls(),
|
||||||
db.security_group_get_by_instance(
|
db.security_group_get_by_instance(
|
||||||
context, instance.uuid))
|
context, instance.uuid))
|
||||||
|
|
||||||
|
|
||||||
|
def make_secgroup_list(security_groups):
|
||||||
|
"""A helper to make security group objects from a list of names.
|
||||||
|
|
||||||
|
Note that this does not make them save-able or have the rest of the
|
||||||
|
attributes they would normally have, but provides a quick way to fill,
|
||||||
|
for example, an instance object during create.
|
||||||
|
"""
|
||||||
|
secgroups = SecurityGroupList()
|
||||||
|
secgroups.objects = []
|
||||||
|
for name in security_groups:
|
||||||
|
secgroup = SecurityGroup()
|
||||||
|
secgroup.name = name
|
||||||
|
secgroups.objects.append(secgroup)
|
||||||
|
return secgroups
|
||||||
|
@ -23,6 +23,7 @@ from nova.openstack.common import jsonutils
|
|||||||
import nova.openstack.common.rpc
|
import nova.openstack.common.rpc
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
import nova.tests.image.fake
|
import nova.tests.image.fake
|
||||||
|
|
||||||
|
|
||||||
@ -82,23 +83,18 @@ class DiskConfigTestCase(test.TestCase):
|
|||||||
fake_instance_get_all)
|
fake_instance_get_all)
|
||||||
|
|
||||||
def fake_instance_create(context, inst_, session=None):
|
def fake_instance_create(context, inst_, session=None):
|
||||||
class FakeModel(dict):
|
inst = fake_instance.fake_db_instance(**{
|
||||||
def save(self, session=None):
|
'id': 1,
|
||||||
pass
|
'uuid': AUTO_INSTANCE_UUID,
|
||||||
|
'created_at': datetime.datetime(2010, 10, 10, 12, 0, 0),
|
||||||
inst = FakeModel(**inst_)
|
'updated_at': datetime.datetime(2010, 10, 10, 12, 0, 0),
|
||||||
inst['id'] = 1
|
'progress': 0,
|
||||||
inst['uuid'] = AUTO_INSTANCE_UUID
|
'name': 'instance-1', # this is a property
|
||||||
inst['created_at'] = datetime.datetime(2010, 10, 10, 12, 0, 0)
|
'task_state': '',
|
||||||
inst['updated_at'] = datetime.datetime(2010, 10, 10, 12, 0, 0)
|
'vm_state': '',
|
||||||
inst['progress'] = 0
|
'auto_disk_config': inst_['auto_disk_config'],
|
||||||
inst['name'] = 'instance-1' # this is a property
|
'security_groups': inst_['security_groups'],
|
||||||
inst['task_state'] = ''
|
})
|
||||||
inst['vm_state'] = ''
|
|
||||||
# NOTE(vish): db create translates security groups into model
|
|
||||||
# objects. Translate here so tests pass
|
|
||||||
inst['security_groups'] = [{'name': group}
|
|
||||||
for group in inst['security_groups']]
|
|
||||||
|
|
||||||
def fake_instance_get_for_create(context, id_, *args, **kwargs):
|
def fake_instance_get_for_create(context, id_, *args, **kwargs):
|
||||||
return (inst, inst)
|
return (inst, inst)
|
||||||
|
@ -32,6 +32,7 @@ from nova.openstack.common import rpc
|
|||||||
from nova import servicegroup
|
from nova import servicegroup
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
@ -307,7 +308,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -325,7 +326,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"fixed_ips": [],
|
"fixed_ips": [],
|
||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
}
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
|
@ -30,6 +30,7 @@ from nova.openstack.common import jsonutils
|
|||||||
from nova.openstack.common import rpc
|
from nova.openstack.common import rpc
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
|
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -125,7 +126,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"fixed_ips": [],
|
"fixed_ips": [],
|
||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
}
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
|
@ -23,6 +23,7 @@ from nova.openstack.common import jsonutils
|
|||||||
import nova.openstack.common.rpc
|
import nova.openstack.common.rpc
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
import nova.tests.image.fake
|
import nova.tests.image.fake
|
||||||
|
|
||||||
|
|
||||||
@ -82,23 +83,18 @@ class DiskConfigTestCase(test.TestCase):
|
|||||||
fake_instance_get_all)
|
fake_instance_get_all)
|
||||||
|
|
||||||
def fake_instance_create(context, inst_, session=None):
|
def fake_instance_create(context, inst_, session=None):
|
||||||
class FakeModel(dict):
|
inst = fake_instance.fake_db_instance(**{
|
||||||
def save(self, session=None):
|
'id': 1,
|
||||||
pass
|
'uuid': AUTO_INSTANCE_UUID,
|
||||||
|
'created_at': datetime.datetime(2010, 10, 10, 12, 0, 0),
|
||||||
inst = FakeModel(**inst_)
|
'updated_at': datetime.datetime(2010, 10, 10, 12, 0, 0),
|
||||||
inst['id'] = 1
|
'progress': 0,
|
||||||
inst['uuid'] = AUTO_INSTANCE_UUID
|
'name': 'instance-1', # this is a property
|
||||||
inst['created_at'] = datetime.datetime(2010, 10, 10, 12, 0, 0)
|
'task_state': '',
|
||||||
inst['updated_at'] = datetime.datetime(2010, 10, 10, 12, 0, 0)
|
'vm_state': '',
|
||||||
inst['progress'] = 0
|
'auto_disk_config': inst_['auto_disk_config'],
|
||||||
inst['name'] = 'instance-1' # this is a property
|
'security_groups': inst_['security_groups'],
|
||||||
inst['task_state'] = ''
|
})
|
||||||
inst['vm_state'] = ''
|
|
||||||
# NOTE(vish): db create translates security groups into model
|
|
||||||
# objects. Translate here so tests pass
|
|
||||||
inst['security_groups'] = [{'name': group}
|
|
||||||
for group in inst['security_groups']]
|
|
||||||
|
|
||||||
def fake_instance_get_for_create(context, id_, *args, **kwargs):
|
def fake_instance_get_for_create(context, id_, *args, **kwargs):
|
||||||
return (inst, inst)
|
return (inst, inst)
|
||||||
|
@ -32,6 +32,7 @@ from nova.openstack.common import jsonutils
|
|||||||
from nova.openstack.common import rpc
|
from nova.openstack.common import rpc
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
|
|
||||||
|
|
||||||
@ -142,7 +143,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -160,7 +161,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"fixed_ips": [],
|
"fixed_ips": [],
|
||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
}
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
|
@ -55,6 +55,7 @@ from nova.openstack.common import rpc
|
|||||||
from nova import policy
|
from nova import policy
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests import fake_network
|
from nova.tests import fake_network
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
from nova.tests import matchers
|
from nova.tests import matchers
|
||||||
@ -1711,7 +1712,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -1729,7 +1730,8 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"fixed_ips": [],
|
"fixed_ips": [],
|
||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
}
|
"security_groups": inst['security_groups'],
|
||||||
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
|
@ -31,6 +31,7 @@ from nova.openstack.common import jsonutils
|
|||||||
from nova.openstack.common import rpc
|
from nova.openstack.common import rpc
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
|
|
||||||
|
|
||||||
@ -70,7 +71,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -88,7 +89,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"fixed_ips": [],
|
"fixed_ips": [],
|
||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
}
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
|
@ -54,6 +54,7 @@ from nova.openstack.common import rpc
|
|||||||
from nova import policy
|
from nova import policy
|
||||||
from nova import test
|
from nova import test
|
||||||
from nova.tests.api.openstack import fakes
|
from nova.tests.api.openstack import fakes
|
||||||
|
from nova.tests import fake_instance
|
||||||
from nova.tests import fake_network
|
from nova.tests import fake_network
|
||||||
from nova.tests.image import fake
|
from nova.tests.image import fake
|
||||||
from nova.tests import matchers
|
from nova.tests import matchers
|
||||||
@ -1614,7 +1615,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
|
||||||
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
def_image_ref = 'http://localhost/images/%s' % image_uuid
|
||||||
self.instance_cache_num += 1
|
self.instance_cache_num += 1
|
||||||
instance = {
|
instance = fake_instance.fake_db_instance(**{
|
||||||
'id': self.instance_cache_num,
|
'id': self.instance_cache_num,
|
||||||
'display_name': inst['display_name'] or 'test',
|
'display_name': inst['display_name'] or 'test',
|
||||||
'uuid': FAKE_UUID,
|
'uuid': FAKE_UUID,
|
||||||
@ -1633,7 +1634,8 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
"task_state": "",
|
"task_state": "",
|
||||||
"vm_state": "",
|
"vm_state": "",
|
||||||
"root_device_name": inst.get('root_device_name', 'vda'),
|
"root_device_name": inst.get('root_device_name', 'vda'),
|
||||||
}
|
"security_groups": inst['security_groups'],
|
||||||
|
})
|
||||||
|
|
||||||
self.instance_cache_by_id[instance['id']] = instance
|
self.instance_cache_by_id[instance['id']] = instance
|
||||||
self.instance_cache_by_uuid[instance['uuid']] = instance
|
self.instance_cache_by_uuid[instance['uuid']] = instance
|
||||||
@ -1662,7 +1664,7 @@ class ServersControllerCreateTest(test.TestCase):
|
|||||||
request_spec['instance_properties']))
|
request_spec['instance_properties']))
|
||||||
return instances
|
return instances
|
||||||
|
|
||||||
def server_update(context, instance_uuid, params):
|
def server_update(context, instance_uuid, params, update_cells=False):
|
||||||
inst = self.instance_cache_by_uuid[instance_uuid]
|
inst = self.instance_cache_by_uuid[instance_uuid]
|
||||||
inst.update(params)
|
inst.update(params)
|
||||||
return (inst, inst)
|
return (inst, inst)
|
||||||
|
@ -5479,11 +5479,13 @@ class ComputeAPITestCase(BaseTestCase):
|
|||||||
base_options = {'image_ref': self.fake_image['id'],
|
base_options = {'image_ref': self.fake_image['id'],
|
||||||
'system_metadata': utils.dict_to_metadata(
|
'system_metadata': utils.dict_to_metadata(
|
||||||
{'fake': 'value'})}
|
{'fake': 'value'})}
|
||||||
|
instance = instance_obj.Instance()
|
||||||
|
instance.update(base_options)
|
||||||
instance = self.compute_api._populate_instance_for_create(
|
instance = self.compute_api._populate_instance_for_create(
|
||||||
base_options,
|
instance,
|
||||||
self.fake_image,
|
self.fake_image,
|
||||||
security_groups=None)
|
security_groups=None)
|
||||||
self.assertEquals(base_options['image_ref'],
|
self.assertEquals(str(base_options['image_ref']),
|
||||||
instance['system_metadata']['image_base_image_ref'])
|
instance['system_metadata']['image_base_image_ref'])
|
||||||
self.assertEquals(vm_states.BUILDING, instance['vm_state'])
|
self.assertEquals(vm_states.BUILDING, instance['vm_state'])
|
||||||
self.assertEquals(task_states.SCHEDULING, instance['task_state'])
|
self.assertEquals(task_states.SCHEDULING, instance['task_state'])
|
||||||
|
Loading…
Reference in New Issue
Block a user