diff options
-rw-r--r-- | nova/api/ec2/cloud.py | 6 | ||||
-rw-r--r-- | nova/api/metadata/base.py | 4 | ||||
-rw-r--r-- | nova/api/openstack/compute/views/servers.py | 3 | ||||
-rw-r--r-- | nova/tests/api/ec2/test_cinder_cloud.py | 9 | ||||
-rw-r--r-- | nova/tests/api/ec2/test_cloud.py | 46 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/test_servers.py | 5 | ||||
-rw-r--r-- | nova/tests/test_metadata.py | 12 |
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) |