From d1b1777307f51a05f6c7f61032a7e0ff75c6b70a Mon Sep 17 00:00:00 2001 From: Snigdhajyoti Ghosh Date: Wed, 29 Nov 2023 02:47:31 +0530 Subject: [PATCH] add aws region and profile switcher --- aws_fusion/app.py | 3 +- aws_fusion/commands/config_switch.py | 59 ++++++++++++++++++++++++++++ setup.py | 3 +- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 aws_fusion/commands/config_switch.py diff --git a/aws_fusion/app.py b/aws_fusion/app.py index 3a9298c..b8a2126 100644 --- a/aws_fusion/app.py +++ b/aws_fusion/app.py @@ -2,7 +2,7 @@ import logging from importlib.metadata import version -from .commands import open_browser, iam_user_credentials, generate_okta_device_auth_credentials, init +from .commands import open_browser, iam_user_credentials, generate_okta_device_auth_credentials, init, config_switch def main(): @@ -17,6 +17,7 @@ def main(): iam_user_credentials.setup(subparsers, global_parser) generate_okta_device_auth_credentials.setup(subparsers, global_parser) init.setup(subparsers, global_parser) + config_switch.setup(subparsers, global_parser) args = main_parser.parse_args() diff --git a/aws_fusion/commands/config_switch.py b/aws_fusion/commands/config_switch.py new file mode 100644 index 0000000..68f3fd5 --- /dev/null +++ b/aws_fusion/commands/config_switch.py @@ -0,0 +1,59 @@ +import inquirer +import boto3 +import os +import sys + + +def setup(subparsers, parent_parser): + summary = 'Switching between aws config' + parser = subparsers.add_parser('config-switch', description=summary, help=summary, parents=[parent_parser]) + + switch_subparsers = parser.add_subparsers(dest='switch_command', required=True, help='Available switch commands') + + profile_switch_summary = "Switch between available aws profile" + profile_switch_parser = switch_subparsers.add_parser('profile', description=profile_switch_summary, help=profile_switch_summary, parents=[parent_parser]) + profile_switch_parser.set_defaults(func=switch_profile) + + region_switch_summary = "Switch between available aws region" + region_switch_parser = switch_subparsers.add_parser('region', description=region_switch_summary, help=region_switch_summary, parents=[parent_parser]) + region_switch_parser.set_defaults(func=switch_region) + + +def switch_profile(args): + session = boto3.Session(region_name=os.getenv("AWS_REGION", os.getenv("AWS_DEFAULT_REGION")), profile_name=os.getenv("AWS_PROFILE")) + available_profiles = session.available_profiles + + questions = [ + inquirer.List( + "profile", + message="Choose a profile", + choices=available_profiles, + default=session.profile_name, + carousel=True + ), + ] + + answers = inquirer.prompt(questions, theme=inquirer.themes.GreenPassion()) + profile = answers.get('profile') + command = '$env:' if sys.platform == 'win32' else 'export ' + print(f'{command}AWS_PROFILE="{profile}"') + + +def switch_region(args): + session = boto3.Session(region_name=os.getenv("AWS_REGION", os.getenv("AWS_DEFAULT_REGION")), profile_name=os.getenv("AWS_PROFILE")) + available_regions = session.get_available_regions('ec2') + + questions = [ + inquirer.List( + "region", + message="Choose a region", + choices=available_regions, + default=session.region_name, + carousel=True + ), + ] + + answers = inquirer.prompt(questions, theme=inquirer.themes.GreenPassion()) + region = answers.get('region') + command = '$env:' if sys.platform == 'win32' else 'export ' + print(f'{command}AWS_REGION="{region}"') diff --git a/setup.py b/setup.py index 4e6981a..416b87a 100755 --- a/setup.py +++ b/setup.py @@ -44,7 +44,8 @@ def find_version(*file_paths): 'pyperclip>=1.8', 'keyring>=24.3', 'beautifulsoup4>=4.12', - 'requests>=2.31' + 'requests>=2.31', + 'inquirer>=3.1' ], author='Snigdhajyoti Ghosh', author_email='snigdhajyotighos.h@gmail.com',