diff --git a/internal/hcp/api/mock_service.go b/internal/hcp/api/mock_service.go index 062e53403..3ba4c15ff 100644 --- a/internal/hcp/api/mock_service.go +++ b/internal/hcp/api/mock_service.go @@ -34,6 +34,7 @@ type MockPackerClientService struct { CreateBuildResp *hcpPackerModels.HashicorpCloudPacker20230101CreateBuildResponse // Mock Gets + GetBucketResp *hcpPackerModels.HashicorpCloudPacker20230101GetBucketResponse GetVersionResp *hcpPackerModels.HashicorpCloudPacker20230101GetVersionResponse // Mock enforced blocks @@ -94,7 +95,11 @@ func (svc *MockPackerClientService) PackerServiceGetBucket( if svc.BucketNotFound { return nil, status.Error(codes.NotFound, fmt.Sprintf("Code:%d %s", codes.NotFound, codes.NotFound.String())) } - return hcpPackerService.NewPackerServiceGetBucketOK(), nil + resp := hcpPackerService.NewPackerServiceGetBucketOK() + if svc.GetBucketResp != nil { + resp.Payload = svc.GetBucketResp + } + return resp, nil } func (svc *MockPackerClientService) PackerServiceUpdateBucket( diff --git a/internal/hcp/api/service_bucket.go b/internal/hcp/api/service_bucket.go index c512f1dee..92938f598 100644 --- a/internal/hcp/api/service_bucket.go +++ b/internal/hcp/api/service_bucket.go @@ -2,6 +2,7 @@ package api import ( "context" + "reflect" hcpPackerService "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/client/packer_service" hcpPackerModels "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/models" @@ -48,7 +49,7 @@ func (c *Client) UpsertBucket( getParams.LocationProjectID = c.ProjectID getParams.BucketName = bucketName - _, err := c.Packer.PackerServiceGetBucket(getParams, nil) + resp, err := c.Packer.PackerServiceGetBucket(getParams, nil) if err != nil { if CheckErrorCode(err, codes.NotFound) { _, err = c.CreateBucket(ctx, bucketName, bucketDescription, bucketLabels) @@ -56,6 +57,10 @@ func (c *Client) UpsertBucket( return err } + if resp != nil && resp.Payload != nil && bucketMetadataMatches(resp.Payload.Bucket, bucketDescription, bucketLabels) { + return nil + } + params := hcpPackerService.NewPackerServiceUpdateBucketParamsWithContext(ctx) params.LocationOrganizationID = c.OrganizationID params.LocationProjectID = c.ProjectID @@ -68,3 +73,23 @@ func (c *Client) UpsertBucket( return err } + +func bucketMetadataMatches( + bucket *hcpPackerModels.HashicorpCloudPacker20230101Bucket, + description string, + labels map[string]string, +) bool { + if bucket == nil { + return false + } + + if bucket.Description != description { + return false + } + + if len(bucket.Labels) == 0 && len(labels) == 0 { + return true + } + + return reflect.DeepEqual(bucket.Labels, labels) +}