diff --git a/.golangci.yml b/.golangci.yml index 1a120fc..c39dc78 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -26,7 +26,7 @@ linters: - predeclared - revive - staticcheck - - tenv + - usetesting - unconvert - unparam - unused diff --git a/internal/provider/destination_filter_resource.go b/internal/provider/destination_filter_resource.go index 09b9680..34a4fd8 100644 --- a/internal/provider/destination_filter_resource.go +++ b/internal/provider/destination_filter_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "regexp" "strings" @@ -201,6 +202,12 @@ func (r *destinationFilterResource) Read(ctx context.Context, req resource.ReadR defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Destination Filter (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/destination_resource.go b/internal/provider/destination_resource.go index 137716e..4dd8210 100644 --- a/internal/provider/destination_resource.go +++ b/internal/provider/destination_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" @@ -587,6 +588,12 @@ func (r *destinationResource) Read(ctx context.Context, req resource.ReadRequest defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Destination (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/destination_subscription_resource.go b/internal/provider/destination_subscription_resource.go index 72392a9..be2bf95 100644 --- a/internal/provider/destination_subscription_resource.go +++ b/internal/provider/destination_subscription_resource.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "strings" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" @@ -228,6 +229,12 @@ func (r *destinationSubscriptionResource) Read(ctx context.Context, req resource defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Destination subscription (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/function_resource.go b/internal/provider/function_resource.go index c5f8fa8..00dd481 100644 --- a/internal/provider/function_resource.go +++ b/internal/provider/function_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "regexp" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" @@ -189,6 +190,12 @@ func (r *functionResource) Read(ctx context.Context, req resource.ReadRequest, r defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Function (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/insert_function_instance_resource.go b/internal/provider/insert_function_instance_resource.go index d39aa2f..823da51 100644 --- a/internal/provider/insert_function_instance_resource.go +++ b/internal/provider/insert_function_instance_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "strings" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" @@ -159,6 +160,12 @@ func (r *insertFunctionInstanceResource) Read(ctx context.Context, req resource. defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Insert Function instance (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/label_resource.go b/internal/provider/label_resource.go index 3aee3bf..5b4edd3 100644 --- a/internal/provider/label_resource.go +++ b/internal/provider/label_resource.go @@ -163,10 +163,7 @@ func (r *labelResource) Read(ctx context.Context, req resource.ReadRequest, resp } if label == nil { - resp.Diagnostics.AddError( - "Unable to find Label", - fmt.Sprintf("Unable to find Label with key: %q and value: %q", state.Key, state.Value), - ) + resp.State.RemoveResource(ctx) return } diff --git a/internal/provider/profiles_warehouse_resource.go b/internal/provider/profiles_warehouse_resource.go index ae3fc88..bf9d47a 100644 --- a/internal/provider/profiles_warehouse_resource.go +++ b/internal/provider/profiles_warehouse_resource.go @@ -167,6 +167,8 @@ func (r *profilesWarehouseResource) Read(ctx context.Context, req resource.ReadR warehouse, err := findProfileWarehouse(r.authContext, r.client, previousState.ID.ValueString(), previousState.SpaceID.ValueString()) if err != nil { + resp.State.RemoveResource(ctx) + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Profiles Warehouse (ID: %s)", previousState.ID.ValueString()), err.Error(), @@ -176,10 +178,7 @@ func (r *profilesWarehouseResource) Read(ctx context.Context, req resource.ReadR } if warehouse == nil { - resp.Diagnostics.AddError( - "Unable to find Profile Warehouse", - fmt.Sprintf("Profile Warehouse with id '%s' and space id '%s' not found", previousState.ID.ValueString(), previousState.SpaceID.ValueString()), - ) + resp.State.RemoveResource(ctx) return } diff --git a/internal/provider/reverse_etl_model_resource.go b/internal/provider/reverse_etl_model_resource.go index eccfea9..b922757 100644 --- a/internal/provider/reverse_etl_model_resource.go +++ b/internal/provider/reverse_etl_model_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" "github.com/segmentio/terraform-provider-segment/internal/provider/models" @@ -160,6 +161,12 @@ func (r *reverseETLModelResource) Read(ctx context.Context, req resource.ReadReq defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Reverse ETL model (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/source_resource.go b/internal/provider/source_resource.go index 138c713..7a47e08 100644 --- a/internal/provider/source_resource.go +++ b/internal/provider/source_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" @@ -387,6 +388,12 @@ func (r *sourceResource) Read(ctx context.Context, req resource.ReadRequest, res defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Source (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/source_tracking_plan_connection_resource.go b/internal/provider/source_tracking_plan_connection_resource.go index eb869f8..0dbc6cd 100644 --- a/internal/provider/source_tracking_plan_connection_resource.go +++ b/internal/provider/source_tracking_plan_connection_resource.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net/http" "strings" "github.com/avast/retry-go/v4" @@ -255,6 +256,12 @@ func (r *sourceTrackingPlanConnectionResource) Read(ctx context.Context, req res defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Source (ID: %s)", previousState.SourceID.ValueString()), getError(err, body), diff --git a/internal/provider/source_warehouse_connection_resource.go b/internal/provider/source_warehouse_connection_resource.go index 69901ab..c75e276 100644 --- a/internal/provider/source_warehouse_connection_resource.go +++ b/internal/provider/source_warehouse_connection_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -126,6 +127,12 @@ func (r *sourceWarehouseConnectionResource) Read(ctx context.Context, req resour defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( "Unable to read Source-Warehouse connection", getError(err, body), diff --git a/internal/provider/tracking_plan_resource.go b/internal/provider/tracking_plan_resource.go index e6c6184..003f58b 100644 --- a/internal/provider/tracking_plan_resource.go +++ b/internal/provider/tracking_plan_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" "github.com/segmentio/terraform-provider-segment/internal/provider/models" @@ -227,6 +228,12 @@ func (r *trackingPlanResource) Read(ctx context.Context, req resource.ReadReques defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Tracking Plan (ID: %s)", config.ID.ValueString()), getError(err, body), diff --git a/internal/provider/transformation_resource.go b/internal/provider/transformation_resource.go index 9740171..d23c813 100644 --- a/internal/provider/transformation_resource.go +++ b/internal/provider/transformation_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" "github.com/segmentio/terraform-provider-segment/internal/provider/models" @@ -206,6 +207,12 @@ func (r *transformationResource) Read(ctx context.Context, req resource.ReadRequ defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound || body.StatusCode == http.StatusForbidden { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Transformation (ID: %s)", previousState.ID.ValueString()), getError(err, body), diff --git a/internal/provider/user_group_resource.go b/internal/provider/user_group_resource.go index fe01ca0..efa7af8 100644 --- a/internal/provider/user_group_resource.go +++ b/internal/provider/user_group_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "regexp" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" @@ -238,6 +239,12 @@ func (r *userGroupResource) Read(ctx context.Context, req resource.ReadRequest, defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read User Group (ID: %s)", config.ID.ValueString()), getError(err, body), diff --git a/internal/provider/user_resource.go b/internal/provider/user_resource.go index f1737df..2e72bbc 100644 --- a/internal/provider/user_resource.go +++ b/internal/provider/user_resource.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net/http" "regexp" "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" @@ -259,6 +260,12 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read user (ID: %s)", state.ID.ValueString()), getError(err, body), diff --git a/internal/provider/warehouse_resource.go b/internal/provider/warehouse_resource.go index 1bd6a25..77b9fae 100644 --- a/internal/provider/warehouse_resource.go +++ b/internal/provider/warehouse_resource.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "net/http" "github.com/segmentio/terraform-provider-segment/internal/provider/docs" "github.com/segmentio/terraform-provider-segment/internal/provider/models" @@ -288,6 +289,12 @@ func (r *warehouseResource) Read(ctx context.Context, req resource.ReadRequest, defer body.Body.Close() } if err != nil { + if body.StatusCode == http.StatusNotFound { + resp.State.RemoveResource(ctx) + + return + } + resp.Diagnostics.AddError( fmt.Sprintf("Unable to read Warehouse (ID: %s)", previousState.ID.ValueString()), getError(err, body),