Skips bucket update when metadata matches current state

Prevents unnecessary update operations by checking if the
bucket's description and labels already match the requested
values before issuing an update.

Improves efficiency and avoids redundant API calls.
This commit is contained in:
Tanmay Jain 2026-04-27 14:07:59 +05:30
parent 48f5e6becc
commit 072dfdee9e
2 changed files with 32 additions and 2 deletions

View file

@ -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(

View file

@ -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)
}