From b0fc5f3c9b4e16962023bb788fc9a2f831b6493e Mon Sep 17 00:00:00 2001 From: Christian Lechner Date: Tue, 1 Aug 2023 13:20:11 +0200 Subject: [PATCH 1/2] fix: error handling of entitlement polling --- .../provider/resource_subaccount_entitlement.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/provider/resource_subaccount_entitlement.go b/internal/provider/resource_subaccount_entitlement.go index 5aa2efe6..93d25668 100644 --- a/internal/provider/resource_subaccount_entitlement.go +++ b/internal/provider/resource_subaccount_entitlement.go @@ -2,6 +2,7 @@ package provider import ( "context" + "errors" "fmt" "reflect" "strings" @@ -190,7 +191,7 @@ func (rs *subaccountEntitlementResource) createOrUpdate(ctx context.Context, req // wait for the entitlement to become effective createStateConf := &tfutils.StateChangeConf{ Pending: []string{cis_entitlements.StateStarted, cis_entitlements.StateProcessing}, - Target: []string{cis_entitlements.StateOK, cis_entitlements.StateProcessingFailed}, + Target: []string{cis_entitlements.StateOK}, Refresh: func() (interface{}, string, error) { entitlement, _, err := rs.cli.Accounts.Entitlement.GetAssignedBySubaccount(ctx, plan.SubaccountId.ValueString(), plan.ServiceName.ValueString(), plan.PlanName.ValueString()) @@ -202,6 +203,10 @@ func (rs *subaccountEntitlementResource) createOrUpdate(ctx context.Context, req return nil, cis_entitlements.StateProcessing, nil } + if entitlement.Assignment.EntityState == cis_entitlements.StateProcessingFailed { + return *entitlement, entitlement.Assignment.EntityState, errors.New("undefined API error during entitlement processing") + } + return *entitlement, entitlement.Assignment.EntityState, nil }, Timeout: 10 * time.Minute, @@ -245,7 +250,7 @@ func (rs *subaccountEntitlementResource) Delete(ctx context.Context, req resourc deleteStateConf := &tfutils.StateChangeConf{ Pending: []string{cis_entitlements.StateStarted, cis_entitlements.StateProcessing}, - Target: []string{cis_entitlements.StateProcessingFailed, "DELETED"}, + Target: []string{"DELETED"}, Refresh: func() (interface{}, string, error) { entitlement, _, err := rs.cli.Accounts.Entitlement.GetAssignedBySubaccount(ctx, state.SubaccountId.ValueString(), state.ServiceName.ValueString(), state.PlanName.ValueString()) @@ -258,6 +263,10 @@ func (rs *subaccountEntitlementResource) Delete(ctx context.Context, req resourc return entitlement, cis_entitlements.StateProcessingFailed, err } + if entitlement.Assignment.EntityState == cis_entitlements.StateProcessingFailed { + return *entitlement, entitlement.Assignment.EntityState, errors.New("undefined API error during entitlement processing") + } + return entitlement, cis_entitlements.StateProcessing, nil }, Timeout: 10 * time.Minute, From 2ff522c67c80ff029f052254adbcdb47c090e6ab Mon Sep 17 00:00:00 2001 From: Christian Lechner Date: Tue, 1 Aug 2023 13:25:08 +0200 Subject: [PATCH 2/2] fix: error handling of entitlement polling --- internal/provider/resource_subaccount_entitlement.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/provider/resource_subaccount_entitlement.go b/internal/provider/resource_subaccount_entitlement.go index 93d25668..34d89a62 100644 --- a/internal/provider/resource_subaccount_entitlement.go +++ b/internal/provider/resource_subaccount_entitlement.go @@ -202,7 +202,7 @@ func (rs *subaccountEntitlementResource) createOrUpdate(ctx context.Context, req if entitlement == nil { return nil, cis_entitlements.StateProcessing, nil } - + // No error returned even if operation failed if entitlement.Assignment.EntityState == cis_entitlements.StateProcessingFailed { return *entitlement, entitlement.Assignment.EntityState, errors.New("undefined API error during entitlement processing") } @@ -263,6 +263,7 @@ func (rs *subaccountEntitlementResource) Delete(ctx context.Context, req resourc return entitlement, cis_entitlements.StateProcessingFailed, err } + // No error returned even if operation failed if entitlement.Assignment.EntityState == cis_entitlements.StateProcessingFailed { return *entitlement, entitlement.Assignment.EntityState, errors.New("undefined API error during entitlement processing") }