Better is_public support for AMIs including filtering. Closes #263.
This commit is contained in:
parent
ecd20fee50
commit
8954242086
@ -813,6 +813,14 @@ class Ami(TaggedEC2Resource):
|
||||
volume = self.ec2_backend.create_volume(15, "us-east-1a")
|
||||
self.ebs_snapshot = self.ec2_backend.create_snapshot(volume.id, "Auto-created snapshot for AMI %s" % self.id)
|
||||
|
||||
@property
|
||||
def is_public(self):
|
||||
return 'all' in self.launch_permission_groups
|
||||
|
||||
@property
|
||||
def is_public_string(self):
|
||||
return str(self.is_public).lower()
|
||||
|
||||
def get_filter_value(self, filter_name):
|
||||
if filter_name == 'virtualization-type':
|
||||
return self.virtualization_type
|
||||
@ -822,6 +830,8 @@ class Ami(TaggedEC2Resource):
|
||||
return getattr(self, filter_name)
|
||||
elif filter_name == 'image-id':
|
||||
return self.id
|
||||
elif filter_name == 'is-public':
|
||||
return str(self.is_public)
|
||||
elif filter_name == 'state':
|
||||
return self.state
|
||||
elif filter_name == 'name':
|
||||
@ -1411,7 +1421,7 @@ class VPCBackend(object):
|
||||
self.create_route_table(vpc_id, main=True)
|
||||
|
||||
# AWS creates a default Network ACL
|
||||
default_network_acl = self.create_network_acl(vpc_id, default=True)
|
||||
self.create_network_acl(vpc_id, default=True)
|
||||
|
||||
default = self.get_security_group_from_name('default', vpc_id=vpc_id)
|
||||
if not default:
|
||||
@ -2295,7 +2305,7 @@ class NetworkAclBackend(object):
|
||||
|
||||
def create_network_acl(self, vpc_id, default=False):
|
||||
network_acl_id = random_network_acl_id()
|
||||
vpc = self.get_vpc(vpc_id)
|
||||
self.get_vpc(vpc_id)
|
||||
network_acl = NetworkAcl(self, network_acl_id, vpc_id, default)
|
||||
self.network_acls[network_acl_id] = network_acl
|
||||
return network_acl
|
||||
@ -2305,7 +2315,7 @@ class NetworkAclBackend(object):
|
||||
|
||||
if network_acl_ids:
|
||||
network_acls = [network_acl for network_acl in network_acls
|
||||
if network_acl.id in network_acl_ids ]
|
||||
if network_acl.id in network_acl_ids]
|
||||
if len(network_acls) != len(network_acl_ids):
|
||||
invalid_id = list(set(network_acl_ids).difference(set([network_acl.id for network_acl in network_acls])))[0]
|
||||
raise InvalidRouteTableIdError(invalid_id)
|
||||
|
@ -84,7 +84,7 @@ DESCRIBE_IMAGES_RESPONSE = """<DescribeImagesResponse xmlns="http://ec2.amazonaw
|
||||
<imageLocation>amazon/getting-started</imageLocation>
|
||||
<imageState>{{ image.state }}</imageState>
|
||||
<imageOwnerId>111122223333</imageOwnerId>
|
||||
<isPublic>true</isPublic>
|
||||
<isPublic>{{ image.is_public_string }}</isPublic>
|
||||
<architecture>{{ image.architecture }}</architecture>
|
||||
<imageType>machine</imageType>
|
||||
<kernelId>{{ image.kernel_id }}</kernelId>
|
||||
|
@ -162,6 +162,7 @@ def test_ami_filters():
|
||||
instanceB.modify_attribute("virtualization_type", "paravirtual")
|
||||
imageB_id = conn.create_image(instanceB.id, "test-ami-B", "this is a test ami")
|
||||
imageB = conn.get_image(imageB_id)
|
||||
imageB.set_launch_permissions(group_names=("all"))
|
||||
|
||||
amis_by_architecture = conn.get_all_images(filters={'architecture': 'x86_64'})
|
||||
set([ami.id for ami in amis_by_architecture]).should.equal(set([imageB.id]))
|
||||
@ -184,6 +185,12 @@ def test_ami_filters():
|
||||
amis_by_name = conn.get_all_images(filters={'name': imageA.name})
|
||||
set([ami.id for ami in amis_by_name]).should.equal(set([imageA.id]))
|
||||
|
||||
amis_by_public = conn.get_all_images(filters={'is-public': True})
|
||||
set([ami.id for ami in amis_by_public]).should.equal(set([imageB.id]))
|
||||
|
||||
amis_by_nonpublic = conn.get_all_images(filters={'is-public': False})
|
||||
set([ami.id for ami in amis_by_nonpublic]).should.equal(set([imageA.id]))
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_ami_filtering_via_tag():
|
||||
@ -259,6 +266,8 @@ def test_ami_attribute():
|
||||
attributes = conn.get_image_attribute(image.id, attribute='launchPermission')
|
||||
attributes.attrs['groups'].should.have.length_of(1)
|
||||
attributes.attrs['groups'].should.equal(['all'])
|
||||
image = conn.get_image(image_id)
|
||||
image.is_public.should.equal(True)
|
||||
|
||||
# Add is idempotent
|
||||
conn.modify_image_attribute.when.called_with(**ADD_GROUP_ARGS).should_not.throw(EC2ResponseError)
|
||||
@ -268,6 +277,8 @@ def test_ami_attribute():
|
||||
|
||||
attributes = conn.get_image_attribute(image.id, attribute='launchPermission')
|
||||
attributes.attrs.should.have.length_of(0)
|
||||
image = conn.get_image(image_id)
|
||||
image.is_public.should.equal(False)
|
||||
|
||||
# Remove is idempotent
|
||||
conn.modify_image_attribute.when.called_with(**REMOVE_GROUP_ARGS).should_not.throw(EC2ResponseError)
|
||||
|
Loading…
Reference in New Issue
Block a user