def put(self, id): # import pdb;pdb.set_trace() self.project = self._find_obj(id) if not self.project: return error_api(msg='Error: wrong project id in request.', status=404) status = self.project.get_status() if status < CONFIRMED: return error_api(msg='Error: project is not confirmed yet.', status=400) data = get_json() status = data.get('status') if status not in range(len(STATES)): return error_api(msg='Error: wrong status in request.', status=400) state = STATES[status] if state not in STATES: return error_api(msg='Error: wrong status in request.', status=400) # In any case ensure instances exist error = self._set_state(self.project.services, state) if error: return error_api(msg="Error: '%s' in request." % error, status=400) else: response = dict(status='ok', msg="Project state set to '%s'" % state) return respond_json(response, status=200)
def post(self, id): try: project = Project.objects.get(id=ObjectId(id)) obj = self._obj_from_json(get_json()) obj.project = project valid_error = self._validate(obj) if valid_error: response = dict(status='fail', msg='%s: %s' % (self.name, valid_error)) return respond_json(response, status=400) obj.save() response = dict(status='ok', msg='%s updated' % self.name) return respond_json(response, status=200) except Exception, e: return error_api(msg=str(e))
def decorated_view(*args, **kwargs): jwt_token = get_token() if jwt_token: try: jwt.decode(jwt_token, 'secret', algorithms=['HS256']) except (jwt.DecodeError, jwt.ExpiredSignatureError): return respond_json(create_message_error(403, 'TOKEN_EXPIRED'), status=403) return fn(*args, **kwargs)
def get(self, id): self.project = find_one_in_collection('projects', {"_id": ObjectId(id)}) sproject = find_one_in_collection('sprojects', {"project": self.project['_id']}) instance = find_one_in_collection('instances', {"sproject": sproject["_id"]}) if instance is not None: item = self.create_data(str(instance["instance_id"])) if item is None: return respond_json(create_message_error(400, "BAD_URL"), 400) data = self.orch.get_billing(item) status_code = data.status_code response = data.text else: response = create_message_error(404, "NO_INSTANCES") status_code = 404 return respond_json(response, status=status_code)
def get(self): limit = get_int(get_arg('limit')) skip = get_int(get_arg('skip')) items = super(UsersCrudRes, self)._get_items(skip=skip * limit, limit=limit, values=self.filter) result = self._items_to_json(items) response = dict(count=count_collection(self.collection, self.filter), skip=skip, limit=limit, result=result) return respond_json(response, status=200)
def get(self, id): # import pdb;pdb.set_trace() self.project = self._find_obj(id) if not self.project: return error_api(msg='Error: wrong project id in request.', status=404) status = self.project.get_status() if status < CONFIRMED: response = dict(state=STATES[status], status=status) return respond_json(response, status=200) state, error = self._get_state(self.project.services) if error: return error_api(msg=error, status=400) if state: status = STATES.index(state) response = dict(state=state, status=status) return respond_json(response, status=200) else: response = dict(state='CONFIRMED', status=3) return respond_json(response, status=200)
def post(self): instance_info = get_json() if 'image_path' in instance_info: try: instance = get_db( _cfg.database__database_name)['instances'].find_one( {'instance_id': instance_info['service_instance_id']}) sproject = get_db( _cfg.database__database_name)['sprojects'].find_one( {'_id': ObjectId(instance['sproject'])}) service = get_db( _cfg.database__database_name)['services'].find_one( {'_id': ObjectId(sproject['service'])}) nstatus = [ x[0] for x in STATUS if instance_info['state'].upper() == x[1] ] if len(nstatus) > 0: rpps = None if 'runtime_params' in instance_info: rpps = { 'runtime_params': instance_info['runtime_params'] } get_db(_cfg.database__database_name)['sprojects'].update( {'_id': ObjectId(instance['sproject'])}, { '$set': { 'status': nstatus[0], 'runtime_params': rpps } }, upsert=False) image_path = '{0}.img'.format( str(service['context']['vm_image'])) file_to_remove = '{0}{1}'.format(_cfg.repository__path, image_path) os.remove(file_to_remove) except: respond_json({'message': 'Error removing'}, status=500) return respond_json(instance_info, status=200)
def save_keystone(self, data): #primero comprobamos que el usuario ha de ser o proveedor o cliente if not data['client_role'] and not data['provider_role']: return respond_json(create_message_error(400, 'PROVIDER_CLIENT'), 400) # login response = self.keystone.get_login() if response.status_code == 201: token = get_keystone_token(response) json_data, entity_id, entity = self.keystone.get_project( get_cfg('keystone__project_name'), data) url = self.path + get_cfg('keystone__create_user') response = post(self.session, url, put_headers_keystone(token), json_data) if response.status_code == 201: user_id = json.loads(response.text)['user']['id'] # grabamos la info en mongo if data['provider_role']: self.user = Provider() else: self.user = Client() try: self.dict_to_mongo_user(data, user_id, entity_id, str(entity['_id'])) self.response_msg = dict(status_code=204) except Exception as e: ''' Cualquier error que se produzca al intentar grabar en BBDD. Hemos de borrar el usuario de Keystone ''' print e url = url + "/" + user_id delete(self.session, url, put_headers_keystone(token)) self.response_msg = create_message_error(400) if self.response_msg['status_code'] == 204: self.smm.notify(self.user.email) return respond_json(self.response_msg, self.response_msg['status_code'])
def return_error_response(status_code, msg): return respond_json(create_message_error(status_code, msg), status=status_code)
def update_project(project, item, is_new=False): # import pdb;pdb.set_trace() _status = SAVED status_code = 200 if is_new: status_code = 201 try: resp = regex_name(item) if resp is not None: return resp if 'name' not in item: item['name'] = datetime.utcnow().strftime('%Y%m%d%H%M%S%f') client = None client_id = item.pop('client', None) if client_id: is_provider = get_type_user(client_id) if is_provider: client = Provider.objects.get(id=client_id) _status = CONFIRMED else: client = Client.objects.get(id=client_id) if project.client: if client and project.client != client: return error_api( msg='Error: Client project can not be changed.', status=400) elif client is None: return error_api("Client not defined.", status=400) else: project.client = client services = project.services if services: for sproject in list(services): sproject.delete() project.services.remove(sproject) sitems = item.pop('services') for name in ['name', 'description', 'summary']: if name in item: setattr(project, name, item[name]) try: project.save() except NotUniqueError: error_response = create_message_error(409, 'NOT_UNIQUE_PROJECT_NAME') return respond_json(error_response, status=409) services = [] if not sitems: project.delete() return error_api("No services.", status=400) try: for sitem in sitems: service_id = sitem['service'] # service = ServiceDescription.objects.get(id=service_id) service = get_db(_cfg.database__database_name)['services']. \ find_one({'_id': ObjectId(service_id)}) if service is None: project.delete() return error_api("Service '%s' doesn't exist." % service_id, status=400) services.append(service) except Exception, err: project.delete() return error_api(msg="Error in project '%s'." % err, status=400) try: for sitem, service in zip(sitems, services): # context_type=sitem.get('context_type', '') provider = service['provider'] sproject = SProject(service=service['_id'], project=project, provider=provider, status=_status) sproject.save() project.services.append(sproject) project.save() except Exception, err: if project.services: for sproject in project.services: sproject.delete() project.delete() return error_api(msg="Error: updating project '%s'." % err, status=400)
def get(self, id): project = get_db(_cfg.database__database_name)['projects'].find_one( {'_id': ObjectId(id)}) result = services_to_json(project['services']) response = dict(status='ok', result=result) return respond_json(response, status=200)
status=_status) sproject.save() project.services.append(sproject) project.save() except Exception, err: if project.services: for sproject in project.services: sproject.delete() project.delete() return error_api(msg="Error: updating project '%s'." % err, status=400) response = dict(status=project.status, id=unicode(project.pk), name=project.name, created=project.created_at) return respond_json(response, status=status_code) except Exception, e: response = dict(status='fail', msg=unicode(e)) return respond_json(response, status=400) def create_project(item): project = Project() return update_project(project, item, is_new=True) def save_image_to_local(vm_image, vm_name): image = VMImage(vm_name) image.id = ObjectId(vm_image) name_id = image.get_image() return _cfg.repository__ip + name_id
def get_response(req): if req.status_code == 200: data = respond_json(json.loads(req.text), status=req.status_code) else: data = respond_json(dict(msg='nok'), status=req.status_code) return data
project.services.append(sproject) except Exception, err: if project.services: for sproject in project.services: sproject.delete() project.delete() return error_api(msg="Error: updating project '%s'." % err, status=400) else: project.save() if is_new: response = dict(status='ok', id=unicode(project.pk), msg="Project created.") return respond_json(response, status=201) else: response = dict(status='ok', id=unicode(project.pk), msg="Project updated.") return respond_json(response, status=200) except Exception, e: response = dict(status='fail', msg=unicode(e)) return respond_json(response, status=400) def create_project(item): project = Project() return update_project(project, item, is_new=True)