12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #! /usr/bin/python
- #
- # Find an instance within a profile, across all regions
- #
- # Unbuffered, no CRLF print:
- from __future__ import print_function
- import sys, os
- import boto3, boto3.session, botocore
- import threading # We may not do it yet, but developing with threadsafe in mind, as best I can
- try:
- # Python 3
- import builtins
- except ImportError:
- # Python 2
- import __builtin__ as builtins
- # Debug levels:
- # 1 = Show progress
- # 2 = Informational
- # 5 = Include boto3 logging
- DEBUG=0
- # Fancy print function to make it 3.4 compatible:
- if len(sys.argv) != 3:
- print("Usage: " + os.path.basename(sys.argv[0]) + " <profile> <searchstring>")
- exit(1)
- if DEBUG >= 5:
- boto3.set_stream_logger('botocore', level=DEBUG)
- PROFILE=sys.argv[1]
- SEARCHSTRING=sys.argv[2]
- # Set the profile to use
- try:
- boto3.setup_default_session(profile_name=PROFILE)
- except:
- print("Could not find profile: " + PROFILE)
- exit(2)
- # Connect to ec2
- ec2 = boto3.client('ec2')
- # Grab list of regions
- regions = set()
- for region in ec2.describe_regions()['Regions']:
- regions.add(region['RegionName'])
- # For each array, let's search:
- FOUND=0
- FOUNDSTR=""
- if DEBUG == 1:
- print("Searching.", end="")
- sys.stdout.flush()
- for region in regions:
- if DEBUG == 1:
- print(".", end="")
- sys.stdout.flush()
- if DEBUG >= 2:
- print("Searching region " + region + " in profile " + PROFILE)
- ec2 = boto3.client('ec2', region_name=region)
- try:
- instance = ec2.describe_instances(InstanceIds=[ SEARCHSTRING ])
- except botocore.exceptions.ClientError:
- # Not Found
- continue
- except:
- print(str( sys.exc_info() ))
- FOUND=FOUND+1
- if DEBUG >= 2:
- print("FOUND in profile '" + PROFILE + "', Region: '" + region + "'")
- if FOUND > 1:
- FOUNDSTR = FOUNDSTR + "\n"
- # Add to output
- for r in instance['Reservations']:
- for i in r['Instances']:
- FOUNDSTR = "FOUND\t" + PROFILE + "\t" + region + "\t" + i['InstanceId']
- # End of for region
- if DEBUG == 1:
- print(".")
- sys.stdout.flush()
- if DEBUG >= 2:
- print("Found " + str(FOUND) + " instances.")
- if FOUND > 0:
- print(FOUNDSTR)
- exit(0)
- else:
- if DEBUG == 1:
- print("notfound")
- exit(255)
|