/
finder.py
61 lines (50 loc) · 1.74 KB
/
finder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import logging
from boto import ec2
from boto.exception import EC2ResponseError
from errors import UnknownAWSInstance
def find_region(id):
regions = ec2.regions()
for region in regions:
conn = region.connect()
logging.info('Searching in region %s' % conn.region.name)
try:
instances = conn.get_all_instances(instance_ids=[id])
if len(instances):
return conn.region
except EC2ResponseError:
pass
raise UnknownAWSInstance(id)
def get_from_regions(tags, region=None):
"""
Search for all instances that match the tags specifed. If the regions
parameter is None, then every region is searched, otherwise each the region
specified is searched. To search more than one region, pass in a list of
regions for region.
"""
def get_from_one_region(conn, tags):
instances = []
logging.info('Searching in region %s' % conn.region.name)
reservations = conn.get_all_instances(filters=tags)
for reservation in reservations:
for instance in reservation.instances:
instances.append(instance)
return instances
instances = []
if region is None:
regions = ec2.regions()
for region in regions:
conn = region.connect()
instances += get_from_one_region(conn, tags)
else:
if not isinstance(region, list):
region = [region]
for r in region:
conn = r.connect()
instances += get_from_one_region(conn, tags)
if len(instances) == 0:
raise Exception('No instances found')
return instances
if __name__ == '__main__':
import sys
region = find_region(sys.argv[1])
print region.name