github.com/hashicorp/packer@v1.14.3/internal/hcp/api/service_bucket.go (about)

     1  package api
     2  
     3  import (
     4  	"context"
     5  
     6  	hcpPackerService "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/client/packer_service"
     7  	hcpPackerModels "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/models"
     8  	"google.golang.org/grpc/codes"
     9  )
    10  
    11  func (c *Client) CreateBucket(
    12  	ctx context.Context, bucketName, bucketDescription string, bucketLabels map[string]string,
    13  ) (*hcpPackerService.PackerServiceCreateBucketOK, error) {
    14  
    15  	createBktParams := hcpPackerService.NewPackerServiceCreateBucketParams()
    16  	createBktParams.LocationOrganizationID = c.OrganizationID
    17  	createBktParams.LocationProjectID = c.ProjectID
    18  	createBktParams.Body = &hcpPackerModels.HashicorpCloudPacker20230101CreateBucketBody{
    19  		Name:        bucketName,
    20  		Description: bucketDescription,
    21  		Labels:      bucketLabels,
    22  	}
    23  
    24  	return c.Packer.PackerServiceCreateBucket(createBktParams, nil)
    25  }
    26  
    27  func (c *Client) DeleteBucket(
    28  	ctx context.Context, bucketName string,
    29  ) (*hcpPackerService.PackerServiceDeleteBucketOK, error) {
    30  
    31  	deleteBktParams := hcpPackerService.NewPackerServiceDeleteBucketParamsWithContext(ctx)
    32  	deleteBktParams.LocationOrganizationID = c.OrganizationID
    33  	deleteBktParams.LocationProjectID = c.ProjectID
    34  	deleteBktParams.BucketName = bucketName
    35  
    36  	return c.Packer.PackerServiceDeleteBucket(deleteBktParams, nil)
    37  }
    38  
    39  // UpsertBucket will create or update a bucket. It calls GetBucket first, if the bucket is not found it creates that bucket
    40  // If GetBucket succeeded we then call UpdateBucket description and bucket labels in case they've changed.
    41  // GetBucket is used instead of CreateBucket since users with bucket level access to specific existing buckets can not create new buckets.
    42  func (c *Client) UpsertBucket(
    43  	ctx context.Context, bucketName, bucketDescription string, bucketLabels map[string]string,
    44  ) error {
    45  
    46  	getParams := hcpPackerService.NewPackerServiceGetBucketParamsWithContext(ctx)
    47  	getParams.LocationOrganizationID = c.OrganizationID
    48  	getParams.LocationProjectID = c.ProjectID
    49  	getParams.BucketName = bucketName
    50  
    51  	_, err := c.Packer.PackerServiceGetBucket(getParams, nil)
    52  	if err != nil {
    53  		if CheckErrorCode(err, codes.NotFound) {
    54  			_, err = c.CreateBucket(ctx, bucketName, bucketDescription, bucketLabels)
    55  		}
    56  		return err
    57  	}
    58  
    59  	params := hcpPackerService.NewPackerServiceUpdateBucketParamsWithContext(ctx)
    60  	params.LocationOrganizationID = c.OrganizationID
    61  	params.LocationProjectID = c.ProjectID
    62  	params.BucketName = bucketName
    63  	params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UpdateBucketBody{
    64  		Description: bucketDescription,
    65  		Labels:      bucketLabels,
    66  	}
    67  	_, err = c.Packer.PackerServiceUpdateBucket(params, nil)
    68  
    69  	return err
    70  }