Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
Merge pull request #2587 from jcrobak/block-device-mapping-ebs-encrypted
Browse files Browse the repository at this point in the history
Support EBS encryption in BlockDeviceType. Fixes #2587, #2480.
  • Loading branch information
danielgtaylor committed Sep 2, 2014
2 parents 8525616 + 2e771c1 commit 7a39741
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
14 changes: 13 additions & 1 deletion boto/ec2/blockdevicemapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ def __init__(self,
delete_on_termination=False,
size=None,
volume_type=None,
iops=None):
iops=None,
encrypted=None):
self.connection = connection
self.ephemeral_name = ephemeral_name
self.no_device = no_device
Expand All @@ -50,6 +51,7 @@ def __init__(self,
self.size = size
self.volume_type = volume_type
self.iops = iops
self.encrypted = encrypted

def startElement(self, name, attrs, connection):
pass
Expand All @@ -76,6 +78,8 @@ def endElement(self, name, value, connection):
self.volume_type = value
elif lname == 'iops':
self.iops = int(value)
elif lname == 'encrypted':
self.encrypted = (value == 'true')
else:
setattr(self, name, value)

Expand Down Expand Up @@ -150,4 +154,12 @@ def _build_list_params(self, params, prefix=''):
params['%s.Ebs.VolumeType' % pre] = block_dev.volume_type
if block_dev.iops is not None:
params['%s.Ebs.Iops' % pre] = block_dev.iops
# The encrypted flag (even if False) cannot be specified for the root EBS
# volume.
if block_dev.encrypted is not None:
if block_dev.encrypted:
params['%s.Ebs.Encrypted' % pre] = 'true'
else:
params['%s.Ebs.Encrypted' % pre] = 'false'

i += 1
14 changes: 12 additions & 2 deletions tests/unit/ec2/test_blockdevicemapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,14 @@ def test_endElement_with_name_deleteOnTermination_value_other(self):
self.block_device_type.endElement("deleteOnTermination", 'something else', None)
self.assertEqual(self.block_device_type.delete_on_termination, False)

def test_endElement_with_name_encrypted_value_true(self):
self.block_device_type.endElement("Encrypted", "true", None)
self.assertEqual(self.block_device_type.encrypted, True)

def test_endElement_with_name_Encrypted_value_other(self):
self.block_device_type.endElement("Encrypted", 'something else', None)
self.assertEqual(self.block_device_type.encrypted, False)


class BlockDeviceMappingTests(unittest.TestCase):
def setUp(self):
Expand All @@ -56,7 +64,8 @@ def block_device_type_eq(self, b1, b2):
b1.status == b2.status,
b1.attach_time == b2.attach_time,
b1.delete_on_termination == b2.delete_on_termination,
b1.size == b2.size])
b1.size == b2.size,
b1.encrypted == b2.encrypted])

def test_startElement_with_name_ebs_sets_and_returns_current_value(self):
retval = self.block_device_mapping.startElement("ebs", None, None)
Expand Down Expand Up @@ -97,7 +106,7 @@ def test_run_instances_block_device_mapping(self):
# Autoscaling).
self.set_http_response(status_code=200)
dev_sdf = BlockDeviceType(snapshot_id='snap-12345')
dev_sdg = BlockDeviceType(snapshot_id='snap-12346', delete_on_termination=True)
dev_sdg = BlockDeviceType(snapshot_id='snap-12346', delete_on_termination=True, encrypted=True)

class OrderedBlockDeviceMapping(OrderedDict, BlockDeviceMapping):
pass
Expand All @@ -120,6 +129,7 @@ class OrderedBlockDeviceMapping(OrderedDict, BlockDeviceMapping):
'BlockDeviceMapping.2.DeviceName': '/dev/sdg',
'BlockDeviceMapping.2.Ebs.DeleteOnTermination': 'true',
'BlockDeviceMapping.2.Ebs.SnapshotId': 'snap-12346',
'BlockDeviceMapping.2.Ebs.Encrypted': 'true',
'ImageId': '123456',
'InstanceType': 'm1.large',
'MaxCount': 1,
Expand Down

0 comments on commit 7a39741

Please sign in to comment.