import utils from datetime import datetime from flavor import Flavor from server import Server __author__ = "Lisa Zangrando" __email__ = "lisa.zangrando[AT]pd.infn.it" __copyright__ = """Copyright (c) 2015 INFN - INDIGO-DataCloud All Rights Reserved Licensed under the Apache License, Version 2.0; you may not use this file except in compliance with the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.""" class Request(object): def __init__(self): self.id = None self.user_id = None self.project_id = None self.action = None self.data = None self.context = None self.server = None self.retry = None self.created_at = None def getAction(self): return self.action def getContext(self): return self.context def getCreatedAt(self): return self.created_at def getData(self): return self.data def getId(self): return self.id def getServer(self): return self.server def getUserId(self): return self.user_id def getProjectId(self): return self.project_id def getRetry(self): return self.retry def toDict(self): request = {} request['action'] = self.action request['context'] = self.context request['data'] = self.data return request @classmethod def fromDict(cls, request_dict): request = Request() request.data = request_dict["data"] request.action = request_dict["action"] request.context = request_dict["context"] if "instances" in request.data: instance = request.data["instances"][0] else: build_request = request.data["build_requests"][0] instance = build_request["nova_object.data"]["instance"] instance_data = instance["nova_object.data"] request.id = instance_data["uuid"] request.user_id = instance_data["user_id"] request.project_id = instance_data["project_id"] created_at = instance_data["created_at"] request.created_at = datetime.strptime(created_at, "%Y-%m-%dT%H:%M:%SZ") flavor_data = instance_data["flavor"]["nova_object.data"] flavor = Flavor() flavor.setId(flavor_data["flavorid"]) flavor.setName(flavor_data["name"]) flavor.setMemory(flavor_data["memory_mb"]) flavor.setVCPUs(flavor_data["vcpus"]) flavor.setStorage(flavor_data["root_gb"]) server = Server() server.setFlavor(flavor) server.setId(instance_data["uuid"]) server.setUserId(instance_data["user_id"]) server.setProjectId(instance_data["project_id"]) server.setCreatedAt(instance_data["created_at"]) server.setMetadata(instance_data["metadata"]) server.setKeyName(instance_data["key_name"]) user_data = instance_data.get("user_data", None) if user_data: try: data = utils.decodeBase64(user_data) quota = utils.getConfigParameter(data, "quota", "synergy") if not quota: quota = utils.getConfigParameter(data, "quota") metadata = instance_data.get("metadata", {}) if quota is None or quota == "private" or quota != "shared": server.setType("permanent") metadata["quota"] = "private" elif quota == "shared": server.setType("ephemeral") metadata["quota"] = "shared" except Exception: server.setType("permanent") metadata["quota"] = "private" request.server = server if "filter_properties" in request.data: filter_properties = request.data["filter_properties"] request.retry = filter_properties["retry"] else: request_spec = request.data["request_specs"][0] nova_object = request_spec["nova_object.data"] request.retry = nova_object["retry"] if not request.retry: request.retry = {} return request