diff --git a/pkg/services/ngalert/api/api_provisioning.go b/pkg/services/ngalert/api/api_provisioning.go index edfb8b1b248..a7bec82dd88 100644 --- a/pkg/services/ngalert/api/api_provisioning.go +++ b/pkg/services/ngalert/api/api_provisioning.go @@ -330,6 +330,9 @@ func (srv *ProvisioningSrv) RoutePostAlertRule(c *contextmodel.ReqContext, ar de return ErrResp(http.StatusBadRequest, err, "") } if err != nil { + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, store.ErrOptimisticLock) { return ErrResp(http.StatusConflict, err, "") } @@ -352,6 +355,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRule(c *contextmodel.ReqContext, ar def updated.UID = UID provenance := determineProvenance(c) updatedAlertRule, err := srv.alertRules.UpdateAlertRule(c.Req.Context(), updated, alerting_models.Provenance(provenance)) + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, alerting_models.ErrAlertRuleNotFound) { return response.Empty(http.StatusNotFound) } @@ -473,6 +479,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRuleGroup(c *contextmodel.ReqContext, a } provenance := determineProvenance(c) err = srv.alertRules.ReplaceRuleGroup(c.Req.Context(), c.SignedInUser.GetOrgID(), groupModel, c.UserID, alerting_models.Provenance(provenance)) + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, alerting_models.ErrAlertRuleFailedValidation) { return ErrResp(http.StatusBadRequest, err, "") }