Example #1
0
def regenerate_bundle():
    """
    Submit a request to regenerate an operator bundle image.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')

    request = RequestRegenerateBundle.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    args = [
        payload['from_bundle_image'],
        payload.get('organization'),
        request.id,
        payload.get('registry_auths'),
    ]
    safe_args = _get_safe_args(args, payload)

    error_callback = failed_request_callback.s(request.id)
    try:
        handle_regenerate_bundle_request.apply_async(
            args=args, link_error=error_callback, argsrepr=repr(safe_args), queue=_get_user_queue(),
        )
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d', request.id)
    return flask.jsonify(request.to_json()), 201
Example #2
0
def rm_operators():
    """
    Submit a request to remove operators from an index image.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')

    request = RequestRm.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    overwrite_from_index = payload.get('overwrite_from_index')

    args = _get_rm_args(payload, request, overwrite_from_index)
    safe_args = _get_safe_args(args, payload)

    error_callback = failed_request_callback.s(request.id)
    try:
        handle_rm_request.apply_async(
            args=args,
            link_error=error_callback,
            argsrepr=repr(safe_args),
            queue=_get_user_queue(serial=overwrite_from_index),
        )
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d', request.id)
    return flask.jsonify(request.to_json()), 201
Example #3
0
def add_bundles():
    """
    Submit a request to add operator bundles to an index image.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')

    request = RequestAdd.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    overwrite_from_index = _should_force_overwrite() or payload.get(
        'overwrite_from_index')
    celery_queue = _get_user_queue(serial=overwrite_from_index)
    args = [
        payload['bundles'],
        payload['binary_image'],
        request.id,
        payload.get('from_index'),
        payload.get('add_arches'),
        payload.get('cnr_token'),
        payload.get('organization'),
        payload.get('force_backport'),
        overwrite_from_index,
        payload.get('overwrite_from_index_token'),
        flask.current_app.config['IIB_GREENWAVE_CONFIG'].get(celery_queue),
    ]
    safe_args = copy.copy(args)
    if payload.get('cnr_token'):
        safe_args[safe_args.index(payload['cnr_token'])] = '*****'
    if payload.get('overwrite_from_index_token'):
        safe_args[safe_args.index(
            payload['overwrite_from_index_token'])] = '*****'

    error_callback = failed_request_callback.s(request.id)

    try:
        handle_add_request.apply_async(args=args,
                                       link_error=error_callback,
                                       argsrepr=repr(safe_args),
                                       queue=celery_queue)
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d',
                                   request.id)
    return flask.jsonify(request.to_json()), 201
Example #4
0
File: api_v1.py Project: zanssa/iib
def merge_index_image():
    """
    Submit a request to merge two index images.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')
    request = RequestMergeIndexImage.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    overwrite_target_index = payload.get('overwrite_target_index', False)
    celery_queue = _get_user_queue(serial=overwrite_target_index)
    args = [
        payload['source_from_index'],
        payload.get('deprecation_list', []),
        request.id,
        payload.get('binary_image'),
        payload.get('target_index'),
        overwrite_target_index,
        payload.get('overwrite_target_index_token'),
        request.distribution_scope,
        flask.current_app.config['IIB_BINARY_IMAGE_CONFIG'],
        payload.get('build_tags', []),
    ]
    safe_args = _get_safe_args(args, payload)

    error_callback = failed_request_callback.s(request.id)
    try:
        handle_merge_request.apply_async(args=args,
                                         link_error=error_callback,
                                         argsrepr=repr(safe_args),
                                         queue=celery_queue)
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d',
                                   request.id)
    return flask.jsonify(request.to_json()), 201
Example #5
0
File: api_v1.py Project: zanssa/iib
def create_empty_index():
    """
    Submit a request to create an index image without bundles.

    Note: Any duplicate bundle will be removed from payload.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')

    request = RequestCreateEmptyIndex.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    args = [
        payload['from_index'],
        request.id,
        payload.get('output_fbc'),
        payload.get('binary_image'),
        payload.get('labels'),
        flask.current_app.config['IIB_BINARY_IMAGE_CONFIG'],
    ]
    safe_args = _get_safe_args(args, payload)
    error_callback = failed_request_callback.s(request.id)

    try:
        handle_create_empty_index_request.apply_async(
            args=args,
            link_error=error_callback,
            argsrepr=repr(safe_args),
            queue=_get_user_queue())
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d',
                                   request.id)
    return flask.jsonify(request.to_json()), 201
Example #6
0
File: api_v1.py Project: zanssa/iib
def add_bundles():
    """
    Submit a request to add operator bundles to an index image.

    Note: Any duplicate bundle will be removed from payload.

    :rtype: flask.Response
    :raise ValidationError: if required parameters are not supplied
    """
    payload = flask.request.get_json()
    if not isinstance(payload, dict):
        raise ValidationError('The input data must be a JSON object')

    # Only run `_get_unique_bundles` if it is a list. If it's not, `from_json`
    # will raise an error to the user.
    if payload.get('bundles') and isinstance(payload['bundles'], list):
        payload['bundles'] = _get_unique_bundles(payload['bundles'])

    request = RequestAdd.from_json(payload)
    db.session.add(request)
    db.session.commit()
    messaging.send_message_for_state_change(request, new_batch_msg=True)

    overwrite_from_index = payload.get('overwrite_from_index')
    celery_queue = _get_user_queue(serial=overwrite_from_index)
    args = _get_add_args(payload, request, overwrite_from_index, celery_queue)
    safe_args = _get_safe_args(args, payload)
    error_callback = failed_request_callback.s(request.id)

    try:
        handle_add_request.apply_async(args=args,
                                       link_error=error_callback,
                                       argsrepr=repr(safe_args),
                                       queue=celery_queue)
    except kombu.exceptions.OperationalError:
        handle_broker_error(request)

    flask.current_app.logger.debug('Successfully scheduled request %d',
                                   request.id)
    return flask.jsonify(request.to_json()), 201