Example #1
0
    def create(self, request):
        """
        POST /v1.0/{account_id}/nodes

        Create volume
        """
        params, meta_params = filter_update_params(request, Node)
        if not params.get('name'):
            raise HTTPPreconditionFailed("Must specify a 'name' parameter")
        self._validate_volume_type(params)
        try:
            params['size'] = int(params.get('size', 0))
        except ValueError:
            raise HTTPPreconditionFailed("'size' parameter must be an integer")
        params['meta'] = meta_params
        node = self.db.query(Node).filter_by(name=params['name']).first()
        if not node or node.status in ('DELETED', 'ERROR'):
            # create or update
            name = params.pop('name')
            params['status'] = params.get('status', 'ACTIVE')
            node, created = self.db.update_or_create(Node,
                                                     updates=params,
                                                     name=name)
        else:
            raise HTTPConflict("Node '%s' already exists" % params['name'])
        self.db.refresh(node)
        return Response(dict(node))
Example #2
0
 def test_filter_valid_params(self):
     request_params = {'status': 'ACTIVE'}
     req = Request.blank('/', method='POST', body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals(request_params, update_params)
     self.assertEquals({}, meta_params)
Example #3
0
    def create(self, request):
        """
        POST /v1.0/{account_id}/nodes

        Create volume
        """
        params, meta_params = filter_update_params(request, Node)
        if not params.get('name'):
            raise HTTPPreconditionFailed("Must specify a 'name' parameter")
        self._validate_volume_type(params)
        try:
            params['size'] = int(params.get('size', 0))
        except ValueError:
            raise HTTPPreconditionFailed("'size' parameter must be an integer")
        params['meta'] = meta_params
        node = self.db.query(Node).filter_by(name=params['name']).first()
        if not node or node.status in ('DELETED', 'ERROR'):
            # create or update
            name = params.pop('name')
            params['status'] = params.get('status', 'ACTIVE')
            node, created = self.db.update_or_create(Node, updates=params,
                                                     name=name)
        else:
            raise HTTPConflict("Node '%s' already exists" % params['name'])
        self.db.refresh(node)
        return Response(dict(node))
Example #4
0
 def test_filter_meta_params(self):
     request_params = {'x-meta-key1': 'val1', 'X-Meta-Key2': 'val2'}
     req = Request.blank('/', method='POST', body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals({}, update_params)
     expected = {'key1': 'val1', 'Key2': 'val2'}
     self.assertEquals(expected, meta_params)
Example #5
0
 def test_filter_valid_params(self):
     request_params = {'status': 'ACTIVE'}
     req = Request.blank('/', method='POST',
                         body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals(request_params, update_params)
     self.assertEquals({}, meta_params)
Example #6
0
 def test_filter_meta_params(self):
     request_params = {'x-meta-key1': 'val1', 'X-Meta-Key2': 'val2'}
     req = Request.blank('/', method='POST',
                         body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals({}, update_params)
     expected = {'key1': 'val1', 'Key2': 'val2'}
     self.assertEquals(expected, meta_params)
Example #7
0
 def test_update_and_meta_params(self):
     request_params = {'status': 'ACTIVE',
                       'x-meta-key1': 'val1',
                       'X-Meta-Key2': 'val2'}
     req = Request.blank('/', method='POST',
                         body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     expected_update = {'status': 'ACTIVE'}
     self.assertEquals(expected_update, update_params)
     expected_meta = {'key1': 'val1', 'Key2': 'val2'}
     self.assertEquals(expected_meta, meta_params)
Example #8
0
 def test_update_and_meta_params(self):
     request_params = {
         'status': 'ACTIVE',
         'x-meta-key1': 'val1',
         'X-Meta-Key2': 'val2'
     }
     req = Request.blank('/', method='POST', body=urlencode(request_params))
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     expected_update = {'status': 'ACTIVE'}
     self.assertEquals(expected_update, update_params)
     expected_meta = {'key1': 'val1', 'Key2': 'val2'}
     self.assertEquals(expected_meta, meta_params)
Example #9
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/volumes/{id}

        Update volume info
        """
        update_params, meta_params = filter_update_params(request, Volume)
        num_updated = self.account_query(Volume).\
            filter_by(id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent volume '%s'" %
                               self.id)
        volume = self.db.query(Volume).filter_by(id=self.id).one()
        return Response(dict(volume))
Example #10
0
File: backup.py Project: audip/lunr
    def update(self, request):
        """
        POST /v1.0/{account_id}/backups/{id}

        Update backup info
        """
        update_params, meta_params = filter_update_params(request, Backup)
        num_updated = self.account_query(Backup).\
            filter_by(id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent backup '%s'" %
                               self.id)
        backup = self.db.query(Backup).filter_by(id=self.id).one()
        return Response(dict(backup))
Example #11
0
    def update(self, request):
        """
        POST /v1.0/admin/accounts/{id}

        Update account
        """
        update_params, meta_params = filter_update_params(request, Account)
        num_updated = self.db.query(Account).filter_by(
            id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent account '%s'" %
                               self.id)
        a = self.db.query(Account).get(self.id)
        return Response(dict(a))
Example #12
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/backups/{id}

        Update backup info
        """
        update_params, meta_params = filter_update_params(request, Backup)
        num_updated = self.account_query(Backup).\
            filter_by(id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent backup '%s'" %
                               self.id)
        backup = self.db.query(Backup).filter_by(id=self.id).one()
        return Response(dict(backup))
Example #13
0
    def update(self, request):
        """
        POST /v1.0/admin/volume_types/{name}

        Update volume type
        """
        update_params, _meta_params = filter_update_params(request, VolumeType)
        num_updated = self.db.query(VolumeType).filter_by(
            name=self.name).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent volume_type '%s'" %
                               self.name)
        vt = self.db.query(VolumeType).get(self.name)
        return Response(dict(vt))
Example #14
0
    def update(self, request):
        """
        POST /v1.0/admin/volume_types/{name}

        Update volume type
        """
        update_params, _meta_params = filter_update_params(request, VolumeType)
        num_updated = self.db.query(VolumeType).filter_by(
            name=self.name).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent volume_type '%s'" %
                               self.name)
        vt = self.db.query(VolumeType).get(self.name)
        return Response(dict(vt))
Example #15
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/volumes/{id}

        Update volume info
        """
        update_params, meta_params = filter_update_params(request, Volume)
        num_updated = self.account_query(Volume).\
            filter_by(id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent volume '%s'" %
                               self.id)
        volume = self.db.query(Volume).filter_by(id=self.id).one()
        return Response(dict(volume))
Example #16
0
    def update(self, request):
        """
        POST /v1.0/admin/accounts/{id}

        Update account
        """
        update_params, meta_params = filter_update_params(request, Account)
        num_updated = self.db.query(Account).filter_by(
            id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent account '%s'" %
                               self.id)
        a = self.db.query(Account).get(self.id)
        return Response(dict(a))
Example #17
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/nodes/{id}

        Update volume info
        """
        update_params, meta_params = filter_update_params(request, Node)
        if meta_params:
            node = self.db.query(Node).get(self.id)
            node.meta.update(meta_params)
            update_params['meta'] = node.meta
        num_updated = self.db.query(Node).filter_by(
            id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent node '%s'" %
                               self.id)
        n = self.db.query(Node).filter_by(id=self.id).one()
        return Response(dict(n))
Example #18
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/nodes/{id}

        Update volume info
        """
        update_params, meta_params = filter_update_params(request, Node)
        if meta_params:
            node = self.db.query(Node).get(self.id)
            node.meta.update(meta_params)
            update_params['meta'] = node.meta
        num_updated = self.db.query(Node).filter_by(
            id=self.id).update(update_params)
        self.db.commit()
        if not num_updated:
            raise HTTPNotFound("Cannot update non-existent node '%s'" %
                               self.id)
        n = self.db.query(Node).filter_by(id=self.id).one()
        return Response(dict(n))
Example #19
0
    def update(self, request):
        """
        POST /v1.0/{account_id}/volumes/{id}/export

        Update export info.
        Params: status, instance_id, and mountpoint.
        This also pulls the connected ip and initiator from the storage node.
        """
        try:
            volume = self.account_query(Volume).filter_by(id=self.id).one()
        except NoResultFound:
            raise HTTPNotFound(
                "Cannot update export for non-existent volume '%s'" % self.id)

        update_params, meta_params = filter_update_params(request, Export)

        try:
            node_export = self.node_request(volume.node, 'GET',
                                            '/volumes/%s/export' % volume.name)
        except NodeError, e:
            logger.info('Node error fetching export: %s' % volume.id)
            node_export = {}
Example #20
0
File: export.py Project: audip/lunr
    def update(self, request):
        """
        POST /v1.0/{account_id}/volumes/{id}/export

        Update export info.
        Params: status, instance_id, and mountpoint.
        This also pulls the connected ip and initiator from the storage node.
        """
        try:
            volume = self.account_query(Volume).filter_by(id=self.id).one()
        except NoResultFound:
            raise HTTPNotFound(
                "Cannot update export for non-existent volume '%s'" % self.id)

        update_params, meta_params = filter_update_params(request, Export)

        try:
            node_export = self.node_request(volume.node, 'GET',
                                            '/volumes/%s/export' % volume.name)
        except NodeError, e:
            logger.info('Node error fetching export: %s' % volume.id)
            node_export = {}
Example #21
0
 def test_filter_empty_params(self):
     req = Request.blank('/')
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals({}, update_params)
     self.assertEquals({}, meta_params)
Example #22
0
 def test_filter_empty_params(self):
     req = Request.blank('/')
     update_params, meta_params = \
         helpers.filter_update_params(req, self.model)
     self.assertEquals({}, update_params)
     self.assertEquals({}, meta_params)