mirror of
https://github.com/hashicorp/packer.git
synced 2026-06-23 23:48:58 -04:00
* Update UpsertBucket to first call GetBucket, this will allow bucket level role based authentication, as CreateBucket uses project level auth * Fix one incorrect test failure message
70 lines
2.6 KiB
Go
70 lines
2.6 KiB
Go
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
|
|
}
|