Merge pull request #219 from joekiller/ami_filter_state

allow get_filter_value to return state of ami and test
This commit is contained in:
Steve Pulec 2014-09-30 22:25:34 -04:00
commit b0fd12dc35
2 changed files with 32 additions and 0 deletions

View File

@ -604,6 +604,12 @@ class Ami(TaggedEC2Instance):
return getattr(self,filter_name)
elif filter_name == 'image-id':
return self.id
elif filter_name == 'state':
return self.state
elif filter_name.startswith('tag:'):
tag_name = filter_name.replace('tag:', '', 1)
tags = dict((tag['key'], tag['value']) for tag in self.get_tags())
return tags.get(tag_name)
else:
ec2_backend.raise_not_implemented_error("The filter '{0}' for DescribeImages".format(filter_name))

View File

@ -132,6 +132,32 @@ def test_ami_filters():
amis_by_id = conn.get_all_images(filters={'image-id': imageA.id})
set([ami.id for ami in amis_by_id]).should.equal(set([imageA.id]))
amis_by_id = conn.get_all_images(filters={'state': 'available'})
set([ami.id for ami in amis_by_id]).should.equal(set([imageA.id, imageB.id]))
@mock_ec2
def test_ami_filtering_via_tag():
conn = boto.connect_vpc('the_key', 'the_secret')
reservationA = conn.run_instances('ami-1234abcd')
instanceA = reservationA.instances[0]
imageA_id = conn.create_image(instanceA.id, "test-ami-A", "this is a test ami")
imageA = conn.get_image(imageA_id)
imageA.add_tag("a key", "some value")
reservationB = conn.run_instances('ami-abcd1234')
instanceB = reservationB.instances[0]
imageB_id = conn.create_image(instanceB.id, "test-ami-B", "this is a test ami")
imageB = conn.get_image(imageB_id)
imageB.add_tag("another key", "some other value")
amis_by_tagA = conn.get_all_images(filters={'tag:a key': 'some value'})
set([ami.id for ami in amis_by_tagA]).should.equal(set([imageA.id]))
amis_by_tagB = conn.get_all_images(filters={'tag:another key': 'some other value'})
set([ami.id for ami in amis_by_tagB]).should.equal(set([imageB.id]))
@mock_ec2
def test_getting_missing_ami():