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))
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)
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)
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)
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)
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))
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))
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))
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))
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))
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 = {}
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)