summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2011-03-08 20:25:05 +0000
committerVishvananda Ishaya <vishvananda@gmail.com>2011-03-08 20:25:05 +0000
commit23d3be4b6f28359211e29212867157daeac9e142 (patch)
tree1adf8ad2eb3d5a39c67304731bd14d3eb60745f3
parent4517117a71c03526aca8f245a70760c45e5214c0 (diff)
downloadnova-23d3be4b6f28359211e29212867157daeac9e142.tar.gz
nova-23d3be4b6f28359211e29212867157daeac9e142.tar.xz
nova-23d3be4b6f28359211e29212867157daeac9e142.zip
update code to work with new container and disk formats from glance
-rwxr-xr-xbin/nova-manage45
-rw-r--r--nova/api/ec2/cloud.py9
-rw-r--r--nova/image/s3.py7
3 files changed, 42 insertions, 19 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index b97d8b81d..b8e0563c7 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -96,6 +96,7 @@ flags.DECLARE('network_size', 'nova.network.manager')
flags.DECLARE('vlan_start', 'nova.network.manager')
flags.DECLARE('vpn_start', 'nova.network.manager')
flags.DECLARE('fixed_range_v6', 'nova.network.manager')
+flags.DECLARE('images_path', 'nova.image.local')
flags.DEFINE_flag(flags.HelpFlag())
flags.DEFINE_flag(flags.HelpshortFlag())
flags.DEFINE_flag(flags.HelpXMLFlag())
@@ -743,17 +744,20 @@ class ImageCommands(object):
def __init__(self, *args, **kwargs):
self.image_service = utils.import_object(FLAGS.image_service)
- def _register(self, image_type, path, owner, name=None,
- is_public='T', architecture='x86_64',
- kernel_id=None, ramdisk_id=None):
- meta = {'type': image_type,
- 'is_public': True,
+ def _register(self, image_type, disk_format, container_format,
+ path, owner, name=None, is_public='T',
+ architecture='x86_64', kernel_id=None, ramdisk_id=None):
+ meta = {'is_public': True,
'name': name,
+ 'disk_format': disk_format,
+ 'container_format': container_format,
'properties': {'image_state': 'available',
'owner': owner,
+ 'type': image_type,
'architecture': architecture,
'image_location': 'local',
'is_public': (is_public == 'T')}}
+ print image_type, meta
if kernel_id:
meta['properties']['kernel_id'] = int(kernel_id)
if ramdisk_id:
@@ -781,28 +785,31 @@ class ImageCommands(object):
architecture, kernel_id, ramdisk_id)
def image_register(self, path, owner, name=None, is_public='T',
- architecture='x86_64', kernel_id=None, ramdisk_id=None):
+ architecture='x86_64', kernel_id=None, ramdisk_id=None,
+ disk_format='ami', container_format='ami'):
"""Uploads an image into the image_service
arguments: path owner [name] [is_public='T'] [architecture='x86_64']
- [kernel_id] [ramdisk_id]"""
- return self._register('machine', path, owner, name, is_public,
- architecture, kernel_id, ramdisk_id)
+ [kernel_id=None] [ramdisk_id=None]
+ [disk_format='ami'] [container_format='ami']"""
+ return self._register('machine', disk_format, container_format, path,
+ owner, name, is_public, architecture,
+ kernel_id, ramdisk_id)
def kernel_register(self, path, owner, name=None, is_public='T',
architecture='x86_64'):
"""Uploads a kernel into the image_service
arguments: path owner [name] [is_public='T'] [architecture='x86_64']
"""
- return self._register('kernel', path, owner, name, is_public,
- architecture)
+ return self._register('kernel', 'aki', 'aki', path, owner, name,
+ is_public, architecture)
def ramdisk_register(self, path, owner, name=None, is_public='T',
architecture='x86_64'):
"""Uploads a ramdisk into the image_service
arguments: path owner [name] [is_public='T'] [architecture='x86_64']
"""
- return self._register('ramdisk', path, owner, name, is_public,
- architecture)
+ return self._register('ramdisk', 'ari', 'ari', path, owner, name,
+ is_public, architecture)
def _lookup(self, old_image_id):
try:
@@ -813,12 +820,19 @@ class ImageCommands(object):
return image['id']
def _old_to_new(self, old):
- new = {'type': old['type'],
+ mapping = {'machine': 'ami',
+ 'kernel': 'aki',
+ 'ramdisk': 'ari'}
+ container_format = mapping[old['type']]
+ disk_format = container_format
+ new = {'disk_format': disk_format,
+ 'container_format': container_format,
'is_public': True,
'name': old['imageId'],
'properties': {'image_state': old['imageState'],
'owner': old['imageOwnerId'],
'architecture': old['architecture'],
+ 'type': old['type'],
'image_location': old['imageLocation'],
'is_public': old['isPublic']}}
if old.get('kernelId'):
@@ -851,7 +865,8 @@ class ImageCommands(object):
# to move the files out of the way before importing
# so we aren't writing to the same directory. This
# may fail if the dir was a mointpoint.
- if directory == os.path.abspath(FLAGS.images_path):
+ if (FLAGS.image_service == 'nova.image.local.LocalImageService'
+ and directory == os.path.abspath(FLAGS.images_path)):
new_dir = "%s_bak" % directory
os.move(directory, new_dir)
os.mkdir(directory)
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 6479c9445..6b79f7f53 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -867,7 +867,8 @@ class CloudController(object):
def _format_image(self, image):
"""Convert from format defined by BaseImageService to S3 format."""
i = {}
- ec2_id = self._image_ec2_id(image.get('id'), image.get('type'))
+ image_type = image['properties'].get('type')
+ ec2_id = self._image_ec2_id(image.get('id'), image_type)
name = image.get('name')
if name:
i['imageId'] = "%s (%s)" % (ec2_id, name)
@@ -882,7 +883,7 @@ class CloudController(object):
i['imageOwnerId'] = image['properties'].get('owner_id')
i['imageLocation'] = image['properties'].get('image_location')
i['imageState'] = image['properties'].get('image_state')
- i['type'] = image.get('type')
+ i['type'] = image_type
i['isPublic'] = str(image['properties'].get('is_public', '')) == 'True'
i['architecture'] = image['properties'].get('architecture')
return i
@@ -915,7 +916,8 @@ class CloudController(object):
image_location = kwargs['name']
metadata = {'properties': {'image_location': image_location}}
image = self.image_service.create(context, metadata)
- image_id = self._image_ec2_id(image['id'], image['type'])
+ image_id = self._image_ec2_id(image['id'],
+ image['properties']['type'])
msg = _("Registered image %(image_location)s with"
" id %(image_id)s") % locals()
LOG.audit(msg, context=context)
@@ -954,6 +956,7 @@ class CloudController(object):
raise exception.NotFound(_('Image %s not found') % image_id)
internal_id = image['id']
del(image['id'])
+ raise Exception(image)
image['properties']['is_public'] = (operation_type == 'add')
return self.image_service.update(context, internal_id, image)
diff --git a/nova/image/s3.py b/nova/image/s3.py
index ab6eea8cf..bf104c29a 100644
--- a/nova/image/s3.py
+++ b/nova/image/s3.py
@@ -139,11 +139,13 @@ class S3ImageService(service.BaseImageService):
manifest = key.get_contents_as_string()
manifest = ElementTree.fromstring(manifest)
+ image_format = 'ami'
image_type = 'machine'
try:
kernel_id = manifest.find("machine_configuration/kernel_id").text
if kernel_id == 'true':
+ image_format = 'aki'
image_type = 'kernel'
kernel_id = None
except:
@@ -152,6 +154,7 @@ class S3ImageService(service.BaseImageService):
try:
ramdisk_id = manifest.find("machine_configuration/ramdisk_id").text
if ramdisk_id == 'true':
+ image_format = 'ari'
image_type = 'ramdisk'
ramdisk_id = None
except:
@@ -173,7 +176,9 @@ class S3ImageService(service.BaseImageService):
properties['ramdisk_id'] = ec2utils.ec2_id_to_id(ramdisk_id)
properties['is_public'] = False
- metadata.update({'type': image_type,
+ properties['type'] = image_type
+ metadata.update({'disk_format': image_format,
+ 'container_format': image_format,
'status': 'queued',
'is_public': True,
'properties': properties})