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

Commit

Permalink
Merge branch 'ryansydnor-enc' into develop
Browse files Browse the repository at this point in the history
* ryansydnor-enc:
  Add encryption capability to AMI copy
  • Loading branch information
jamesls committed Mar 21, 2016
2 parents dd5f87c + 51e6035 commit 99fbd8a
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 14 deletions.
7 changes: 6 additions & 1 deletion boto/ec2/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -4405,7 +4405,8 @@ def get_all_instance_types(self):
return self.get_list('DescribeInstanceTypes', params, [('item', InstanceType)], verb='POST')

def copy_image(self, source_region, source_image_id, name=None,
description=None, client_token=None, dry_run=False):
description=None, client_token=None, dry_run=False,
encrypted=None, kms_key_id=None):
"""
:type dry_run: bool
:param dry_run: Set to True if the operation should not actually run.
Expand All @@ -4422,6 +4423,10 @@ def copy_image(self, source_region, source_image_id, name=None,
params['Description'] = description
if client_token is not None:
params['ClientToken'] = client_token
if encrypted is not None:
params['Encrypted'] = 'true' if encrypted else 'false'
if kms_key_id is not None:
params['KmsKeyId'] = kms_key_id
if dry_run:
params['DryRun'] = 'true'
return self.get_object('CopyImage', params, CopyImage,
Expand Down
74 changes: 61 additions & 13 deletions tests/unit/ec2/test_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -531,37 +531,85 @@ def default_body(self):
</CopyImageResponse>
"""

def test_copy_image(self):
def test_copy_image_required_params(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id',
'name', 'description', 'client-token')
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id')
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
self.assert_request_parameters({
'Action': 'CopyImage',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

def test_copy_image_name_and_description(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', 'name', 'description')
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
self.assert_request_parameters({
'Action': 'CopyImage',
'Description': 'description',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id',
'Name': 'name',
'Description': 'description'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

def test_copy_image_client_token(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', client_token='client-token')
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
self.assert_request_parameters({
'Action': 'CopyImage',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id',
'ClientToken': 'client-token'},
ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'ClientToken': 'client-token'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

def test_copy_image_without_name(self):
def test_copy_image_encrypted(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id',
description='description',
client_token='client-token')
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=True)
self.assertEqual(copied_ami.image_id, 'ami-copied-id')

self.assert_request_parameters({
'Action': 'CopyImage',
'Description': 'description',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id',
'ClientToken': 'client-token'},
ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'Encrypted': 'true'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

def test_copy_image_not_encrypted(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=False)
self.assertEqual(copied_ami.image_id, 'ami-copied-id')

self.assert_request_parameters({
'Action': 'CopyImage',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id',
'Encrypted': 'false'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

def test_copy_image_encrypted_with_kms_key(self):
self.set_http_response(status_code=200)
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=False, kms_key_id='kms-key')
self.assertEqual(copied_ami.image_id, 'ami-copied-id')

self.assert_request_parameters({
'Action': 'CopyImage',
'SourceRegion': 'us-west-2',
'SourceImageId': 'ami-id',
'Encrypted': 'false',
'KmsKeyId': 'kms-key'
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
'SignatureVersion', 'Timestamp',
'Version'])

Expand Down

0 comments on commit 99fbd8a

Please sign in to comment.