mirror of
https://github.com/hashicorp/packer.git
synced 2026-10-13 17:52:10 -04:00
Enables specifying channels in the build configuration to automatically update existing HCP Packer registry channels to point to the new build version upon completion. Improves workflow automation and reduces manual channel management for users.
141 lines
4.4 KiB
Go
141 lines
4.4 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
hcpPackerAPI "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"
|
|
"github.com/hashicorp/packer/packer"
|
|
)
|
|
|
|
func (c *Client) CreateBuild(
|
|
ctx context.Context, bucketName, runUUID, fingerprint, componentType string,
|
|
buildStatus hcpPackerModels.HashicorpCloudPacker20230101BuildStatus,
|
|
) (*hcpPackerAPI.PackerServiceCreateBuildOK, error) {
|
|
|
|
params := hcpPackerAPI.NewPackerServiceCreateBuildParamsWithContext(ctx)
|
|
|
|
params.LocationOrganizationID = c.OrganizationID
|
|
params.LocationProjectID = c.ProjectID
|
|
params.BucketName = bucketName
|
|
params.Fingerprint = fingerprint
|
|
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101CreateBuildBody{
|
|
ComponentType: componentType,
|
|
PackerRunUUID: runUUID,
|
|
Status: &buildStatus,
|
|
}
|
|
|
|
return c.Packer.PackerServiceCreateBuild(params, nil)
|
|
}
|
|
|
|
// ListBuilds queries a Version on HCP Packer registry for all of it's associated builds.
|
|
// Currently, all builds are returned regardless of status.
|
|
func (c *Client) ListBuilds(
|
|
ctx context.Context, bucketName, fingerprint string,
|
|
) ([]*hcpPackerModels.HashicorpCloudPacker20230101Build, error) {
|
|
|
|
params := hcpPackerAPI.NewPackerServiceListBuildsParamsWithContext(ctx)
|
|
params.LocationOrganizationID = c.OrganizationID
|
|
params.LocationProjectID = c.ProjectID
|
|
params.BucketName = bucketName
|
|
params.Fingerprint = fingerprint
|
|
|
|
resp, err := c.Packer.PackerServiceListBuilds(params, nil)
|
|
if err != nil {
|
|
return []*hcpPackerModels.HashicorpCloudPacker20230101Build{}, err
|
|
}
|
|
|
|
return resp.Payload.Builds, nil
|
|
}
|
|
|
|
// UpdateBuild updates a single build in a version with the incoming input data.
|
|
func (c *Client) UpdateBuild(
|
|
ctx context.Context,
|
|
bucketName, fingerprint string,
|
|
buildID, runUUID, platform, sourceExternalIdentifier string,
|
|
parentVersionID string,
|
|
parentChannelID string,
|
|
buildLabels map[string]string,
|
|
buildStatus hcpPackerModels.HashicorpCloudPacker20230101BuildStatus,
|
|
artifacts []*hcpPackerModels.HashicorpCloudPacker20230101ArtifactCreateBody,
|
|
metadata *hcpPackerModels.HashicorpCloudPacker20230101BuildMetadata,
|
|
) (string, error) {
|
|
|
|
params := hcpPackerAPI.NewPackerServiceUpdateBuildParamsWithContext(ctx)
|
|
params.BuildID = buildID
|
|
params.LocationOrganizationID = c.OrganizationID
|
|
params.LocationProjectID = c.ProjectID
|
|
params.BucketName = bucketName
|
|
params.Fingerprint = fingerprint
|
|
|
|
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UpdateBuildBody{
|
|
Artifacts: artifacts,
|
|
Labels: buildLabels,
|
|
PackerRunUUID: runUUID,
|
|
ParentChannelID: parentChannelID,
|
|
ParentVersionID: parentVersionID,
|
|
Platform: platform,
|
|
SourceExternalIdentifier: sourceExternalIdentifier,
|
|
Status: &buildStatus,
|
|
Metadata: metadata,
|
|
}
|
|
|
|
resp, err := c.Packer.PackerServiceUpdateBuild(params, nil)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if resp == nil {
|
|
return "", fmt.Errorf(
|
|
"something went wrong retrieving the build %s from bucket %s", buildID, bucketName,
|
|
)
|
|
}
|
|
|
|
return resp.Payload.Build.ID, nil
|
|
}
|
|
|
|
func (c *Client) UploadSbom(
|
|
ctx context.Context,
|
|
bucketName, fingerprint string,
|
|
buildID string,
|
|
sbom packer.SBOM,
|
|
) error {
|
|
|
|
params := hcpPackerAPI.NewPackerServiceUploadSbomParamsWithContext(ctx)
|
|
params.BuildID = buildID
|
|
params.LocationOrganizationID = c.OrganizationID
|
|
params.LocationProjectID = c.ProjectID
|
|
params.BucketName = bucketName
|
|
params.Fingerprint = fingerprint
|
|
|
|
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UploadSbomBody{
|
|
CompressedSbom: sbom.CompressedData,
|
|
Format: &sbom.Format,
|
|
Name: sbom.Name,
|
|
}
|
|
|
|
_, err := c.Packer.PackerServiceUploadSbom(params, nil)
|
|
return err
|
|
}
|
|
|
|
func (c *Client) UpdateChannel(
|
|
ctx context.Context,
|
|
bucketName, channelName string,
|
|
body *hcpPackerModels.HashicorpCloudPacker20230101UpdateChannelBody,
|
|
) (*hcpPackerAPI.PackerServiceUpdateChannelOK, error) {
|
|
|
|
params := hcpPackerAPI.NewPackerServiceUpdateChannelParamsWithContext(ctx)
|
|
params.LocationOrganizationID = c.OrganizationID
|
|
params.LocationProjectID = c.ProjectID
|
|
params.BucketName = bucketName
|
|
params.ChannelName = channelName
|
|
params.Body = body
|
|
resp, err := c.Packer.PackerServiceUpdateChannel(params, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|