mirror of
https://github.com/hashicorp/packer.git
synced 2026-10-31 02:18:24 -04:00
* add hcp packer new nomenclature updates * Update docs with nomenclature changes * Update navigation bar links * Bump github.com/hashicorp/hcp-sdk-go from 0.81.0 to 0.82.0 * fix acceptance test template --------- Co-authored-by: sylviamoss <[email protected]> Co-authored-by: Wilken Rivera <[email protected]>
130 lines
2.8 KiB
Go
130 lines
2.8 KiB
Go
package registry
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
"github.com/zclconf/go-cty/cty"
|
|
"github.com/zclconf/go-cty/cty/gocty"
|
|
)
|
|
|
|
type hcpVersion struct {
|
|
VersionID string
|
|
ChannelID string
|
|
}
|
|
|
|
func versionValueToDSOutput(iterVal map[string]cty.Value) hcpVersion {
|
|
version := hcpVersion{}
|
|
for k, v := range iterVal {
|
|
switch k {
|
|
case "id":
|
|
version.VersionID = v.AsString()
|
|
case "channel_id":
|
|
version.ChannelID = v.AsString()
|
|
}
|
|
}
|
|
return version
|
|
}
|
|
|
|
type hcpArtifact struct {
|
|
ExternalIdentifier string
|
|
ChannelID string
|
|
VersionID string
|
|
}
|
|
|
|
func artifactValueToDSOutput(imageVal map[string]cty.Value) hcpArtifact {
|
|
artifact := hcpArtifact{}
|
|
for k, v := range imageVal {
|
|
switch k {
|
|
case "external_identifier":
|
|
artifact.ExternalIdentifier = v.AsString()
|
|
case "channel_id":
|
|
artifact.ChannelID = v.AsString()
|
|
case "version_id":
|
|
artifact.VersionID = v.AsString()
|
|
}
|
|
}
|
|
|
|
return artifact
|
|
}
|
|
|
|
func withDatasourceConfiguration(vals map[string]cty.Value) bucketConfigurationOpts {
|
|
return func(bucket *Bucket) hcl.Diagnostics {
|
|
var diags hcl.Diagnostics
|
|
|
|
versionDS, versionOK := vals[hcpVersionDatasourceType]
|
|
artifactDS, artifactOK := vals[hcpArtifactDatasourceType]
|
|
|
|
if !artifactOK && !versionOK {
|
|
return nil
|
|
}
|
|
|
|
versions := map[string]hcpVersion{}
|
|
|
|
var err error
|
|
if versionOK {
|
|
hcpData := map[string]cty.Value{}
|
|
err = gocty.FromCtyValue(versionDS, &hcpData)
|
|
if err != nil {
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
Severity: hcl.DiagError,
|
|
Summary: "Invalid HCP datasources",
|
|
Detail: fmt.Sprintf(
|
|
"Failed to decode hcp-packer-version datasources: %s", err,
|
|
),
|
|
})
|
|
return diags
|
|
}
|
|
|
|
for k, v := range hcpData {
|
|
versionVals := v.AsValueMap()
|
|
version := versionValueToDSOutput(versionVals)
|
|
versions[k] = version
|
|
}
|
|
}
|
|
|
|
artifacts := map[string]hcpArtifact{}
|
|
|
|
if artifactOK {
|
|
hcpData := map[string]cty.Value{}
|
|
err = gocty.FromCtyValue(artifactDS, &hcpData)
|
|
if err != nil {
|
|
diags = append(diags, &hcl.Diagnostic{
|
|
Severity: hcl.DiagError,
|
|
Summary: "Invalid HCP datasources",
|
|
Detail: fmt.Sprintf(
|
|
"Failed to decode hcp-packer-artifact datasources: %s", err,
|
|
),
|
|
})
|
|
return diags
|
|
}
|
|
|
|
for k, v := range hcpData {
|
|
artifactVals := v.AsValueMap()
|
|
artifact := artifactValueToDSOutput(artifactVals)
|
|
artifacts[k] = artifact
|
|
}
|
|
}
|
|
|
|
for _, a := range artifacts {
|
|
parentVersion := ParentVersion{}
|
|
parentVersion.VersionID = a.VersionID
|
|
|
|
if a.ChannelID != "" {
|
|
parentVersion.ChannelID = a.ChannelID
|
|
} else {
|
|
for _, v := range versions {
|
|
if v.VersionID == a.VersionID {
|
|
parentVersion.ChannelID = v.ChannelID
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
bucket.SourceExternalIdentifierToParentVersions[a.ExternalIdentifier] = parentVersion
|
|
}
|
|
|
|
return diags
|
|
}
|
|
}
|