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/registry/deprecated_ds_config.go

132 lines
3.0 KiB

package registry
import (
"fmt"
"github.com/hashicorp/hcl/v2"
sdkpacker "github.com/hashicorp/packer-plugin-sdk/packer"
"github.com/zclconf/go-cty/cty"
"github.com/zclconf/go-cty/cty/gocty"
)
type hcpImage struct {
ID string
ChannelID string
IterationID string
}
func imageValueToDSOutput(imageVal map[string]cty.Value) hcpImage {
image := hcpImage{}
for k, v := range imageVal {
switch k {
case "id":
image.ID = v.AsString()
case "channel_id":
image.ChannelID = v.AsString()
case "iteration_id":
image.IterationID = v.AsString()
}
}
return image
}
type hcpIteration struct {
ID string
ChannelID string
}
func iterValueToDSOutput(iterVal map[string]cty.Value) hcpIteration {
iter := hcpIteration{}
for k, v := range iterVal {
switch k {
case "id":
iter.ID = v.AsString()
case "channel_id":
iter.ChannelID = v.AsString()
}
}
return iter
}
func withDeprecatedDatasourceConfiguration(vals map[string]cty.Value, ui sdkpacker.Ui) bucketConfigurationOpts {
return func(bucket *Bucket) hcl.Diagnostics {
var diags hcl.Diagnostics
imageDS, imageOK := vals[hcpImageDatasourceType]
iterDS, iterOK := vals[hcpIterationDatasourceType]
if !imageOK && !iterOK {
return nil
}
iterations := map[string]hcpIteration{}
var err error
if iterOK {
ui.Say("[WARN] Deprecation: `hcp-packer-iteration` datasource has been deprecated. " +
"Please use `hcp-packer-version` datasource instead.")
hcpData := map[string]cty.Value{}
err = gocty.FromCtyValue(iterDS, &hcpData)
if err != nil {
diags = append(diags, &hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: "Invalid HCP datasources",
Detail: fmt.Sprintf("Failed to decode hcp-packer-iteration datasources: %s", err),
})
return diags
}
for k, v := range hcpData {
iterVals := v.AsValueMap()
iter := iterValueToDSOutput(iterVals)
iterations[k] = iter
}
}
images := map[string]hcpImage{}
if imageOK {
ui.Say("[WARN] Deprecation: `hcp-packer-image` datasource has been deprecated. " +
"Please use `hcp-packer-artifact` datasource instead.")
hcpData := map[string]cty.Value{}
err = gocty.FromCtyValue(imageDS, &hcpData)
if err != nil {
diags = append(diags, &hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: "Invalid HCP datasources",
Detail: fmt.Sprintf("Failed to decode hcp_packer_image datasources: %s", err),
})
return diags
}
for k, v := range hcpData {
imageVals := v.AsValueMap()
img := imageValueToDSOutput(imageVals)
images[k] = img
}
}
for _, img := range images {
sourceIteration := ParentVersion{}
sourceIteration.VersionID = img.IterationID
if img.ChannelID != "" {
sourceIteration.ChannelID = img.ChannelID
} else {
for _, it := range iterations {
if it.ID == img.IterationID {
sourceIteration.ChannelID = it.ChannelID
break
}
}
}
bucket.SourceExternalIdentifierToParentVersions[img.ID] = sourceIteration
}
return diags
}
}