X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fsonata%2Fdummygatekeeper.py;h=026271763310d8c5b838078373ac6557e1f7e0b2;hp=d5daf42c784588e1e42767992f9c27f3b22e82fb;hb=e5ed9d18877fae6cf7b42af20bc19595c789568b;hpb=9cc7360bf2c0dacb869d8ed0674d9d9e269a1082 diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py index d5daf42..0262717 100755 --- a/src/emuvim/api/sonata/dummygatekeeper.py +++ b/src/emuvim/api/sonata/dummygatekeeper.py @@ -39,11 +39,12 @@ import hashlib import zipfile import yaml import threading -from docker import DockerClient +from docker import DockerClient, APIClient from flask import Flask, request import flask_restful as fr from collections import defaultdict import pkg_resources +from subprocess import Popen logging.basicConfig() LOG = logging.getLogger("sonata-dummy-gatekeeper") @@ -546,8 +547,18 @@ class Service(object): LOG.debug("Image %r present. Skipping pull." % url) continue LOG.info("Pulling image: %r" % url) - dc.pull(url, - insecure_registry=True) + # this seems to fail with latest docker api version 2.0.2 + # dc.images.pull(url, + # insecure_registry=True) + #using docker cli instead + cmd = ["docker", + "pull", + url, + ] + Popen(cmd).wait() + + + def _check_docker_image_exists(self, image_name): """ @@ -641,12 +652,14 @@ class Packages(fr.Resource): """ try: # get file contents - print(request.files) + LOG.info("POST /packages called") # lets search for the package in the request + is_file_object = False # make API more robust: file can be in data or in files field if "package" in request.files: son_file = request.files["package"] - # elif "file" in request.files: - # son_file = request.files["file"] + is_file_object = True + elif len(request.data) > 0: + son_file = request.data else: return {"service_uuid": None, "size": 0, "sha1": None, "error": "upload failed. file not found."}, 500 # generate a uuid to reference this package @@ -656,7 +669,11 @@ class Packages(fr.Resource): ensure_dir(UPLOAD_FOLDER) upload_path = os.path.join(UPLOAD_FOLDER, "%s.son" % service_uuid) # store *.son file to disk - son_file.save(upload_path) + if is_file_object: + son_file.save(upload_path) + else: + with open(upload_path, 'wb') as f: + f.write(son_file) size = os.path.getsize(upload_path) # create a service object and register it s = Service(service_uuid, file_hash, upload_path) @@ -684,15 +701,15 @@ class Instantiations(fr.Resource): Will return a new UUID to identify the running service instance. :return: UUID """ + LOG.info("POST /instantiations (or /reqeusts) called") # try to extract the service uuid from the request json_data = request.get_json(force=True) service_uuid = json_data.get("service_uuid") # lets be a bit fuzzy here to make testing easier - if service_uuid is None and len(GK.services) > 0: + if (service_uuid is None or service_uuid=="latest") and len(GK.services) > 0: # if we don't get a service uuid, we simple start the first service in the list service_uuid = list(GK.services.iterkeys())[0] - if service_uuid in GK.services: # ok, we have a service uuid, lets start the service service_instance_uuid = GK.services.get(service_uuid).start_service() @@ -753,8 +770,8 @@ app = Flask(__name__) app.config['MAX_CONTENT_LENGTH'] = 512 * 1024 * 1024 # 512 MB max upload api = fr.Api(app) # define endpoints -api.add_resource(Packages, '/packages') -api.add_resource(Instantiations, '/instantiations') +api.add_resource(Packages, '/packages', '/api/v2/packages') +api.add_resource(Instantiations, '/instantiations', '/api/v2/instantiations', '/api/v2/requests') api.add_resource(Exit, '/emulator/exit')