From 2aecf1dc375ebd54a611ecef32790a0083053fbe Mon Sep 17 00:00:00 2001 From: peusterm Date: Wed, 29 Nov 2017 12:02:42 +0100 Subject: [PATCH] Added Dockerfile-based entry points to REST API. Allows the user of the emulator to specify entry point scripts for their VNF containers inside the Dockerfiles. The emulator automatically runs these scripts when a new VNF is started using the emulators REST API. Change-Id: I2cb42f1cc33f7ae4ba6fc4e7a05d7dff0f7046c2 Signed-off-by: peusterm --- src/emuvim/api/rest/compute.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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: -- 2.25.1