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)
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))
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]
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
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
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')