Replace conductor get_ec2_ids() with new Instance.ec2_ids attribute

Adds the ec2_ids attribute to expected_attrs in Instance queries where
the new attribute is needed to avoid extra rpc rounds to fetch the data.

Related to blueprint liberty-objects

Change-Id: I4d4f1c417e2a8c4eaac6010afb3291f40ecad2d9
This commit is contained in:
Hans Lindgren 2015-02-20 15:48:08 +01:00
parent f495aba924
commit cc41015d46
2 changed files with 12 additions and 18 deletions

View File

@ -30,11 +30,9 @@ from nova.api.ec2 import ec2utils
from nova.api.metadata import password
from nova import availability_zones as az
from nova import block_device
from nova import conductor
from nova import context
from nova import network
from nova import objects
from nova.objects import base as obj_base
from nova.objects import keypair as keypair_obj
from nova import utils
from nova.virt import netutils
@ -119,11 +117,6 @@ class InstanceMetadata(object):
self.instance = instance
self.extra_md = extra_md
if conductor_api:
capi = conductor_api
else:
capi = conductor.API()
self.availability_zone = az.get_instance_availability_zone(ctxt,
instance)
@ -137,9 +130,6 @@ class InstanceMetadata(object):
else:
self.userdata_raw = None
self.ec2_ids = capi.get_ec2_ids(ctxt,
obj_base.obj_to_primitive(instance))
self.address = address
# expose instance metadata.
@ -226,10 +216,10 @@ class InstanceMetadata(object):
fmt_sgroups = [x['name'] for x in self.security_groups]
meta_data = {
'ami-id': self.ec2_ids['ami-id'],
'ami-id': self.instance.ec2_ids.ami_id,
'ami-launch-index': self.instance.launch_index,
'ami-manifest-path': 'FIXME',
'instance-id': self.ec2_ids['instance-id'],
'instance-id': self.instance.ec2_ids.instance_id,
'hostname': hostname,
'local-ipv4': fixed_ip or self.address,
'reservation-id': self.instance.reservation_id,
@ -268,10 +258,10 @@ class InstanceMetadata(object):
if self._check_version('2007-12-15', version):
meta_data['block-device-mapping'] = self.mappings
if 'kernel-id' in self.ec2_ids:
meta_data['kernel-id'] = self.ec2_ids['kernel-id']
if 'ramdisk-id' in self.ec2_ids:
meta_data['ramdisk-id'] = self.ec2_ids['ramdisk-id']
if self.instance.ec2_ids.kernel_id:
meta_data['kernel-id'] = self.instance.ec2_ids.kernel_id
if self.instance.ec2_ids.ramdisk_id:
meta_data['ramdisk-id'] = self.instance.ec2_ids.ramdisk_id
if self._check_version('2008-02-01', version):
meta_data['placement'] = {'availability-zone':
@ -519,7 +509,8 @@ def get_metadata_by_address(conductor_api, address):
def get_metadata_by_instance_id(conductor_api, instance_id, address,
ctxt=None):
ctxt = ctxt or context.get_admin_context()
instance = objects.Instance.get_by_uuid(ctxt, instance_id)
instance = objects.Instance.get_by_uuid(
ctxt, instance_id, expected_attrs=['ec2_ids', 'flavor', 'info_cache'])
return InstanceMetadata(instance, address)

View File

@ -71,6 +71,8 @@ def fake_inst_obj(context):
reservation_id='r-xxxxxxxx',
user_data=ENCODE_USER_DATA_STRING,
image_ref=7,
kernel_id=None,
ramdisk_id=None,
vcpus=1,
fixed_ips=[],
root_device_name='/dev/sda1',
@ -274,7 +276,8 @@ class MetadataTestCase(test.TestCase):
self.assertEqual(
md.lookup("/ec2/2009-04-04/meta-data/kernel-id"), data)
inst.kernel_id = None
def test_image_type_no_kernel_raises(self):
inst = self.instance.obj_clone()
md = fake_InstanceMetadata(self.stubs, inst)
self.assertRaises(base.InvalidMetadataPath,
md.lookup, "/2009-04-04/meta-data/kernel-id")