@@ -198,10 +198,24 @@ func createMuteTiming(ctx context.Context, data *schema.ResourceData, meta inter
198198 params .SetXDisableProvenance (& provenanceDisabled )
199199 }
200200
201- resp , err := client .Provisioning .PostMuteTiming (params )
201+ var resp * provisioning.PostMuteTimingCreated
202+ err := retry .RetryContext (ctx , 2 * time .Minute , func () * retry.RetryError {
203+ var postErr error
204+ resp , postErr = client .Provisioning .PostMuteTiming (params )
205+ if orgID > 1 && postErr != nil {
206+ if apiError , ok := postErr .(* runtime.APIError ); ok && (apiError .IsCode (500 ) || apiError .IsCode (404 )) {
207+ return retry .RetryableError (postErr )
208+ }
209+ }
210+ if postErr != nil {
211+ return retry .NonRetryableError (postErr )
212+ }
213+ return nil
214+ })
202215 if err != nil {
203216 return diag .FromErr (err )
204217 }
218+
205219 data .SetId (MakeOrgResourceID (orgID , resp .Payload .Name ))
206220 return readMuteTiming (ctx , data , meta )
207221}
@@ -231,11 +245,44 @@ func updateMuteTiming(ctx context.Context, data *schema.ResourceData, meta inter
231245func deleteMuteTiming (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
232246 client , _ , name := OAPIClientFromExistingOrgResource (meta , data .Id ())
233247
234- _ , err := client .Provisioning .DeleteMuteTiming (name )
248+ // Remove the mute timing from all notification policies
249+ policyResp , err := client .Provisioning .GetPolicyTree ()
250+ if err != nil {
251+ return diag .FromErr (err )
252+ }
253+ policy := policyResp .Payload
254+ modified := false
255+ policy , modified = removeMuteTimingFromRoute (name , policy )
256+ if modified {
257+ _ , err = client .Provisioning .PutPolicyTree (provisioning .NewPutPolicyTreeParams ().WithBody (policy ))
258+ if err != nil {
259+ return diag .FromErr (err )
260+ }
261+ }
262+
263+ _ , err = client .Provisioning .DeleteMuteTiming (name )
235264 diag , _ := common .CheckReadError ("mute timing" , data , err )
236265 return diag
237266}
238267
268+ func removeMuteTimingFromRoute (name string , route * models.Route ) (* models.Route , bool ) {
269+ modified := false
270+ for i , m := range route .MuteTimeIntervals {
271+ if m == name {
272+ route .MuteTimeIntervals = append (route .MuteTimeIntervals [:i ], route .MuteTimeIntervals [i + 1 :]... )
273+ modified = true
274+ break
275+ }
276+ }
277+ for j , p := range route .Routes {
278+ var subRouteModified bool
279+ route .Routes [j ], subRouteModified = removeMuteTimingFromRoute (name , p )
280+ modified = modified || subRouteModified
281+ }
282+
283+ return route , modified
284+ }
285+
239286func suppressMonthDiff (k , oldValue , newValue string , d * schema.ResourceData ) bool {
240287 monthNums := map [string ]int {
241288 "january" : 1 ,
0 commit comments