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:
parent
f495aba924
commit
cc41015d46
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue