summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2011-05-27 11:08:02 +0900
committerIsaku Yamahata <yamahata@valinux.co.jp>2011-05-27 11:08:02 +0900
commit42272241d24e120398f741e9c8fa7d810b921209 (patch)
tree1d2c4bbb135af35247d471aea0a95e2a75582f80
parent9c3411c13936438964cc8a21b031c819edbd0ed1 (diff)
api/ec2: parse ec2 block device mapping and pass it down to compute api
teach ec2 api block device mapping.
-rw-r--r--nova/api/ec2/cloud.py20
-rw-r--r--nova/compute/api.py2
2 files changed, 20 insertions, 2 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 524da291e..56b958458 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -867,6 +867,23 @@ class CloudController(object):
if kwargs.get('ramdisk_id'):
ramdisk = self._get_image(context, kwargs['ramdisk_id'])
kwargs['ramdisk_id'] = ramdisk['id']
+ for bdm in kwargs.get('block_device_mapping', []):
+ # BlockDevicedMapping.<N>.DeviceName
+ # BlockDevicedMapping.<N>.Ebs.SnapshotId
+ # BlockDevicedMapping.<N>.Ebs.VolumeSize
+ # BlockDevicedMapping.<N>.Ebs.DeleteOnTermination
+ # BlockDevicedMapping.<N>.VirtualName
+ # => remove .Ebs and allow volume id in SnapshotId
+ ebs = bdm.pop('ebs', None)
+ if ebs:
+ ec2_id = ebs.pop('snapshot_id')
+ id = ec2utils.ec2_id_to_id(ec2_id)
+ if ec2_id.startswith('snap-'):
+ bdm['snapshot_id'] = id
+ elif ec2_id.startswith('vol-'):
+ bdm['volume_id'] = id
+ ebs.setdefault('delete_on_termination', True)
+ bdm.update(ebs)
instances = self.compute_api.create(context,
instance_type=instance_types.get_instance_type_by_name(
kwargs.get('instance_type', None)),
@@ -881,7 +898,8 @@ class CloudController(object):
user_data=kwargs.get('user_data'),
security_group=kwargs.get('security_group'),
availability_zone=kwargs.get('placement', {}).get(
- 'AvailabilityZone'))
+ 'AvailabilityZone'),
+ block_device_mapping=kwargs.get('block_device_mapping', {}))
return self._format_run_instances(context,
instances[0]['reservation_id'])
diff --git a/nova/compute/api.py b/nova/compute/api.py
index a12f8d515..b809e59e2 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -134,7 +134,7 @@ class API(base.Base):
display_name='', display_description='',
key_name=None, key_data=None, security_group='default',
availability_zone=None, user_data=None, metadata={},
- injected_files=None):
+ injected_files=None, block_device_mapping=[]):
"""Create the number and type of instances requested.
Verifies that quota and other arguments are valid.