summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/ec2/cloud.py6
-rw-r--r--nova/api/metadata/base.py4
-rw-r--r--nova/api/openstack/compute/views/servers.py3
-rw-r--r--nova/tests/api/ec2/test_cinder_cloud.py9
-rw-r--r--nova/tests/api/ec2/test_cloud.py46
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py5
-rw-r--r--nova/tests/test_metadata.py12
7 files changed, 62 insertions, 23 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 6bc5185bf..a35460576 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -1084,10 +1084,8 @@ class CloudController(object):
@staticmethod
def _format_instance_type(instance, result):
- if instance['instance_type']:
- result['instanceType'] = instance['instance_type'].get('name')
- else:
- result['instanceType'] = None
+ instance_type = instance_types.extract_instance_type(instance)
+ result['instanceType'] = instance_type['name']
@staticmethod
def _format_group_set(instance, result):
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py
index 41f36541c..896c8fbd7 100644
--- a/nova/api/metadata/base.py
+++ b/nova/api/metadata/base.py
@@ -28,6 +28,7 @@ from oslo.config import cfg
from nova.api.ec2 import ec2utils
from nova.api.metadata import password
from nova import block_device
+from nova.compute import instance_types
from nova import conductor
from nova import context
from nova import network
@@ -210,7 +211,8 @@ class InstanceMetadata():
meta_data['product-codes'] = []
if self._check_version('2007-08-29', version):
- meta_data['instance-type'] = self.instance['instance_type']['name']
+ instance_type = instance_types.extract_instance_type(self.instance)
+ meta_data['instance-type'] = instance_type['name']
if False and self._check_version('2007-10-10', version):
# TODO(vish): store ancestor ids
diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py
index 165d363a4..f00ab9921 100644
--- a/nova/api/openstack/compute/views/servers.py
+++ b/nova/api/openstack/compute/views/servers.py
@@ -22,6 +22,7 @@ from nova.api.openstack import common
from nova.api.openstack.compute.views import addresses as views_addresses
from nova.api.openstack.compute.views import flavors as views_flavors
from nova.api.openstack.compute.views import images as views_images
+from nova.compute import instance_types
from nova.openstack.common import log as logging
from nova.openstack.common import timeutils
@@ -180,7 +181,7 @@ class ViewBuilder(common.ViewBuilder):
return ""
def _get_flavor(self, request, instance):
- instance_type = instance["instance_type"]
+ instance_type = instance_types.extract_instance_type(instance)
if not instance_type:
LOG.warn(_("Instance has had its instance_type removed "
"from the DB"), instance=instance)
diff --git a/nova/tests/api/ec2/test_cinder_cloud.py b/nova/tests/api/ec2/test_cinder_cloud.py
index d4ce58023..7b66da749 100644
--- a/nova/tests/api/ec2/test_cinder_cloud.py
+++ b/nova/tests/api/ec2/test_cinder_cloud.py
@@ -26,6 +26,7 @@ from oslo.config import cfg
from nova.api.ec2 import cloud
from nova.api.ec2 import ec2utils
from nova.compute import api as compute_api
+from nova.compute import instance_types
from nova.compute import utils as compute_utils
from nova import context
from nova import db
@@ -383,14 +384,18 @@ class CinderCloudTestCase(test.TestCase):
def _setUpBlockDeviceMapping(self):
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
inst1 = db.instance_create(self.context,
{'image_ref': image_uuid,
'instance_type_id': 1,
- 'root_device_name': '/dev/sdb1'})
+ 'root_device_name': '/dev/sdb1',
+ 'system_metadata': sys_meta})
inst2 = db.instance_create(self.context,
{'image_ref': image_uuid,
'instance_type_id': 1,
- 'root_device_name': '/dev/sdc1'})
+ 'root_device_name': '/dev/sdc1',
+ 'system_metadata': sys_meta})
instance_uuid = inst1['uuid']
mappings0 = [
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index 2ba8cfc60..ebf0188b9 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -33,6 +33,7 @@ from nova.api.ec2 import ec2utils
from nova.api.ec2 import inst_state
from nova.api.metadata import password
from nova.compute import api as compute_api
+from nova.compute import instance_types
from nova.compute import power_state
from nova.compute import utils as compute_utils
from nova.compute import vm_states
@@ -759,18 +760,22 @@ class CloudTestCase(test.TestCase):
self._stub_instance_get_with_fixed_ips('get')
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
inst1 = db.instance_create(self.context, {'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host1',
'hostname': 'server-1234',
- 'vm_state': 'active'})
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta})
inst2 = db.instance_create(self.context, {'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host2',
'hostname': 'server-4321',
- 'vm_state': 'active'})
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta})
comp1 = db.service_create(self.context, {'host': 'host1',
'topic': "compute"})
agg = db.aggregate_create(self.context,
@@ -849,11 +854,14 @@ class CloudTestCase(test.TestCase):
self._stub_instance_get_with_fixed_ips('get')
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
inst_base = {
'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
- 'vm_state': 'active'
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta,
}
inst1_kwargs = {}
@@ -901,9 +909,12 @@ class CloudTestCase(test.TestCase):
def test_instance_state(expected_code, expected_name,
power_state_, vm_state_, values=None):
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
values = values or {}
values.update({'image_ref': image_uuid, 'instance_type_id': 1,
- 'power_state': power_state_, 'vm_state': vm_state_})
+ 'power_state': power_state_, 'vm_state': vm_state_,
+ 'system_metadata': sys_meta})
inst = db.instance_create(self.context, values)
instance_id = ec2utils.id_to_ec2_inst_id(inst['uuid'])
@@ -933,11 +944,14 @@ class CloudTestCase(test.TestCase):
self._stub_instance_get_with_fixed_ips('get')
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
inst1 = db.instance_create(self.context, {'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
'hostname': 'server-1234',
- 'vm_state': 'active'})
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta})
comp1 = db.service_create(self.context, {'host': 'host1',
'topic': "compute"})
result = self.cloud.describe_instances(self.context)
@@ -957,17 +971,21 @@ class CloudTestCase(test.TestCase):
def test_describe_instances_deleted(self):
image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
args1 = {'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host1',
- 'vm_state': 'active'}
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta}
inst1 = db.instance_create(self.context, args1)
args2 = {'reservation_id': 'b',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host1',
- 'vm_state': 'active'}
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta}
inst2 = db.instance_create(self.context, args2)
db.instance_destroy(self.context, inst1['uuid'])
result = self.cloud.describe_instances(self.context)
@@ -978,17 +996,21 @@ class CloudTestCase(test.TestCase):
def test_describe_instances_with_image_deleted(self):
image_uuid = 'aebef54a-ed67-4d10-912f-14455edce176'
+ sys_meta = instance_types.save_instance_type_info(
+ {}, instance_types.get_instance_type(1))
args1 = {'reservation_id': 'a',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host1',
- 'vm_state': 'active'}
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta}
inst1 = db.instance_create(self.context, args1)
args2 = {'reservation_id': 'b',
'image_ref': image_uuid,
'instance_type_id': 1,
'host': 'host1',
- 'vm_state': 'active'}
+ 'vm_state': 'active',
+ 'system_metadata': sys_meta}
inst2 = db.instance_create(self.context, args2)
result = self.cloud.describe_instances(self.context)
self.assertEqual(len(result['reservationSet']), 2)
@@ -2048,18 +2070,22 @@ class CloudTestCase(test.TestCase):
self._fake_bdm_get)
def fake_get(ctxt, instance_id):
+ inst_type = instance_types.get_default_instance_type()
+ inst_type['name'] = 'fake_type'
+ sys_meta = instance_types.save_instance_type_info({}, inst_type)
+ sys_meta = utils.dict_to_metadata(sys_meta)
return {
'id': 0,
'uuid': 'e5fe5518-0288-4fa3-b0c4-c79764101b85',
'root_device_name': '/dev/sdh',
'security_groups': [{'name': 'fake0'}, {'name': 'fake1'}],
'vm_state': vm_states.STOPPED,
- 'instance_type': {'name': 'fake_type'},
'kernel_id': 'cedef40a-ed67-4d10-800e-17455edce175',
'ramdisk_id': '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6',
'user_data': 'fake-user data',
'shutdown_terminate': False,
'disable_terminate': False,
+ 'system_metadata': sys_meta,
}
self.stubs.Set(self.cloud.compute_api, 'get', fake_get)
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 638ef79b0..ca347c0e5 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -3952,11 +3952,6 @@ class ServersViewBuilderTest(test.TestCase):
result = self.view_builder._get_flavor(self.request, self.instance)
self.assertEqual(result, expected)
- def test_get_flavor_deleted_instance_type(self):
- self.instance['instance_type'] = {}
- result = self.view_builder._get_flavor(self.request, self.instance)
- self.assertEqual(result, {})
-
def test_build_server(self):
self_link = "http://localhost/v2/fake/servers/%s" % self.uuid
bookmark_link = "http://localhost/fake/servers/%s" % self.uuid
diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py
index 3d01f1336..e695ab5fe 100644
--- a/nova/tests/test_metadata.py
+++ b/nova/tests/test_metadata.py
@@ -32,6 +32,7 @@ from nova.api.metadata import base
from nova.api.metadata import handler
from nova.api.metadata import password
from nova import block_device
+from nova.compute import instance_types
from nova.conductor import api as conductor_api
from nova import db
from nova.db.sqlalchemy import api
@@ -39,6 +40,7 @@ from nova import exception
from nova.network import api as network_api
from nova import test
from nova.tests import fake_network
+from nova import utils
CONF = cfg.CONF
@@ -68,6 +70,12 @@ INSTANCES = (
)
+def get_default_sys_meta():
+ return utils.dict_to_metadata(
+ instance_types.save_instance_type_info(
+ {}, instance_types.get_default_instance_type()))
+
+
def return_non_existing_address(*args, **kwarg):
raise exception.NotFound()
@@ -119,6 +127,7 @@ class MetadataTestCase(test.TestCase):
def setUp(self):
super(MetadataTestCase, self).setUp()
self.instance = INSTANCES[0]
+ self.instance['system_metadata'] = get_default_sys_meta()
self.flags(use_local=True, group='conductor')
fake_network.stub_out_nw_api_get_instance_nw_info(self.stubs,
spectacular=True)
@@ -250,6 +259,7 @@ class OpenStackMetadataTestCase(test.TestCase):
def setUp(self):
super(OpenStackMetadataTestCase, self).setUp()
self.instance = INSTANCES[0]
+ self.instance['system_metadata'] = get_default_sys_meta()
self.flags(use_local=True, group='conductor')
fake_network.stub_out_nw_api_get_instance_nw_info(self.stubs,
spectacular=True)
@@ -386,6 +396,7 @@ class MetadataHandlerTestCase(test.TestCase):
fake_network.stub_out_nw_api_get_instance_nw_info(self.stubs,
spectacular=True)
self.instance = INSTANCES[0]
+ self.instance['system_metadata'] = get_default_sys_meta()
self.flags(use_local=True, group='conductor')
self.mdinst = fake_InstanceMetadata(self.stubs, self.instance,
address=None, sgroups=None)
@@ -552,6 +563,7 @@ class MetadataPasswordTestCase(test.TestCase):
fake_network.stub_out_nw_api_get_instance_nw_info(self.stubs,
spectacular=True)
self.instance = copy.copy(INSTANCES[0])
+ self.instance['system_metadata'] = get_default_sys_meta()
self.flags(use_local=True, group='conductor')
self.mdinst = fake_InstanceMetadata(self.stubs, self.instance,
address=None, sgroups=None)