Browse Source

Python version works 100%

Fred Damstra 9 years ago
parent
commit
a5ca2e8dec
1 changed files with 90 additions and 0 deletions
  1. 90 0
      FindInstanceInProfile.py

+ 90 - 0
FindInstanceInProfile.py

@@ -0,0 +1,90 @@
+#! /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
+import boto3.session
+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]) + "<searchstring> <profile>")
+	exit(1)
+
+if DEBUG >= 5:
+	boto3.set_stream_logger('botocore', level=DEBUG)
+
+SEARCHSTRING=sys.argv[1]
+PROFILE=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 ])
+		FOUND=FOUND+1
+		if DEBUG >= 2:
+			print("FOUND in profile '" + PROFILE + "', Region: '" + region + "'")
+		if FOUND > 1:
+			FOUNDSTR = FOUNDSTR + "\n"
+		FOUNDSTR = FOUNDSTR + "FOUND in profile '" + PROFILE + "', Region: '" + region
+	except:
+		if DEBUG >= 2:
+			print("Not found in profile '" + PROFILE + "', Region: '" + region + "'")
+# 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("Not found.")
+	exit(255)
+