Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ A tool for managing AWS default account, rvm-style.
Usage:

* `avm --add -f ~/Downloads/another_random_AWS_keypair.csv -a alias_that_makes_sense` to pull a profile into ~/.aws/credentials
* `avm --use your-profile-name` to set a profile as default
* `avm` to choose default profile from the list:
* `avm --use your-profile-name` to set a profile as default in ~/.aws/credentials and ~/.aws/config, if present
* `avm` to choose default profile from a list of profiles in ~/.aws/credentials and ~/.aws/config:

![list](list.png)

Expand Down
62 changes: 35 additions & 27 deletions avm/bin/avm
Original file line number Diff line number Diff line change
Expand Up @@ -3,59 +3,67 @@ import argparse
import inquirer
import configparser
from csv import DictReader
from sys import argv
from os import environ
from os.path import expanduser, isfile
import csv

config = configparser.ConfigParser()
home = expanduser('~')
home_creds = home + '/.aws/credentials'
config.read(home_creds)

home_credentials = home + '/.aws/credentials'
credentials = configparser.ConfigParser()
credentials.read(home_credentials)

home_config = home + '/.aws/config'
config = configparser.ConfigParser()
config.read(home_config)

profiles = [
inquirer.List(
'profile',
message="Select a profile to set as default",
choices=config.sections(),
choices=list(set(credentials.sections() + config.sections())),
),
]


def magic(new_profile_name):
if new_profile_name in config:
new_profile_name_default = config[str(new_profile_name)]
config['default'] = new_profile_name_default
with open(home_creds, 'w') as configfile:
config.write(configfile)
print(f'AWS profile `{new_profile_name}` has been set as default')
else:
found_flag = False
for parser, file_path in zip([credentials, config],
[home_credentials, home_config]):
if new_profile_name in parser:
found_flag = True
new_profile_name_default = parser[str(new_profile_name)]
parser['default'] = new_profile_name_default
with open(file_path, 'w') as parser_file:
parser.write(parser_file)
print(f'AWS profile `{new_profile_name}` has been set as default in `{file_path}`')

if not found_flag:
print(f'AWS profile `{new_profile_name}` not found')
exit(1)


parser = argparse.ArgumentParser()
parser.add_argument("--add",required=False, action='store_true')
parser.add_argument("-f","--credentials-file",required=False)
parser.add_argument("-a","--alias",required=False)
parser.add_argument("--use",required=False)
parser.add_argument("--add", required=False, action='store_true')
parser.add_argument("-f", "--credentials-file", dest='new_creds', required=False)
parser.add_argument("-a", "--alias", required=False)
parser.add_argument("--use", required=False)
args = parser.parse_args()

if args.add:
if args.alias:
if isfile(args.credentials_file):
with open(args.credentials_file, 'r') as credfile:
reader = csv.DictReader(credfile)
if isfile(args.new_creds):
with open(args.new_creds, 'r') as new_cred_handle:
reader = DictReader(new_cred_handle)
credentials.add_section(args.alias)
for row in reader:
config.add_section(args.alias)
config[args.alias]["aws_access_key_id"] = row['Access key ID']
config[args.alias]["aws_secret_access_key"] = row['Secret access key']
with open(home_creds, 'w') as configfile:
config.write(configfile)
credentials[args.alias]["aws_access_key_id"] = row['Access key ID']
credentials[args.alias]["aws_secret_access_key"] = row['Secret access key']
with open(home_credentials, 'w') as cred_handle:
credentials.write(cred_handle)
else:
exit("No alias was provided")
elif args.use:
new_profile_name = args.use
magic(new_profile_name)
else:
selected_new_profile_name = inquirer.prompt(profiles)
magic(selected_new_profile_name['profile'])
magic(selected_new_profile_name['profile'])