Add ec2 instance state reason

- Add instance.reason and instance.state_reason
(http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-Item
Type-StateReasonType.html)
- Add ec2 filtering by state-reason-code and state-reason-message
This commit is contained in:
Arthur Wang 2014-10-20 15:54:00 -04:00
commit 6963866c7e
3 changed files with 42 additions and 3 deletions

View file

@ -266,15 +266,28 @@ def keypair_names_from_querystring(querystring_dict):
filter_dict_attribute_mapping = {
'instance-state-name': 'state',
'instance-id': 'id'
'instance-id': 'id',
'state-reason-code': '_state_reason.code',
'state-reason-message': '_state_reason.message'
}
def get_instance_value(instance, instance_attr):
keys = instance_attr.split('.')
val = instance
for key in keys:
if hasattr(val, key):
val = getattr(val, key)
elif isinstance(val, dict):
val = val[key]
else:
return None
return val
def passes_filter_dict(instance, filter_dict):
for filter_name, filter_values in filter_dict.items():
if filter_name in filter_dict_attribute_mapping:
instance_attr = filter_dict_attribute_mapping[filter_name]
instance_value = getattr(instance, instance_attr)
instance_value = get_instance_value(instance, instance_attr)
if instance_value not in filter_values:
return False
elif filter_name.startswith('tag:'):