With @ethome, add filtering of instances by security group id
This commit is contained in:
parent
3a82f089a2
commit
573a73aa01
@ -324,16 +324,20 @@ filter_dict_attribute_mapping = {
|
||||
'state-reason-code': '_state_reason.code',
|
||||
'source-dest-check': 'source_dest_check',
|
||||
'vpc-id': 'vpc_id',
|
||||
'group-id': 'security_groups',
|
||||
'instance.group-id': 'security_groups'
|
||||
}
|
||||
|
||||
|
||||
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 = get_object_value(instance, instance_attr)
|
||||
if instance_value not in filter_values:
|
||||
if not instance_value_in_filter_values(instance_value, filter_values):
|
||||
return False
|
||||
|
||||
elif is_tag_filter(filter_name):
|
||||
if not tag_filter_matches(instance, filter_name, filter_values):
|
||||
return False
|
||||
@ -343,6 +347,13 @@ def passes_filter_dict(instance, filter_dict):
|
||||
filter_name)
|
||||
return True
|
||||
|
||||
def instance_value_in_filter_values(instance_value, filter_values):
|
||||
if isinstance(instance_value, list):
|
||||
if not set(filter_values).intersection(set(instance_value)):
|
||||
return False
|
||||
elif instance_value not in filter_values:
|
||||
return False
|
||||
return True
|
||||
|
||||
def filter_reservations(reservations, filter_dict):
|
||||
result = []
|
||||
|
@ -600,3 +600,18 @@ def test_describe_instance_status_with_non_running_instances():
|
||||
|
||||
status3 = next((s for s in all_status if s.id == instance3.id), None)
|
||||
status3.state_name.should.equal('running')
|
||||
|
||||
@mock_ec2
|
||||
def test_get_instance_by_security_group():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
|
||||
conn.run_instances('ami-1234abcd')
|
||||
instance = conn.get_only_instances()[0]
|
||||
|
||||
security_group = conn.create_security_group('test', 'test')
|
||||
conn.modify_instance_attribute(instance.id, "groupSet", [security_group.id])
|
||||
|
||||
security_group_instances = security_group.instances()
|
||||
|
||||
assert len(security_group_instances) == 1
|
||||
assert security_group_instances[0].id == instance.id
|
||||
|
Loading…
Reference in New Issue
Block a user