def function_status(): try: data = request.get_json(force=True) except ValueError: return json_error(HTTPStatus.BAD_REQUEST, reason='bad JSON body') logger.info('function_status:\n{}'.format(data)) selector = data.get('selector') kind = data.get('kind') if not selector or not kind: return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: selector or runtime kind not specified', ) resource = runtime_resources_map.get(kind) if 'status' not in resource: return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: "status" not supported by this runtime', ) try: resp = resource['status'](selector) logger.info('status: %s', resp) except Exception as err: logger.error(traceback.format_exc()) return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: {}'.format(err), ) return jsonify(ok=True, data=resp)
def _get_function_status(data): logger.info("function_status:\n{}".format(data)) selector = data.get("selector") kind = data.get("kind") if not selector or not kind: log_and_raise( HTTPStatus.BAD_REQUEST, reason="runtime error: selector or runtime kind not specified", ) resource = runtime_resources_map.get(kind) if "status" not in resource: log_and_raise( HTTPStatus.BAD_REQUEST, reason="runtime error: 'status' not supported by this runtime", ) resp = None try: resp = resource["status"](selector) logger.info("status: %s", resp) except Exception as err: logger.error(traceback.format_exc()) log_and_raise(HTTPStatus.BAD_REQUEST, reason="runtime error: {}".format(err))
def _start_function(db_session, data): logger.info("start_function:\n{}".format(data)) url = data.get("functionUrl") if not url: log_and_raise(HTTPStatus.BAD_REQUEST, reason="runtime error: functionUrl not specified") project, name, tag, hash_key = parse_function_uri(url) runtime = get_db().get_function(db_session, name, project, tag, hash_key) if not runtime: log_and_raise( HTTPStatus.BAD_REQUEST, reason="runtime error: function {} not found".format(url)) fn = new_function(runtime=runtime) resource = runtime_resources_map.get(fn.kind) if "start" not in resource: log_and_raise( HTTPStatus.BAD_REQUEST, reason="runtime error: 'start' not supported by this runtime") try: run_db = get_run_db_instance(db_session) fn.set_db_connection(run_db) # resp = resource["start"](fn) # TODO: handle resp? resource["start"](fn) fn.save(versioned=False) logger.info("Fn:\n %s", fn.to_yaml()) except Exception as err: logger.error(traceback.format_exc()) log_and_raise(HTTPStatus.BAD_REQUEST, reason="runtime error: {}".format(err)) return fn
def _start_function(function, auth_info: mlrun.api.schemas.AuthInfo): db_session = mlrun.api.db.session.create_session() try: resource = runtime_resources_map.get(function.kind) if "start" not in resource: log_and_raise( HTTPStatus.BAD_REQUEST.value, reason="runtime error: 'start' not supported by this runtime", ) try: run_db = get_run_db_instance(db_session) function.set_db_connection(run_db) mlrun.api.api.utils.ensure_function_has_auth_set( function, auth_info) mlrun.api.api.utils.process_function_service_account(function) # resp = resource["start"](fn) # TODO: handle resp? resource["start"](function) function.save(versioned=False) logger.info("Fn:\n %s", function.to_yaml()) except Exception as err: logger.error(traceback.format_exc()) log_and_raise(HTTPStatus.BAD_REQUEST.value, reason=f"runtime error: {err}") finally: mlrun.api.db.session.close_session(db_session)
def start_function(): try: data = request.get_json(force=True) except ValueError: return json_error(HTTPStatus.BAD_REQUEST, reason='bad JSON body') logger.info('start_function:\n{}'.format(data)) url = data.get('functionUrl') if not url: return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: functionUrl not specified', ) project, name, tag = parse_function_uri(url) runtime = _db.get_function(name, project, tag) if not runtime: return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: function {} not found'.format(url), ) fn = new_function(runtime=runtime) resource = runtime_resources_map.get(fn.kind) if 'start' not in resource: return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: "start" not supported by this runtime', ) try: fn.set_db_connection(_db) # resp = resource['start'](fn) # TODO: handle resp? resource['start'](fn) fn.save(versioned=False) logger.info('Fn:\n %s', fn.to_yaml()) except Exception as err: logger.error(traceback.format_exc()) return json_error( HTTPStatus.BAD_REQUEST, reason='runtime error: {}'.format(err), ) return jsonify(ok=True, data=fn.to_dict())
def _get_function_status(data, auth_info: mlrun.api.schemas.AuthInfo): logger.info(f"function_status:\n{data}") selector = data.get("selector") kind = data.get("kind") if not selector or not kind: log_and_raise( HTTPStatus.BAD_REQUEST.value, reason="runtime error: selector or runtime kind not specified", ) project, name = data.get("project"), data.get("name") # Only after 0.6.6 the client start sending the project and name, as long as 0.6.6 is a valid version we'll need # to try and resolve them from the selector. TODO: remove this when 0.6.6 is not relevant anymore if not project or not name: project, name, _ = mlrun.runtimes.utils.parse_function_selector( selector) mlrun.api.utils.auth.verifier.AuthVerifier( ).query_project_resource_permissions( mlrun.api.schemas.AuthorizationResourceTypes.function, project, name, mlrun.api.schemas.AuthorizationAction.read, auth_info, ) resource = runtime_resources_map.get(kind) if "status" not in resource: log_and_raise( HTTPStatus.BAD_REQUEST.value, reason="runtime error: 'status' not supported by this runtime", ) resp = None try: resp = resource["status"](selector) logger.info("status: %s", resp) except Exception as err: logger.error(traceback.format_exc()) log_and_raise(HTTPStatus.BAD_REQUEST.value, reason=f"runtime error: {err}")
def _start_function(function): db_session = mlrun.api.db.session.create_session() try: resource = runtime_resources_map.get(function.kind) if "start" not in resource: log_and_raise( HTTPStatus.BAD_REQUEST.value, reason="runtime error: 'start' not supported by this runtime", ) try: run_db = get_run_db_instance(db_session) function.set_db_connection(run_db) # resp = resource["start"](fn) # TODO: handle resp? resource["start"](function) function.save(versioned=False) logger.info("Fn:\n %s", function.to_yaml()) except Exception as err: logger.error(traceback.format_exc()) log_and_raise(HTTPStatus.BAD_REQUEST.value, reason="runtime error: {}".format(err)) finally: mlrun.api.db.session.close_session(db_session)