def get_audit_by_id(self, context, audit_id): query = model_query(models.Audit) query = query.filter_by(id=audit_id) try: audit = query.one() if not context.show_deleted: if audit.state == 'DELETED': raise exception.AuditNotFound(audit=audit_id) return audit except exc.NoResultFound: raise exception.AuditNotFound(audit=audit_id)
def _get_audit(self, context, fieldname, value, eager): try: return self._get(context, model=models.Audit, fieldname=fieldname, value=value, eager=eager) except exception.ResourceNotFound: raise exception.AuditNotFound(audit=value)
def update_audit(self, audit_id, values): if 'uuid' in values: raise exception.Invalid( message=_("Cannot overwrite UUID for an existing " "Audit.")) try: return self._update(models.Audit, audit_id, values) except exception.ResourceNotFound: raise exception.AuditNotFound(audit=audit_id)
def soft_delete_audit(self, audit_id): session = get_session() with session.begin(): query = model_query(models.Audit, session=session) query = add_identity_filter(query, audit_id) try: query.one() except exc.NoResultFound: raise exception.AuditNotFound(node=audit_id) query.soft_delete()
def _do_update_audit(self, audit_id, values): session = get_session() with session.begin(): query = model_query(models.Audit, session=session) query = add_identity_filter(query, audit_id) try: ref = query.with_lockmode('update').one() except exc.NoResultFound: raise exception.AuditNotFound(audit=audit_id) ref.update(values) return ref
def destroy_audit(self, audit_id): def is_audit_referenced(session, audit_id): """Checks whether the audit is referenced by action_plan(s).""" query = model_query(models.ActionPlan, session=session) query = self._add_action_plans_filters(query, {'audit_id': audit_id}) return query.count() != 0 session = get_session() with session.begin(): query = model_query(models.Audit, session=session) query = add_identity_filter(query, audit_id) try: audit_ref = query.one() except exc.NoResultFound: raise exception.AuditNotFound(audit=audit_id) if is_audit_referenced(session, audit_ref['id']): raise exception.AuditReferenced(audit=audit_id) query.delete()
def post(self, audit_ident, body): """Trigger the given audit. :param audit_ident: UUID or name of an audit. """ LOG.debug("Webhook trigger Audit: %s.", audit_ident) context = pecan.request.context audit = utils.get_resource('Audit', audit_ident) if audit is None: raise exception.AuditNotFound(audit=audit_ident) if audit.audit_type != objects.audit.AuditType.EVENT.value: raise exception.AuditTypeNotAllowed(audit_type=audit.audit_type) allowed_state = ( objects.audit.State.PENDING, objects.audit.State.SUCCEEDED, ) if audit.state not in allowed_state: raise exception.AuditStateNotAllowed(state=audit.state) # trigger decision-engine to run the audit self.dc_client.trigger_audit(context, audit.uuid)
def soft_delete_audit(self, audit_id): try: return self._soft_delete(models.Audit, audit_id) except exception.ResourceNotFound: raise exception.AuditNotFound(audit=audit_id)