You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
packer/internal/hcp/api/service_bucket.go

71 lines
2.6 KiB

package api
import (
"context"
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"
"google.golang.org/grpc/codes"
)
func (c *Client) CreateBucket(
ctx context.Context, bucketName, bucketDescription string, bucketLabels map[string]string,
) (*hcpPackerService.PackerServiceCreateBucketOK, error) {
createBktParams := hcpPackerService.NewPackerServiceCreateBucketParams()
createBktParams.LocationOrganizationID = c.OrganizationID
createBktParams.LocationProjectID = c.ProjectID
createBktParams.Body = &hcpPackerModels.HashicorpCloudPacker20230101CreateBucketBody{
Name: bucketName,
Description: bucketDescription,
Labels: bucketLabels,
}
return c.Packer.PackerServiceCreateBucket(createBktParams, nil)
}
func (c *Client) DeleteBucket(
ctx context.Context, bucketName string,
) (*hcpPackerService.PackerServiceDeleteBucketOK, error) {
deleteBktParams := hcpPackerService.NewPackerServiceDeleteBucketParamsWithContext(ctx)
deleteBktParams.LocationOrganizationID = c.OrganizationID
deleteBktParams.LocationProjectID = c.ProjectID
deleteBktParams.BucketName = bucketName
return c.Packer.PackerServiceDeleteBucket(deleteBktParams, nil)
}
// UpsertBucket will create or update a bucket. It calls GetBucket first, if the bucket is not found it creates that bucket
// If GetBucket succeeded we then call UpdateBucket description and bucket labels in case they've changed.
// GetBucket is used instead of CreateBucket since users with bucket level access to specific existing buckets can not create new buckets.
func (c *Client) UpsertBucket(
ctx context.Context, bucketName, bucketDescription string, bucketLabels map[string]string,
) error {
getParams := hcpPackerService.NewPackerServiceGetBucketParamsWithContext(ctx)
getParams.LocationOrganizationID = c.OrganizationID
getParams.LocationProjectID = c.ProjectID
getParams.BucketName = bucketName
_, err := c.Packer.PackerServiceGetBucket(getParams, nil)
if err != nil {
if CheckErrorCode(err, codes.NotFound) {
_, err = c.CreateBucket(ctx, bucketName, bucketDescription, bucketLabels)
}
return err
}
params := hcpPackerService.NewPackerServiceUpdateBucketParamsWithContext(ctx)
params.LocationOrganizationID = c.OrganizationID
params.LocationProjectID = c.ProjectID
params.BucketName = bucketName
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UpdateBucketBody{
Description: bucketDescription,
Labels: bucketLabels,
}
_, err = c.Packer.PackerServiceUpdateBucket(params, nil)
return err
}