예제 #1
0
def create_resources():
    print(f"Creating {u.get_prefix()} resources in region {u.get_region()}")

    vpc, security_group = network_setup()
    keypair_setup()  # saves private key locally to keypair_fn

    # create EFS
    efss = u.get_efs_dict()
    efs_name = u.get_efs_name()
    efs_id = efss.get(efs_name, '')
    if not efs_id:
        print("Creating EFS " + efs_name)
        efs_id = u.create_efs(efs_name)
    else:
        print("Reusing EFS " + efs_name)

    efs_client = u.get_efs_client()

    # create mount target for each subnet in the VPC

    # added retries because efs is not immediately available
    max_failures = 10
    retry_interval_sec = 1
    for subnet in vpc.subnets.all():
        for retry_attempt in range(max_failures):
            try:
                sys.stdout.write("Creating efs mount target for %s ... " %
                                 (subnet.availability_zone, ))
                sys.stdout.flush()
                response = efs_client.create_mount_target(
                    FileSystemId=efs_id,
                    SubnetId=subnet.id,
                    SecurityGroups=[security_group.id])
                if u.is_good_response(response):
                    print("success")
                    break
            except Exception as e:
                if 'already exists' in str(
                        e):  # ignore "already exists" errors
                    print('already exists')
                    break

                # Takes couple of seconds for EFS to come online, with
                # errors like this:
                # Creating efs mount target for us-east-1f ... Failed with An error occurred (IncorrectFileSystemLifeCycleState) when calling the CreateMountTarget operation: None, retrying in 1 sec

                print("Got %s, retrying in %s sec" %
                      (str(e), retry_interval_sec))
                time.sleep(retry_interval_sec)
        else:
            print("Giving up.")
예제 #2
0
def delete_efs():
    efss = u.get_efs_dict()
    efs_id = efss.get(EFS_NAME, '')
    efs_client = u.get_efs_client()
    if efs_id:
        try:
            # delete mount targets first
            print("About to delete %s (%s)" % (efs_id, EFS_NAME))
            response = efs_client.describe_mount_targets(FileSystemId=efs_id)
            assert u.is_good_response(response)
            for mount_response in response['MountTargets']:
                id_ = mount_response['MountTargetId']
                sys.stdout.write('Deleting mount target %s ... ' % (id_, ))
                sys.stdout.flush()
                response = efs_client.delete_mount_target(MountTargetId=id_)
                print(response_type(response))

            sys.stdout.write('Deleting EFS %s (%s)... ' % (efs_id, EFS_NAME))
            sys.stdout.flush()
            u.delete_efs_by_id(efs_id)

        except Exception as e:
            sys.stdout.write(f'failed with {e}\n')
            util.log_error(str(e) + '\n')