X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Frest%2Fcompute.py;h=78d96da2ece7607796ffa70176f7060b2490ebcd;hb=3e16acbebd2c6669c1bbe5a7e3bb313aa1494e20;hp=c4f7f3bb64e7a4935c3ac81fa7b1c19766344c2b;hpb=d7cbd218427bbfe573d062710006d56751e4406b;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py index c4f7f3b..78d96da 100755 --- a/src/emuvim/api/rest/compute.py +++ b/src/emuvim/api/rest/compute.py @@ -29,6 +29,7 @@ import logging from flask_restful import Resource from flask import request import json +import threading from copy import deepcopy logging.basicConfig() @@ -69,9 +70,30 @@ class Compute(Resource): command = data.get("docker_command") try: - logging.debug("API CALL: compute start") + if compute_name is None or compute_name == "None": + logging.error("No compute name defined in request.") + return "No compute name defined in request.", 500, CORS_HEADER + if dc_label is None or dcs.get(dc_label) is None: + logging.error("No datacenter defined in request.") + return "No datacenter defined in request.", 500, CORS_HEADER c = dcs.get(dc_label).startCompute( compute_name, image=image, command=command, network=nw_list) + # (if available) trigger emu. entry point given in Dockerfile + try: + config = c.dcinfo.get("Config", dict()) + env = config.get("Env", list()) + for env_var in env: + var, cmd = map(str.strip, map(str, env_var.split('=', 1))) + logging.debug("%r = %r" % (var , cmd)) + if var=="SON_EMU_CMD" or var=="VIM_EMU_CMD": + logging.info("Executing entry point script in %r: %r" % (c.name, cmd)) + # execute command in new thread to ensure that API is not blocked by VNF + t = threading.Thread(target=c.cmdPrint, args=(cmd,)) + t.daemon = True + t.start() + except Exception as ex: + logging.warning("Couldn't run Docker entry point VIM_EMU_CMD") + logging.exception("Exception:") # return docker inspect dict return c.getStatus(), 200, CORS_HEADER except Exception as ex: