From 48b27b6545760bc0f2d9491dc0a3c98363b7ad17 Mon Sep 17 00:00:00 2001 From: German Date: Fri, 4 Aug 2023 09:27:13 -0300 Subject: [PATCH] Do not propagate the error + fix webhoooks and teams too --- .../pkg/internal/pulumiapi/deployment_settings.go | 5 ++--- provider/pkg/internal/pulumiapi/teams.go | 5 +++++ provider/pkg/internal/pulumiapi/webhooks.go | 5 +++++ provider/pkg/provider/deployment_settings.go | 12 ++++-------- provider/pkg/provider/webhook.go | 4 ++++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/provider/pkg/internal/pulumiapi/deployment_settings.go b/provider/pkg/internal/pulumiapi/deployment_settings.go index 46f09ae5..29279956 100644 --- a/provider/pkg/internal/pulumiapi/deployment_settings.go +++ b/provider/pkg/internal/pulumiapi/deployment_settings.go @@ -82,9 +82,8 @@ func (c *Client) GetDeploymentSettings(ctx context.Context, stack StackName) (*D if err != nil { statusCode := GetErrorStatusCode(err) if statusCode == http.StatusNotFound { - // Important: do now wrap this error so the provider knows to handle it as a - // deleted resource - return nil, err + // Important: we return nil here to hint it was not found + return nil, nil } return nil, fmt.Errorf("failed to get deployment settings for stack (%s): %w", stack.String(), err) } diff --git a/provider/pkg/internal/pulumiapi/teams.go b/provider/pkg/internal/pulumiapi/teams.go index beb967bf..23e584d5 100644 --- a/provider/pkg/internal/pulumiapi/teams.go +++ b/provider/pkg/internal/pulumiapi/teams.go @@ -107,6 +107,11 @@ func (c *Client) GetTeam(ctx context.Context, orgName string, teamName string) ( var team Team _, err := c.do(ctx, http.MethodGet, apiPath, nil, &team) if err != nil { + statusCode := GetErrorStatusCode(err) + if statusCode == http.StatusNotFound { + // Important: we return nil here to hint it was not found + return nil, nil + } return nil, fmt.Errorf("failed to get team: %w", err) } diff --git a/provider/pkg/internal/pulumiapi/webhooks.go b/provider/pkg/internal/pulumiapi/webhooks.go index bbd6b45b..824adf06 100644 --- a/provider/pkg/internal/pulumiapi/webhooks.go +++ b/provider/pkg/internal/pulumiapi/webhooks.go @@ -121,6 +121,11 @@ func (c *Client) GetWebhook(ctx context.Context, var webhook Webhook _, err := c.do(ctx, http.MethodGet, apiPath, nil, &webhook) if err != nil { + statusCode := GetErrorStatusCode(err) + if statusCode == http.StatusNotFound { + // Important: we return nil here to hint it was not found + return nil, nil + } return nil, fmt.Errorf("failed to get webhook: %w", err) } return &webhook, nil diff --git a/provider/pkg/provider/deployment_settings.go b/provider/pkg/provider/deployment_settings.go index c5597040..c6a11125 100644 --- a/provider/pkg/provider/deployment_settings.go +++ b/provider/pkg/provider/deployment_settings.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "net/http" "path" pbempty "github.com/golang/protobuf/ptypes/empty" @@ -530,15 +529,12 @@ func (ds *PulumiServiceDeploymentSettingsResource) Read(req *pulumirpc.ReadReque } settings, err := ds.client.GetDeploymentSettings(ctx, stack) if err != nil { - statusCode := pulumiapi.GetErrorStatusCode(err) - if statusCode == http.StatusNotFound { - // deleteResponse causes the resource to be deleted from the state. - var deleteResponse = &pulumirpc.ReadResponse{Id: "", Properties: nil} - // If it's a 404 error, this resource was probably deleted. - return deleteResponse, nil - } return nil, err + } + if settings == nil { + // Empty response causes the resource to be deleted from the state. + return &pulumirpc.ReadResponse{Id: "", Properties: nil}, nil } dsInput := PulumiServiceDeploymentSettingsInput{ diff --git a/provider/pkg/provider/webhook.go b/provider/pkg/provider/webhook.go index dd55f353..52765cb8 100644 --- a/provider/pkg/provider/webhook.go +++ b/provider/pkg/provider/webhook.go @@ -376,6 +376,10 @@ func (wh *PulumiServiceWebhookResource) Read(req *pulumirpc.ReadRequest) (*pulum return nil, err } + if webhook == nil { + return &pulumirpc.ReadResponse{}, nil + } + hookID, err := splitWebhookID(req.Id) if err != nil { return nil, err