diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 5c7c35e2..e7cce341 100644 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -1536,7 +1536,7 @@ class VolumeAttachment(object): class Volume(TaggedEC2Resource): - def __init__(self, ec2_backend, volume_id, size, zone, snapshot_id=None): + def __init__(self, ec2_backend, volume_id, size, zone, snapshot_id=None, encrypted=False): self.id = volume_id self.size = size self.zone = zone @@ -1544,6 +1544,7 @@ class Volume(TaggedEC2Resource): self.attachment = None self.snapshot_id = snapshot_id self.ec2_backend = ec2_backend + self.encrypted = encrypted @classmethod def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name): @@ -1593,6 +1594,9 @@ class Volume(TaggedEC2Resource): if filter_name == 'volume-id': return self.id + if filter_name == 'encrypted': + return str(self.encrypted).lower() + filter_value = super(Volume, self).get_filter_value(filter_name) if filter_value is None: @@ -1602,7 +1606,7 @@ class Volume(TaggedEC2Resource): class Snapshot(TaggedEC2Resource): - def __init__(self, ec2_backend, snapshot_id, volume, description): + def __init__(self, ec2_backend, snapshot_id, volume, description, encrypted=False): self.id = snapshot_id self.volume = volume self.description = description @@ -1610,6 +1614,7 @@ class Snapshot(TaggedEC2Resource): self.create_volume_permission_groups = set() self.ec2_backend = ec2_backend self.status = 'completed' + self.encrypted = encrypted def get_filter_value(self, filter_name): @@ -1628,6 +1633,9 @@ class Snapshot(TaggedEC2Resource): if filter_name == 'volume-size': return self.volume.size + if filter_name == 'encrypted': + return str(self.encrypted).lower() + filter_value = super(Snapshot, self).get_filter_value(filter_name) if filter_value is None: @@ -1643,14 +1651,16 @@ class EBSBackend(object): self.snapshots = {} super(EBSBackend, self).__init__() - def create_volume(self, size, zone_name, snapshot_id=None): + def create_volume(self, size, zone_name, snapshot_id=None, encrypted=False): volume_id = random_volume_id() zone = self.get_zone_by_name(zone_name) if snapshot_id: snapshot = self.get_snapshot(snapshot_id) if size is None: size = snapshot.volume.size - volume = Volume(self, volume_id, size, zone, snapshot_id) + if snapshot.encrypted: + encrypted = snapshot.encrypted + volume = Volume(self, volume_id, size, zone, snapshot_id, encrypted) self.volumes[volume_id] = volume return volume @@ -1699,7 +1709,7 @@ class EBSBackend(object): def create_snapshot(self, volume_id, description): snapshot_id = random_snapshot_id() volume = self.get_volume(volume_id) - snapshot = Snapshot(self, snapshot_id, volume, description) + snapshot = Snapshot(self, snapshot_id, volume, description, volume.encrypted) self.snapshots[snapshot_id] = snapshot return snapshot diff --git a/moto/ec2/responses/elastic_block_store.py b/moto/ec2/responses/elastic_block_store.py index 2324cb35..a0537e6a 100644 --- a/moto/ec2/responses/elastic_block_store.py +++ b/moto/ec2/responses/elastic_block_store.py @@ -29,7 +29,8 @@ class ElasticBlockStore(BaseResponse): size = self._get_param('Size') zone = self._get_param('AvailabilityZone') snapshot_id = self._get_param('SnapshotId') - volume = self.ec2_backend.create_volume(size, zone, snapshot_id) + encrypted = self._get_param('Encrypted') or 'false' + volume = self.ec2_backend.create_volume(size, zone, snapshot_id, encrypted) template = self.response_template(CREATE_VOLUME_RESPONSE) return template.render(volume=volume) @@ -117,6 +118,7 @@ CREATE_VOLUME_RESPONSE = """ @@ -214,6 +218,7 @@ DESCRIBE_SNAPSHOTS_RESPONSE = """