From 1684e75a981f6faaf729622b7952d5a5a8dff364 Mon Sep 17 00:00:00 2001 From: xuwu1 Date: Wed, 26 Jul 2023 12:15:02 +0800 Subject: [PATCH 1/2] use wait timeout from ctx for pim role assignment --- .../pim_eligible_role_assignment_resource.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/services/authorization/pim_eligible_role_assignment_resource.go b/internal/services/authorization/pim_eligible_role_assignment_resource.go index 78e015584497..01dbb20b006a 100644 --- a/internal/services/authorization/pim_eligible_role_assignment_resource.go +++ b/internal/services/authorization/pim_eligible_role_assignment_resource.go @@ -207,7 +207,7 @@ func (r PimEligibleRoleAssignmentResource) Create() sdk.ResourceFunc { Target: []string{"Created"}, Refresh: createEligibilityRoleAssignment(ctx, clientRequest, requestId, &payload), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: waitTimeoutFromCtx(ctx, 10*time.Minute), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { return fmt.Errorf("waiting for %s to be created: %+v", id, err) @@ -219,7 +219,7 @@ func (r PimEligibleRoleAssignmentResource) Create() sdk.ResourceFunc { Target: []string{"Found"}, Refresh: waitForEligibleRoleAssignmentSchedule(ctx, clientInstances, config.Scope, config.PrincipalId, config.RoleDefinitionId, "Found"), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: waitTimeoutFromCtx(ctx, 10*time.Minute), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -344,7 +344,7 @@ func (PimEligibleRoleAssignmentResource) Delete() sdk.ResourceFunc { Target: []string{"Deleted"}, Refresh: deleteEligibilityRoleAssignmentSchedule(ctx, clientRequest, deleteId, &payload), MinTimeout: 1 * time.Minute, - Timeout: 5 * time.Minute, + Timeout: waitTimeoutFromCtx(ctx, 5*time.Minute), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -357,7 +357,7 @@ func (PimEligibleRoleAssignmentResource) Delete() sdk.ResourceFunc { Target: []string{"Missing"}, Refresh: waitForEligibleRoleAssignmentSchedule(ctx, clientInstances, id.Scope, id.PrincipalId, id.RoleDefinitionId, "Missing"), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: waitTimeoutFromCtx(ctx, 5*time.Minute), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -653,3 +653,10 @@ func deleteEligibilityRoleAssignmentSchedule(ctx context.Context, client *roleel return result, "Deleted", nil } } + +func waitTimeoutFromCtx(ctx context.Context, defaultValue time.Duration) time.Duration { + if deadline, ok := ctx.Deadline(); ok { + defaultValue = time.Until(deadline) + } + return defaultValue +} From a3a64915859b7ac7e5d1ef687a442602fc7be8ac Mon Sep 17 00:00:00 2001 From: xuwu1 Date: Wed, 26 Jul 2023 16:54:32 +0800 Subject: [PATCH 2/2] use ctx deadline directly --- .../pim_eligible_role_assignment_resource.go | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/internal/services/authorization/pim_eligible_role_assignment_resource.go b/internal/services/authorization/pim_eligible_role_assignment_resource.go index 01dbb20b006a..4b8205726811 100644 --- a/internal/services/authorization/pim_eligible_role_assignment_resource.go +++ b/internal/services/authorization/pim_eligible_role_assignment_resource.go @@ -202,12 +202,18 @@ func (r PimEligibleRoleAssignmentResource) Create() sdk.ResourceFunc { } requestId := roleeligibilityschedulerequests.NewScopedRoleEligibilityScheduleRequestID(config.Scope, uuid) + + deadline, ok := ctx.Deadline() + if !ok { + return fmt.Errorf("internal error: context has no deadline") + } + stateConf := &pluginsdk.StateChangeConf{ Pending: []string{"Missing"}, Target: []string{"Created"}, Refresh: createEligibilityRoleAssignment(ctx, clientRequest, requestId, &payload), MinTimeout: 30 * time.Second, - Timeout: waitTimeoutFromCtx(ctx, 10*time.Minute), + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { return fmt.Errorf("waiting for %s to be created: %+v", id, err) @@ -219,7 +225,7 @@ func (r PimEligibleRoleAssignmentResource) Create() sdk.ResourceFunc { Target: []string{"Found"}, Refresh: waitForEligibleRoleAssignmentSchedule(ctx, clientInstances, config.Scope, config.PrincipalId, config.RoleDefinitionId, "Found"), MinTimeout: 30 * time.Second, - Timeout: waitTimeoutFromCtx(ctx, 10*time.Minute), + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -338,13 +344,18 @@ func (PimEligibleRoleAssignmentResource) Delete() sdk.ResourceFunc { } deleteId := roleeligibilityschedulerequests.NewScopedRoleEligibilityScheduleRequestID(id.Scope, uuid) + deadline, ok := ctx.Deadline() + if ok { + return fmt.Errorf("internal error: context has no deadline") + } + // wait for resource to deleted stateConf := &pluginsdk.StateChangeConf{ Pending: []string{"Exist"}, Target: []string{"Deleted"}, Refresh: deleteEligibilityRoleAssignmentSchedule(ctx, clientRequest, deleteId, &payload), MinTimeout: 1 * time.Minute, - Timeout: waitTimeoutFromCtx(ctx, 5*time.Minute), + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -357,7 +368,7 @@ func (PimEligibleRoleAssignmentResource) Delete() sdk.ResourceFunc { Target: []string{"Missing"}, Refresh: waitForEligibleRoleAssignmentSchedule(ctx, clientInstances, id.Scope, id.PrincipalId, id.RoleDefinitionId, "Missing"), MinTimeout: 30 * time.Second, - Timeout: waitTimeoutFromCtx(ctx, 5*time.Minute), + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -653,10 +664,3 @@ func deleteEligibilityRoleAssignmentSchedule(ctx context.Context, client *roleel return result, "Deleted", nil } } - -func waitTimeoutFromCtx(ctx context.Context, defaultValue time.Duration) time.Duration { - if deadline, ok := ctx.Deadline(); ok { - defaultValue = time.Until(deadline) - } - return defaultValue -}