Add ec2 filtering by instance state
This commit is contained in:
parent
76ea9172da
commit
257ca9f771
5 changed files with 98 additions and 4 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import random
|
||||
import re
|
||||
|
||||
|
||||
def random_id(prefix=''):
|
||||
|
|
@ -53,7 +54,7 @@ def resource_ids_from_querystring(querystring_dict):
|
|||
prefix = 'ResourceId'
|
||||
response_values = {}
|
||||
for key, value in querystring_dict.iteritems():
|
||||
if prefix in key:
|
||||
if key.startswith(prefix):
|
||||
resource_index = key.replace(prefix + ".", "")
|
||||
tag_key = querystring_dict.get("Tag.{}.Key".format(resource_index))[0]
|
||||
|
||||
|
|
@ -65,3 +66,42 @@ def resource_ids_from_querystring(querystring_dict):
|
|||
response_values[value[0]] = (tag_key, tag_value)
|
||||
|
||||
return response_values
|
||||
|
||||
|
||||
def filters_from_querystring(querystring_dict):
|
||||
response_values = {}
|
||||
for key, value in querystring_dict.iteritems():
|
||||
match = re.search("Filter.(\d).Name", key)
|
||||
if match:
|
||||
filter_index = match.groups()[0]
|
||||
value_prefix = "Filter.{}.Value".format(filter_index)
|
||||
filter_values = [filter_value[0] for filter_key, filter_value in querystring_dict.iteritems() if filter_key.startswith(value_prefix)]
|
||||
response_values[value[0]] = filter_values
|
||||
return response_values
|
||||
|
||||
|
||||
filter_dict_attribute_mapping = {
|
||||
'instance-state-name': 'state'
|
||||
}
|
||||
|
||||
|
||||
def passes_filter_dict(instance, filter_dict):
|
||||
for filter_name, filter_values in filter_dict.iteritems():
|
||||
if filter_name in filter_dict_attribute_mapping:
|
||||
instance_attr = filter_dict_attribute_mapping[filter_name]
|
||||
else:
|
||||
raise NotImplementedError("Filter dicts have not been implemented in Moto for '%s' yet. Feel free to open an issue at https://github.com/spulec/moto/issues", filter_name)
|
||||
instance_value = getattr(instance, instance_attr)
|
||||
if instance_value not in filter_values:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def filter_reservations(reservations, filter_dict):
|
||||
for reservation in reservations:
|
||||
new_instances = []
|
||||
for instance in reservation.instances:
|
||||
if passes_filter_dict(instance, filter_dict):
|
||||
new_instances.append(instance)
|
||||
reservation.instances = new_instances
|
||||
return reservations
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue