summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-02-12 22:17:54 +0000
committerGerrit Code Review <review@openstack.org>2013-02-12 22:17:54 +0000
commit9994a9161d0acac216b3441233eae1f7238db889 (patch)
treee48074d9c4f96490b51ae80eacee9bda4f088c23 /nova/api
parent65241f96f900fd1eaad9c2731fda7d63b18a8f11 (diff)
parent91db10a0fd43c30ed088082583b7d43667339ac5 (diff)
downloadnova-9994a9161d0acac216b3441233eae1f7238db889.tar.gz
nova-9994a9161d0acac216b3441233eae1f7238db889.tar.xz
nova-9994a9161d0acac216b3441233eae1f7238db889.zip
Merge "Make the metadata paths use conductor"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/ec2utils.py4
-rw-r--r--nova/api/metadata/base.py53
-rw-r--r--nova/api/metadata/handler.py7
3 files changed, 32 insertions, 32 deletions
diff --git a/nova/api/ec2/ec2utils.py b/nova/api/ec2/ec2utils.py
index bc47b3e0d..bb0f7245a 100644
--- a/nova/api/ec2/ec2utils.py
+++ b/nova/api/ec2/ec2utils.py
@@ -115,10 +115,10 @@ def get_ip_info_for_instance(context, instance):
return get_ip_info_for_instance_from_nw_info(nw_info)
-def get_availability_zone_by_host(services, host):
+def get_availability_zone_by_host(services, host, conductor_api=None):
if len(services) > 0:
return availability_zones.get_host_availability_zone(
- context.get_admin_context(), host)
+ context.get_admin_context(), host, conductor_api)
return 'unknown zone'
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py
index 34d412268..275af2b32 100644
--- a/nova/api/metadata/base.py
+++ b/nova/api/metadata/base.py
@@ -26,8 +26,8 @@ import posixpath
from nova.api.ec2 import ec2utils
from nova.api.metadata import password
from nova import block_device
+from nova import conductor
from nova import context
-from nova import db
from nova import network
from nova.openstack.common import cfg
from nova.openstack.common import timeutils
@@ -83,7 +83,8 @@ class InvalidMetadataPath(Exception):
class InstanceMetadata():
"""Instance metadata."""
- def __init__(self, instance, address=None, content=[], extra_md=None):
+ def __init__(self, instance, address=None, content=[], extra_md=None,
+ conductor_api=None):
"""Creation of this object should basically cover all time consuming
collection. Methods after that should not cause time delays due to
network operations or lengthy cpu operations.
@@ -95,39 +96,32 @@ class InstanceMetadata():
self.instance = instance
self.extra_md = extra_md
+ if conductor_api:
+ self.conductor_api = conductor_api
+ else:
+ self.conductor_api = conductor.API()
+
ctxt = context.get_admin_context()
- services = db.service_get_all_by_host(ctxt.elevated(),
- instance['host'])
+ capi = self.conductor_api
+ services = capi.service_get_all_by_host(ctxt.elevated(),
+ instance['host'])
self.availability_zone = ec2utils.get_availability_zone_by_host(
- services, instance['host'])
+ services, instance['host'], capi)
self.ip_info = ec2utils.get_ip_info_for_instance(ctxt, instance)
- self.security_groups = db.security_group_get_by_instance(ctxt,
- instance['id'])
+ self.security_groups = capi.security_group_get_by_instance(ctxt,
+ instance)
- self.mappings = _format_instance_mapping(ctxt, instance)
+ self.mappings = _format_instance_mapping(capi, ctxt, instance)
if instance.get('user_data', None) is not None:
self.userdata_raw = base64.b64decode(instance['user_data'])
else:
self.userdata_raw = None
- self.ec2_ids = {}
-
- self.ec2_ids['instance-id'] = ec2utils.id_to_ec2_inst_id(
- instance['uuid'])
- self.ec2_ids['ami-id'] = ec2utils.glance_id_to_ec2_id(ctxt,
- instance['image_ref'])
-
- for image_type in ['kernel', 'ramdisk']:
- if self.instance.get('%s_id' % image_type):
- image_id = self.instance['%s_id' % image_type]
- ec2_image_type = ec2utils.image_type(image_type)
- ec2_id = ec2utils.glance_id_to_ec2_id(ctxt, image_id,
- ec2_image_type)
- self.ec2_ids['%s-id' % image_type] = ec2_id
+ self.ec2_ids = capi.get_ec2_ids(ctxt, instance)
self.address = address
@@ -404,23 +398,26 @@ class InstanceMetadata():
yield ('%s/%s/%s' % ("openstack", CONTENT_DIR, cid), content)
-def get_metadata_by_address(address):
+def get_metadata_by_address(conductor_api, address):
ctxt = context.get_admin_context()
fixed_ip = network.API().get_fixed_ip_by_address(ctxt, address)
- return get_metadata_by_instance_id(fixed_ip['instance_uuid'],
+ return get_metadata_by_instance_id(conductor_api,
+ fixed_ip['instance_uuid'],
address,
ctxt)
-def get_metadata_by_instance_id(instance_id, address, ctxt=None):
+def get_metadata_by_instance_id(conductor_api, instance_id, address,
+ ctxt=None):
ctxt = ctxt or context.get_admin_context()
- instance = db.instance_get_by_uuid(ctxt, instance_id)
+ instance = conductor_api.instance_get_by_uuid(ctxt, instance_id)
return InstanceMetadata(instance, address)
-def _format_instance_mapping(ctxt, instance):
- bdms = db.block_device_mapping_get_all_by_instance(ctxt, instance['uuid'])
+def _format_instance_mapping(conductor_api, ctxt, instance):
+ bdms = conductor_api.block_device_mapping_get_all_by_instance(
+ ctxt, instance)
return block_device.instance_block_mapping(instance, bdms)
diff --git a/nova/api/metadata/handler.py b/nova/api/metadata/handler.py
index 4a425f876..cedb27370 100644
--- a/nova/api/metadata/handler.py
+++ b/nova/api/metadata/handler.py
@@ -26,6 +26,7 @@ import webob.exc
from nova.api.metadata import base
from nova.common import memorycache
+from nova import conductor
from nova import exception
from nova.openstack.common import cfg
from nova.openstack.common import log as logging
@@ -58,6 +59,7 @@ class MetadataRequestHandler(wsgi.Application):
def __init__(self):
self._cache = memorycache.get_client()
+ self.conductor_api = conductor.API()
def get_metadata_by_remote_address(self, address):
if not address:
@@ -69,7 +71,7 @@ class MetadataRequestHandler(wsgi.Application):
return data
try:
- data = base.get_metadata_by_address(address)
+ data = base.get_metadata_by_address(self.conductor_api, address)
except exception.NotFound:
return None
@@ -84,7 +86,8 @@ class MetadataRequestHandler(wsgi.Application):
return data
try:
- data = base.get_metadata_by_instance_id(instance_id, address)
+ data = base.get_metadata_by_instance_id(self.conductor_api,
+ instance_id, address)
except exception.NotFound:
return None