예제 #1
0
 def _get_resource_class_by_name(self, context, resource_name):
     query = model_query(models.ResourceClass)
     query = query.filter_by(name=resource_name)
     try:
         return query.one()
     except NoResultFound:
         raise exception.ResourceClassNotFound(resource_class=resource_name)
예제 #2
0
 def destroy_resource_class(self, context, resource_id):
     session = get_session()
     with session.begin():
         query = model_query(models.ResourceClass, session=session)
         count = query.delete()
         if count != 1:
             raise exception.ResourceClassNotFound(
                 resource_class=str(resource_id))
예제 #3
0
    def _get_resource_class_by_name(self, context, name):
        try:
            rcs = self.list_resource_classes(context, filters={'name': name})
        except etcd.EtcdKeyNotFound:
            raise exception.ResourceClassNotFound(resource_class=name)
        except Exception as e:
            LOG.error('Error occurred while retriving resource class: %s',
                      six.text_type(e))
            raise

        if len(rcs) > 1:
            raise exception.Conflict('Multiple resource classes exist with '
                                     'same name. Please use uuid instead.')
        elif len(rcs) == 0:
            raise exception.ResourceClassNotFound(resource_class=name)

        return rcs[0]
예제 #4
0
 def _get_resource_class_by_uuid(self, context, uuid):
     try:
         resource_class = None
         res = self.client.read('/resource_classes/' + uuid)
         resource_class = translate_etcd_result(res, 'resource_class')
     except etcd.EtcdKeyNotFound:
         raise exception.ResourceClassNotFound(resource_class=uuid)
     except Exception as e:
         LOG.error('Error occurred while retriving resource class: %s',
                   six.text_type(e))
         raise
     return resource_class
예제 #5
0
    def update_resource_class(self, context, resource_id, values):
        session = get_session()
        with session.begin():
            query = model_query(models.ResourceClass, session=session)
            query = query.filter_by(id=resource_id)
            try:
                ref = query.with_lockmode('update').one()
            except NoResultFound:
                raise exception.ResourceClassNotFound(
                    resource_class=resource_id)

            ref.update(values)
        return ref
예제 #6
0
 def update_resource_class(self, context, uuid, values):
     if 'uuid' in values:
         msg = _("Cannot override UUID for an existing resource class.")
         raise exception.InvalidParameterValue(err=msg)
     try:
         target = self.client.read('/resource_classes/' + uuid)
         target_value = json.loads(target.value)
         target_value.update(values)
         target.value = json.dump_as_bytes(target_value)
         self.client.update(target)
     except etcd.EtcdKeyNotFound:
         raise exception.ResourceClassNotFound(resource_class=uuid)
     except Exception as e:
         LOG.error('Error occurred while updating resource class: %s',
                   six.text_type(e))
         raise
     return translate_etcd_result(target, 'resource_class')