76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
AWS provider utilities for C2ingRed deployment system
|
|
"""
|
|
|
|
import random
|
|
import logging
|
|
from ..utils.common import COLORS, load_vars_file, confirm_action
|
|
|
|
def get_aws_credentials(provider_vars=None):
|
|
"""Get AWS credentials from user or vars file"""
|
|
if not provider_vars:
|
|
provider_vars = load_vars_file('aws')
|
|
|
|
default_aws_key = provider_vars.get('aws_access_key', '')
|
|
default_aws_secret = provider_vars.get('aws_secret_key', '')
|
|
|
|
print(f"\n{COLORS['BLUE']}AWS Configuration{COLORS['RESET']}")
|
|
aws_key = input(f"AWS Access Key [{'*****' if default_aws_key else 'leave blank to use AWS CLI profile'}]: ") or default_aws_key
|
|
aws_secret = input(f"AWS Secret Key [{'*****' if default_aws_secret else 'leave blank to use AWS CLI profile'}]: ") or default_aws_secret
|
|
|
|
return {
|
|
'aws_access_key': aws_key,
|
|
'aws_secret_key': aws_secret
|
|
}
|
|
|
|
def select_aws_region(provider_vars=None, component=None):
|
|
"""Let the user select an AWS region"""
|
|
if not provider_vars:
|
|
provider_vars = load_vars_file('aws')
|
|
|
|
regions = provider_vars.get('aws_region_choices', [])
|
|
component_str = f" for {component}" if component else ""
|
|
|
|
if not regions:
|
|
print(f"{COLORS['YELLOW']}No regions found for AWS, using us-east-1{COLORS['RESET']}")
|
|
return "us-east-1"
|
|
|
|
print(f"\nAvailable AWS regions{component_str}:")
|
|
for i, region in enumerate(regions, 1):
|
|
print(f" {i}. {region}")
|
|
|
|
region_input = input(f"\nSelect region{component_str} (number or leave blank for random): ")
|
|
|
|
if not region_input:
|
|
return random.choice(regions)
|
|
|
|
try:
|
|
region_choice = int(region_input)
|
|
if 1 <= region_choice <= len(regions):
|
|
return regions[region_choice - 1]
|
|
else:
|
|
print(f"{COLORS['RED']}Invalid choice, using random region{COLORS['RESET']}")
|
|
return random.choice(regions)
|
|
except ValueError:
|
|
print(f"{COLORS['RED']}Invalid input, using random region{COLORS['RESET']}")
|
|
return random.choice(regions)
|
|
|
|
def gather_aws_config():
|
|
"""Gather all AWS-specific configuration"""
|
|
provider_vars = load_vars_file('aws')
|
|
config = {}
|
|
|
|
# Get credentials
|
|
aws_creds = get_aws_credentials(provider_vars)
|
|
config.update(aws_creds)
|
|
|
|
# Get region
|
|
config['aws_region'] = select_aws_region(provider_vars)
|
|
|
|
# Additional AWS-specific settings
|
|
config['aws_instance_type'] = provider_vars.get('aws_instance_type', 't3.micro')
|
|
config['aws_volume_size'] = provider_vars.get('aws_volume_size', 20)
|
|
|
|
return config
|