Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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'])
Exemplo n.º 9
0
def return_error_response(status_code, msg):
    return respond_json(create_message_error(status_code, msg),
                        status=status_code)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
                                    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
Exemplo n.º 13
0
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
Exemplo n.º 14
0
                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)