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
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
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
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
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
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