X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fnbi.py;h=c4c61ade416e30c1aa080b8087850c8d7cf3ebed;hp=0a344fbb4fb331f657500d102723162effe3dab7;hb=dfe0957eb800224f10ab44797d4d9e05ed7aa69a;hpb=55945e7f57333fac8d39e4aa158c033c6f99e00f diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index 0a344fb..c4c61ad 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -19,8 +19,11 @@ from codecs import getreader from os import environ __author__ = "Alfonso Tierno " -__version__ = "0.3" + +# TODO consider to remove and provide version using the static version file +__version__ = "0.1.3" version_date = "Apr 2018" +database_version = '1.0' """ North Bound Interface (O: OSM specific; 5,X: SOL005 not implemented yet; O5: SOL005 implemented) @@ -56,7 +59,11 @@ URL: /osm GET POST / O O /ns_instances 5 5 / 5 5 - TO BE COMPLETED + instantiate O5 + terminate O5 + action O + scale O5 + heal 5 /ns_lcm_op_occs 5 5 / 5 5 5 TO BE COMPLETED 5 5 @@ -195,8 +202,16 @@ class Server(object): "ns_instances_content": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE")} }, - "ns_instances": {"TODO": ("GET", "POST"), - "": {"TODO": ("GET", "DELETE")} + "ns_instances": {"METHODS": ("GET", "POST"), + "": {"TODO": ("GET", "DELETE"), + "scale": {"TODO": "POST"}, + "terminate": {"METHODS": "POST"}, + "instantiate": {"METHODS": "POST"}, + "action": {"METHODS": "POST"}, + } + }, + "ns_lcm_op_occs": {"METHODS": "GET", + "": {"METHODS": "GET"}, } } }, @@ -383,6 +398,7 @@ class Server(object): @cherrypy.expose def version(self, *args, **kwargs): + # TODO consider to remove and provide version using the static version file global __version__, version_date try: if cherrypy.request.method != "GET": @@ -617,6 +633,8 @@ class Server(object): engine_item = "vnfds" elif topic == "nslcm": engine_item = "nsrs" + if item == "ns_lcm_op_occs": + engine_item = "nslcmops" if method == "GET": if item2 in ("nsd_content", "package_content", "artifacts", "vnfd", "nsd"): @@ -646,22 +664,32 @@ class Server(object): else: cherrypy.response.headers["Transaction-Id"] = _id outdata = {"id": _id} - elif item in ("ns_descriptors", "vnf_packages"): - _id = self.engine.new_item(session, engine_item, indata, kwargs, cherrypy.request.headers) + elif item == "ns_instances_content": + _id = self.engine.new_item(session, engine_item, indata, kwargs) + self.engine.ns_action(session, _id, "instantiate", {}, None) self._set_location_header(topic, version, item, _id) - #TODO form NsdInfo outdata = {"id": _id} + elif item == "ns_instances" and item2: + _id = self.engine.ns_action(session, _id, item2, indata, kwargs) + self._set_location_header(topic, version, "ns_lcm_op_occs", _id) + outdata = {"id": _id} + cherrypy.response.status = HTTPStatus.ACCEPTED.value else: _id = self.engine.new_item(session, engine_item, indata, kwargs, cherrypy.request.headers) self._set_location_header(topic, version, item, _id) outdata = {"id": _id} + # TODO form NsdInfo when item in ("ns_descriptors", "vnf_packages") cherrypy.response.status = HTTPStatus.CREATED.value elif method == "DELETE": if not _id: outdata = self.engine.del_item_list(session, engine_item, kwargs) else: # len(args) > 1 + if item == "ns_instances_content": + self.engine.ns_action(session, _id, "terminate", {"autoremove": True}, None) + else: + force = kwargs.get("FORCE") + self.engine.del_item(session, engine_item, _id, force) # TODO return 202 ACCEPTED for nsrs vims - self.engine.del_item(session, engine_item, _id) outdata = None elif method == "PUT": if not indata and not kwargs: @@ -788,7 +816,7 @@ def _start_service(): # TODO add more entries, e.g.: storage cherrypy.tree.apps['/osm'].root.engine.start(engine_config) try: - cherrypy.tree.apps['/osm'].root.engine.create_admin() + cherrypy.tree.apps['/osm'].root.engine.init_db(target_version=database_version) except EngineException: pass # getenv('OSMOPENMANO_TENANT', None)