def _collect_instances(region): client = boto3.client( "ec2", region_name=region, aws_access_key_id=AUTOCONFIG.aws_access_key(), aws_secret_access_key=AUTOCONFIG.aws_access_secret(), ) print("Collecting instances in region", region) instances = [x['Instances'][0] for x in client.describe_instances( Filters=[ { 'Name': 'instance.group-name', 'Values': [ AUTOCONFIG.aws_security_groups()[0], ] }, { 'Name': 'instance-state-name', 'Values': [ 'running' ] } ] )['Reservations']] for instance in instances: instance['Region'] = region return instances
def __init__(self, region='us-west-1', s3_bucket=None, image_id=None, aws_key_name=None, iam_profile=None, **kwargs ): # find config file from doodad.ec2.autoconfig import AUTOCONFIG from doodad.ec2.credentials import AWSCredentials s3_bucket = AUTOCONFIG.s3_bucket() if s3_bucket is None else s3_bucket image_id = AUTOCONFIG.aws_image_id(region) if image_id is None else image_id aws_key_name= AUTOCONFIG.aws_key_name(region) if aws_key_name is None else aws_key_name iam_profile= AUTOCONFIG.iam_profile_name() if iam_profile is None else iam_profile credentials=AWSCredentials(aws_key=AUTOCONFIG.aws_access_key(), aws_secret=AUTOCONFIG.aws_access_secret()) security_group_ids = AUTOCONFIG.aws_security_group_ids()[region] security_groups = AUTOCONFIG.aws_security_groups() super(EC2AutoconfigDocker, self).__init__( s3_bucket=s3_bucket, image_id=image_id, aws_key_name=aws_key_name, iam_instance_profile_name=iam_profile, credentials=credentials, region=region, security_groups=security_groups, security_group_ids=security_group_ids, **kwargs )
def kill_f(pattern): print("trying to kill the pattern: ", pattern) to_kill = [] to_kill_ids = {} for instance in get_all_instances(): name = get_name_tag(instance) if name is None or pattern in name: instance_id = instance['InstanceId'] region = instance['Region'] if name is None: if any([x['GroupName'] in AUTOCONFIG.aws_security_groups() for x in instance['SecurityGroups']]): if query_yes_no(question="Kill instance {} without name in region {} (security groups {})?".format( instance_id, region, [x['GroupName'] for x in instance['SecurityGroups']])): name = instance_id if name: if region not in to_kill_ids: to_kill_ids[region] = [] to_kill_ids[region].append(instance_id) to_kill.append(name) print("This will kill the following jobs:") print(", ".join(sorted(to_kill))) if query_yes_no(question="Proceed?", default="no"): for client in get_clients(): print("Terminating instances in region", client.region) ids = to_kill_ids.get(client.region, []) if len(ids) > 0: client.terminate_instances( InstanceIds=to_kill_ids.get(client.region, []) )