def disassociate_vis(client, lag_id, virtual_interfaces):
    for vi in virtual_interfaces:
        delete_virtual_interface(client, vi['virtualInterfaceId'])
        try:
            response = client.delete_virtual_interface(virtualInterfaceId=vi['virtualInterfaceId'])
        except botocore.exceptions.ClientError as e:
            raise DirectConnectError(msg="Could not delete virtual interface {0} to delete link aggregation group {1}.".format(vi, lag_id),
                                     last_traceback=traceback.format_exc(),
                                     response=e.response)
Exemple #2
0
def disassociate_vis(client, lag_id, virtual_interfaces):
    for vi in virtual_interfaces:
        delete_virtual_interface(client, vi['virtualInterfaceId'])
        try:
            response = client.delete_virtual_interface(virtualInterfaceId=vi['virtualInterfaceId'])
        except botocore.exceptions.ClientError as e:
            raise DirectConnectError(msg="Could not delete virtual interface {0} to delete link aggregation group {1}.".format(vi, lag_id),
                                     last_traceback=traceback.format_exc(),
                                     exception=e)
def ensure_absent(client, lag_id, lag_name, force_delete,
                  delete_with_disassociation, wait, wait_timeout):
    lag_id = lag_exists(client, lag_id, lag_name)
    if not lag_id:
        return False

    latest_status = lag_status(client, lag_id)

    # determinine the associated connections and virtual interfaces to disassociate
    virtual_interfaces, connections = get_connections_and_virtual_interfaces(
        client, lag_id)

    # If min_links is not 0, there are associated connections, or if there are virtual interfaces, ask for force_delete
    if any((latest_status['minimumLinks'], virtual_interfaces,
            connections)) and not force_delete:
        raise DirectConnectError(
            msg=
            "There are a minimum number of links, hosted connections, or associated virtual interfaces for LAG {0}. "
            "To force deletion of the LAG use delete_force: True (if the LAG has virtual interfaces they will be deleted). "
            "Optionally, to ensure hosted connections are deleted after disassocation use delete_with_disassocation: True "
            "and wait: True (as Virtual Interfaces may take a few moments to delete)"
            .format(lag_id),
            last_traceback=None,
            response=None)

    # update min_links to be 0 so we can remove the LAG
    update_lag(client, lag_id, None, 0, len(connections), wait, wait_timeout)

    # if virtual_interfaces and not delete_vi_with_disassociation: Raise failure; can't delete while vi attached
    for connection in connections:
        disassociate_connection_and_lag(client, connection['connectionId'],
                                        lag_id)
        if delete_with_disassociation:
            delete_connection(client, connection['connectionId'])

    for vi in virtual_interfaces:
        delete_virtual_interface(client, vi['virtualInterfaceId'])

    start_time = time.time()
    while True:
        try:
            delete_lag(client, lag_id)
        except DirectConnectError as e:
            if ('until its Virtual Interfaces are deleted'
                    in e.exception.response) and (time.time() - start_time <
                                                  wait_timeout) and wait:
                continue
        else:
            return True
Exemple #4
0
def ensure_state(connection, module):
    changed = False

    state = module.params['state']
    connection_id = module.params['id_to_associate']
    public = module.params['public']
    name = module.params['name']

    virtual_interface_id = find_unique_vi(
        connection, connection_id, module.params.get('virtual_interface_id'),
        name)

    if virtual_interface_id is False:
        module.fail_json(
            msg=
            "Multiple virtual interfaces were found. Use the virtual_interface_id, name, "
            "and connection_id options if applicable to find a unique match.")

    if state == 'present':

        if not virtual_interface_id and module.params['virtual_interface_id']:
            module.fail_json(msg="The virtual interface {0} does not exist.".
                             format(module.params['virtual_interface_id']))

        elif not virtual_interface_id:
            assembled_params = assemble_params_for_creating_vi(module.params)
            virtual_interface_id = create_vi(connection, public, connection_id,
                                             assembled_params)
            changed = True

        if needs_modification(connection, virtual_interface_id, connection_id):
            modify_vi(connection, virtual_interface_id, connection_id)
            changed = True

        latest_state = vi_state(connection, virtual_interface_id)

    else:
        if virtual_interface_id:
            delete_virtual_interface(connection, virtual_interface_id)
            changed = True

        latest_state = {}

    return changed, latest_state
def ensure_absent(client, lag_id, lag_name, force_delete, delete_with_disassociation, wait, wait_timeout):
    lag_id = lag_exists(client, lag_id, lag_name)
    if not lag_id:
        return False

    latest_status = lag_status(client, lag_id)

    # determinine the associated connections and virtual interfaces to disassociate
    virtual_interfaces, connections = get_connections_and_virtual_interfaces(client, lag_id)

    # If min_links is not 0, there are associated connections, or if there are virtual interfaces, ask for force_delete
    if any((latest_status['minimumLinks'], virtual_interfaces, connections)) and not force_delete:
        raise DirectConnectError(msg="There are a minimum number of links, hosted connections, or associated virtual interfaces for LAG {0}. "
                                     "To force deletion of the LAG use delete_force: True (if the LAG has virtual interfaces they will be deleted). "
                                     "Optionally, to ensure hosted connections are deleted after disassocation use delete_with_disassocation: True "
                                     "and wait: True (as Virtual Interfaces may take a few moments to delete)".format(lag_id),
                                 last_traceback=None,
                                 response=None)

    # update min_links to be 0 so we can remove the LAG
    update_lag(client, lag_id, None, 0, len(connections), wait, wait_timeout)

    # if virtual_interfaces and not delete_vi_with_disassociation: Raise failure; can't delete while vi attached
    for connection in connections:
        disassociate_connection_and_lag(client, connection['connectionId'], lag_id)
        if delete_with_disassociation:
            delete_connection(client, connection['connectionId'])

    for vi in virtual_interfaces:
        delete_virtual_interface(client, vi['virtualInterfaceId'])

    start_time = time.time()
    while True:
        try:
            delete_lag(client, lag_id)
        except DirectConnectError as e:
            if ('until its Virtual Interfaces are deleted' in e.response) and (time.time() - start_time < wait_timeout) and wait:
                continue
        else:
            return True
def ensure_state(connection, module):
    changed = False

    state = module.params['state']
    connection_id = module.params['id_to_associate']
    public = module.params['public']
    name = module.params['name']

    virtual_interface_id = find_unique_vi(connection, connection_id, module.params.get('virtual_interface_id'), name)

    if virtual_interface_id is False:
        module.fail_json(msg="Multiple virtual interfaces were found. Use the virtual_interface_id, name, "
                         "and connection_id options if applicable to find a unique match.")

    if state == 'present':

        if not virtual_interface_id and module.params['virtual_interface_id']:
            module.fail_json(msg="The virtual interface {0} does not exist.".format(module.params['virtual_interface_id']))

        elif not virtual_interface_id:
            assembled_params = assemble_params_for_creating_vi(module.params)
            virtual_interface_id = create_vi(connection, public, connection_id, assembled_params)
            changed = True

        if needs_modification(connection, virtual_interface_id, connection_id):
            modify_vi(connection, virtual_interface_id, connection_id)
            changed = True

        latest_state = vi_state(connection, virtual_interface_id)

    else:
        if virtual_interface_id:
            delete_virtual_interface(connection, virtual_interface_id)
            changed = True

        latest_state = {}

    return changed, latest_state