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

Commit 99fbd8a

Browse files
committed
Merge branch 'ryansydnor-enc' into develop
* ryansydnor-enc: Add encryption capability to AMI copy
2 parents dd5f87c + 51e6035 commit 99fbd8a

File tree

2 files changed

+67
-14
lines changed

2 files changed

+67
-14
lines changed

boto/ec2/connection.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4405,7 +4405,8 @@ def get_all_instance_types(self):
44054405
return self.get_list('DescribeInstanceTypes', params, [('item', InstanceType)], verb='POST')
44064406

44074407
def copy_image(self, source_region, source_image_id, name=None,
4408-
description=None, client_token=None, dry_run=False):
4408+
description=None, client_token=None, dry_run=False,
4409+
encrypted=None, kms_key_id=None):
44094410
"""
44104411
:type dry_run: bool
44114412
:param dry_run: Set to True if the operation should not actually run.
@@ -4422,6 +4423,10 @@ def copy_image(self, source_region, source_image_id, name=None,
44224423
params['Description'] = description
44234424
if client_token is not None:
44244425
params['ClientToken'] = client_token
4426+
if encrypted is not None:
4427+
params['Encrypted'] = 'true' if encrypted else 'false'
4428+
if kms_key_id is not None:
4429+
params['KmsKeyId'] = kms_key_id
44254430
if dry_run:
44264431
params['DryRun'] = 'true'
44274432
return self.get_object('CopyImage', params, CopyImage,

tests/unit/ec2/test_connection.py

Lines changed: 61 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -531,37 +531,85 @@ def default_body(self):
531531
</CopyImageResponse>
532532
"""
533533

534-
def test_copy_image(self):
534+
def test_copy_image_required_params(self):
535535
self.set_http_response(status_code=200)
536-
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id',
537-
'name', 'description', 'client-token')
536+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id')
538537
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
538+
self.assert_request_parameters({
539+
'Action': 'CopyImage',
540+
'SourceRegion': 'us-west-2',
541+
'SourceImageId': 'ami-id'
542+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
543+
'SignatureVersion', 'Timestamp',
544+
'Version'])
539545

546+
def test_copy_image_name_and_description(self):
547+
self.set_http_response(status_code=200)
548+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', 'name', 'description')
549+
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
540550
self.assert_request_parameters({
541551
'Action': 'CopyImage',
542-
'Description': 'description',
552+
'SourceRegion': 'us-west-2',
553+
'SourceImageId': 'ami-id',
543554
'Name': 'name',
555+
'Description': 'description'
556+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
557+
'SignatureVersion', 'Timestamp',
558+
'Version'])
559+
560+
def test_copy_image_client_token(self):
561+
self.set_http_response(status_code=200)
562+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', client_token='client-token')
563+
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
564+
self.assert_request_parameters({
565+
'Action': 'CopyImage',
544566
'SourceRegion': 'us-west-2',
545567
'SourceImageId': 'ami-id',
546-
'ClientToken': 'client-token'},
547-
ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
568+
'ClientToken': 'client-token'
569+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
548570
'SignatureVersion', 'Timestamp',
549571
'Version'])
550572

551-
def test_copy_image_without_name(self):
573+
def test_copy_image_encrypted(self):
552574
self.set_http_response(status_code=200)
553-
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id',
554-
description='description',
555-
client_token='client-token')
575+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=True)
556576
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
557577

558578
self.assert_request_parameters({
559579
'Action': 'CopyImage',
560-
'Description': 'description',
561580
'SourceRegion': 'us-west-2',
562581
'SourceImageId': 'ami-id',
563-
'ClientToken': 'client-token'},
564-
ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
582+
'Encrypted': 'true'
583+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
584+
'SignatureVersion', 'Timestamp',
585+
'Version'])
586+
587+
def test_copy_image_not_encrypted(self):
588+
self.set_http_response(status_code=200)
589+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=False)
590+
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
591+
592+
self.assert_request_parameters({
593+
'Action': 'CopyImage',
594+
'SourceRegion': 'us-west-2',
595+
'SourceImageId': 'ami-id',
596+
'Encrypted': 'false'
597+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
598+
'SignatureVersion', 'Timestamp',
599+
'Version'])
600+
601+
def test_copy_image_encrypted_with_kms_key(self):
602+
self.set_http_response(status_code=200)
603+
copied_ami = self.ec2.copy_image('us-west-2', 'ami-id', encrypted=False, kms_key_id='kms-key')
604+
self.assertEqual(copied_ami.image_id, 'ami-copied-id')
605+
606+
self.assert_request_parameters({
607+
'Action': 'CopyImage',
608+
'SourceRegion': 'us-west-2',
609+
'SourceImageId': 'ami-id',
610+
'Encrypted': 'false',
611+
'KmsKeyId': 'kms-key'
612+
}, ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
565613
'SignatureVersion', 'Timestamp',
566614
'Version'])
567615

0 commit comments

Comments
 (0)