Added the ability to filter by tag-key.

This commit is contained in:
Omer Katz 2014-10-01 15:33:12 +03:00
commit 444ab96b4f
3 changed files with 59 additions and 4 deletions

View file

@ -1,9 +1,9 @@
from __future__ import unicode_literals
import six
import copy
import itertools
from collections import defaultdict
import six
import boto
from boto.ec2.instance import Instance as BotoInstance, Reservation
from boto.ec2.blockdevicemapping import BlockDeviceMapping, BlockDeviceType
@ -70,7 +70,7 @@ from .utils import (
random_volume_id,
random_vpc_id,
random_vpc_peering_connection_id,
)
is_filter_matching)
class InstanceState(object):
@ -93,6 +93,9 @@ class TaggedEC2Instance(object):
if tag['key'] == tagname:
return tag['value']
if filter_name == 'tag-key':
return [tag['key'] for tag in tags]
class NetworkInterface(object):
def __init__(self, subnet, private_ip_address, device_index=0, public_ip_auto_assign=True, group_ids=None):
@ -1194,7 +1197,7 @@ class VPCBackend(object):
if filters:
for (_filter, _filter_value) in filters.items():
vpcs = [ vpc for vpc in vpcs if vpc.get_filter_value(_filter) in _filter_value ]
vpcs = [ vpc for vpc in vpcs if is_filter_matching(vpc, _filter, _filter_value) ]
return vpcs

View file

@ -278,6 +278,19 @@ def filter_reservations(reservations, filter_dict):
return result
def is_filter_matching(obj, filter, filter_value):
value = obj.get_filter_value(filter)
if isinstance(value, six.string_types):
return value in filter_value
try:
value = set(value)
return value.issubset(filter_value) or value.issuperset(filter_value)
except TypeError:
return value in filter_value
# not really random ( http://xkcd.com/221/ )
def random_key_pair():
return {