mirror of
https://github.com/nmasur/dotfiles
synced 2024-11-30 05:45:37 +00:00
86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
"""Connect to Cloud instances"""
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import argparse
|
||
|
import boto3
|
||
|
|
||
|
# Initiate the parser
|
||
|
parser = argparse.ArgumentParser("Type the name of the connection you want")
|
||
|
parser.add_argument('profile', metavar='P', nargs='?',
|
||
|
help='an account to use')
|
||
|
parser.add_argument('environment', metavar='E', nargs='?',
|
||
|
help='an environment to specify')
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
# Get AWS credentials profile
|
||
|
profile_map = {
|
||
|
'gs' : {
|
||
|
'profile': 'ghoststory',
|
||
|
'prod': 'id_rsa_gstory_prod.pem',
|
||
|
'dev': 'id_rsa_gstory_prod.pem',
|
||
|
'username': 'centos',
|
||
|
},
|
||
|
'di' : {
|
||
|
'profile': 't2indies',
|
||
|
'prod': 'disintegration-prod.pem',
|
||
|
'dev': 'disintegration-dev.pem',
|
||
|
'username': 'centos',
|
||
|
},
|
||
|
'pd' : {
|
||
|
'profile': 't2indies',
|
||
|
'prod': 't2indies-prod.pem',
|
||
|
'dev': 't2indies-dev.pem',
|
||
|
'username': 'centos',
|
||
|
},
|
||
|
'corp' : {
|
||
|
'profile': 't2corp',
|
||
|
'prod': 'take2games-corp.pem',
|
||
|
'dev': 'take2games-corp.pem',
|
||
|
'username': 'ec2-user',
|
||
|
},
|
||
|
'ksp' : {
|
||
|
'profile': 'kerbal',
|
||
|
'prod': 'kerbal_prod_key.pem',
|
||
|
'dev': 'kerbal_dev_key.pem',
|
||
|
'username': 'centos',
|
||
|
},
|
||
|
}
|
||
|
profile_dict = profile_map.get(args.profile)
|
||
|
profile = profile_dict['profile']
|
||
|
|
||
|
# Connect to AWS
|
||
|
session = boto3.Session(profile_name=profile)
|
||
|
client = session.client('ec2', verify=False)
|
||
|
|
||
|
response = client.describe_instances()
|
||
|
|
||
|
print(len(response['Reservations']), "total instances\n")
|
||
|
|
||
|
matched_instances = []
|
||
|
for instance_wrapper in response['Reservations']:
|
||
|
instance = instance_wrapper['Instances'][0]
|
||
|
is_matched_env = False
|
||
|
is_matched_role = False
|
||
|
for tag in instance.get('Tags', []):
|
||
|
if tag['Key'] == "site_env" and args.environment in tag['Value']:
|
||
|
is_matched_env = True
|
||
|
if tag['Key'] == "role" and tag['Value'] == 'host':
|
||
|
is_matched_role = True
|
||
|
if tag['Key'] == "Name":
|
||
|
instance['Name'] = tag['Value']
|
||
|
if is_matched_env and is_matched_role:
|
||
|
matched_instances.append(instance)
|
||
|
|
||
|
for instance in matched_instances:
|
||
|
print(instance['Name'])
|
||
|
print(instance['PublicIpAddress'])
|
||
|
print("")
|
||
|
|
||
|
with open("aws_connect", 'w') as outfile:
|
||
|
outfile.write("ssh-keyscan {} >> ~/.ssh/known_hosts\n".format(matched_instances[0]['PublicIpAddress']))
|
||
|
outfile.write("ssh -i ~/.ssh/{} {}@{}".format(profile_dict[args.environment], profile_dict['username'], matched_instances[0]['PublicIpAddress']))
|
||
|
os.chmod("aws_connect", 0o755)
|