X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fopenstack_dummies%2Fnova_dummy_api.py;h=514755edd4efd63a751cc184a521dbb370b7c48f;hp=3c525f64f14a19236be578916205664ec4a03778;hb=99587aefe0afa6053269538dbdcf44684981b8e1;hpb=5b428742f78d79c2c465957b01d911a3513c3d30 diff --git a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py index 3c525f6..514755e 100755 --- a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py +++ b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py @@ -44,6 +44,8 @@ class NovaDummyApi(BaseOpenstackDummy): resource_class_kwargs={'api': self}) self.api.add_resource(NovaListImageById, "/v2.1//images/", resource_class_kwargs={'api': self}) + self.api.add_resource(NovaLimits, "/v2.1//limits", + resource_class_kwargs={'api': self}) def _start_flask(self): LOG.info("Starting %s endpoint @ http://%s:%d" % ("NovaDummyApi", self.ip, self.port)) @@ -224,6 +226,8 @@ class NovaListServersApi(Resource): server = self.api.compute.create_server(name) server.full_name = str(self.api.compute.dc.label) + "_man_" + server_dict["name"] server.template_name = server_dict["name"] + if "metadata" in server_dict: + server.properties = server_dict["metadata"] for flavor in self.api.compute.flavors.values(): if flavor.id == server_dict.get('flavorRef', ''): @@ -518,6 +522,14 @@ class NovaListFlavorById(Resource): LOG.exception(u"%s: Could not retrieve flavor with id %s" % (__name__, flavorid)) return ex.message, 500 + def delete(self, id, flavorid): + """ + Removes the given flavor. + Does not really remove anything from the machine, just fakes an OK. + """ + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) + return Response("{}", status=204, mimetype="application/json") + class NovaListImages(Resource): def __init__(self, api): @@ -632,6 +644,14 @@ class NovaListImageById(Resource): LOG.exception(u"%s: Could not retrieve image with id %s." % (__name__, imageid)) return ex.message, 500 + def delete(self, id, imageid): + """ + Removes the given image. + Does not really remove anything from the machine, just fakes an OK. + """ + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) + return Response("{}", status=204, mimetype="application/json") + class NovaShowServerDetails(Resource): def __init__(self, api): @@ -845,3 +865,56 @@ class NovaShowAndDeleteInterfaceAtServer(Resource): except Exception as ex: LOG.exception(u"%s: Could not detach interface from the server." % __name__) return ex.message, 500 + + +class NovaLimits(Resource): + def __init__(self, api): + self.api = api + + def get(self, id): + """ + Returns the resource limits of the emulated cloud. + https://developer.openstack.org/api-ref/compute/?expanded=show-rate-and-absolute-limits-detail#limits-limits + + TODO: For now we only return fixed limits, not based on the real deployment. + + :param id: tenant id, used for the 'href' link + :type id: ``str`` + :return: Returns the resource limits. + :rtype: :class:`flask.response` + """ + LOG.debug("API CALL: %s GET" % str(self.__class__.__name__)) + try: + resp = { + "limits": { + "absolute": { + "maxImageMeta": 12800, + "maxPersonality": 500, + "maxPersonalitySize": 1024000, + "maxSecurityGroupRules": 2000, + "maxSecurityGroups": 1000, + "maxServerMeta": 12800, + "maxTotalCores": 2000, + "maxTotalFloatingIps": 1000, + "maxTotalInstances": 1000, + "maxTotalKeypairs": 1000, + "maxTotalRAMSize": 5120000, + "maxServerGroups": 1000, + "maxServerGroupMembers": 1000, + "totalCoresUsed": 0, + "totalInstancesUsed": 0, + "totalRAMUsed": 0, + "totalSecurityGroupsUsed": 0, + "totalFloatingIpsUsed": 0, + "totalServerGroupsUsed": 0 + }, + "rate": [] + } + } + response = Response(json.dumps(resp), status=200, mimetype="application/json") + response.headers['Access-Control-Allow-Origin'] = '*' + return response + + except Exception as ex: + LOG.exception(u"%s: Could not retrieve the list of images." % __name__) + return ex.message, 500