Use Glance to relate machine image with kernel and ramdisk

This commit is contained in:
Rick Harris
2011-01-22 21:20:09 +00:00
parent 7da2bb5bd7
commit a9ab2d0f06
3 changed files with 17 additions and 17 deletions

View File

@@ -1,3 +0,0 @@
{
"machine" : ["kernel", "ramdisk"]
}

View File

@@ -38,9 +38,6 @@ from nova.api.openstack import shared_ip_groups
LOG = logging.getLogger('nova.api.openstack')
FLAGS = flags.FLAGS
flags.DEFINE_string('os_krm_mapping_file',
'krm_mapping.json',
'Location of OpenStack Flavor/OS:EC2 Kernel/Ramdisk/Machine JSON file.')
flags.DEFINE_bool('allow_admin_api',
False,
'When True, this API service will accept admin operations.')

View File

@@ -124,17 +124,22 @@ class Controller(wsgi.Controller):
return faults.Fault(exc.HTTPNotFound())
return exc.HTTPAccepted()
def _get_kernel_ramdisk_from_image(self, image_id):
mapping_filename = FLAGS.os_krm_mapping_file
def _get_kernel_ramdisk_from_image(self, req, image_id):
"""
Machine images are associated with Kernels and Ramdisk images via
metadata stored in Glance as 'image_properties'
"""
def lookup(param):
_image_id = image_id
try:
return image['properties'][param]
except KeyError:
raise exception.NotFound(
_("%(param)s property not found for image %(_image_id)s") %
locals())
with open(mapping_filename) as f:
mapping = json.load(f)
if image_id in mapping:
return mapping[image_id]
raise exception.NotFound(
_("No entry for image '%s' in mapping file '%s'") %
(image_id, mapping_filename))
image = self._image_service.show(req.environ['nova.context'], image_id)
return lookup('kernel_id'), lookup('ramdisk_id')
def create(self, req):
""" Creates a new server for a given user """
@@ -146,7 +151,8 @@ class Controller(wsgi.Controller):
req.environ['nova.context'])[0]
image_id = common.get_image_id_from_image_hash(self._image_service,
req.environ['nova.context'], env['server']['imageId'])
kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(image_id)
kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(
req, image_id)
instances = self.compute_api.create(
req.environ['nova.context'],
instance_types.get_by_flavor_id(env['server']['flavorId']),