hcl2_upgrade: allow to hcl2_upgrade with unknown builders, just log errors (#11049)
This commit is contained in:
parent
21833e7324
commit
98990fc34e
|
@ -153,7 +153,7 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
|
|
||||||
hdl, ret := c.GetConfigFromJSON(&cla.MetaArgs)
|
hdl, ret := c.GetConfigFromJSON(&cla.MetaArgs)
|
||||||
if ret != 0 {
|
if ret != 0 {
|
||||||
return ret
|
c.Ui.Error(fmt.Sprintf("Failed to get config from JSON"))
|
||||||
}
|
}
|
||||||
|
|
||||||
core := hdl.(*CoreWrapper).Core
|
core := hdl.(*CoreWrapper).Core
|
||||||
|
@ -168,16 +168,16 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := packerBlock.Parse(tpl); err != nil {
|
if err := packerBlock.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := &VariableParser{
|
variables := &VariableParser{
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := variables.Parse(tpl); err != nil {
|
if err := variables.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following variables.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
locals := &LocalsParser{
|
locals := &LocalsParser{
|
||||||
|
@ -185,8 +185,8 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := locals.Parse(tpl); err != nil {
|
if err := locals.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following locals.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
builders := []*template.Builder{}
|
builders := []*template.Builder{}
|
||||||
|
@ -205,8 +205,8 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := amazonAmiDatasource.Parse(tpl); err != nil {
|
if err := amazonAmiDatasource.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following amazonAmiDatasource.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
sources := &SourceParser{
|
sources := &SourceParser{
|
||||||
|
@ -215,8 +215,8 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := sources.Parse(tpl); err != nil {
|
if err := sources.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following sources.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
build := &BuildParser{
|
build := &BuildParser{
|
||||||
|
@ -224,16 +224,16 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := build.Parse(tpl); err != nil {
|
if err := build.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following build.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
amazonSecretsDatasource := &AmazonSecretsDatasourceParser{
|
amazonSecretsDatasource := &AmazonSecretsDatasourceParser{
|
||||||
WithAnnotations: cla.WithAnnotations,
|
WithAnnotations: cla.WithAnnotations,
|
||||||
}
|
}
|
||||||
if err := amazonSecretsDatasource.Parse(tpl); err != nil {
|
if err := amazonSecretsDatasource.Parse(tpl); err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(fmt.Sprintf("Ignoring following amazonSecretsDatasource.Parse error: %v", err))
|
||||||
return 1
|
ret = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write file
|
// Write file
|
||||||
|
@ -255,8 +255,8 @@ func (c *HCL2UpgradeCommand) RunContext(_ context.Context, cla *HCL2UpgradeArgs)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Ui.Say(fmt.Sprintf("Successfully created %s ", cla.OutputFile))
|
c.Ui.Say(fmt.Sprintf("Successfully created %s. Exit %d", cla.OutputFile, ret))
|
||||||
return 0
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
type UnhandleableArgumentError struct {
|
type UnhandleableArgumentError struct {
|
||||||
|
@ -971,6 +971,7 @@ type SourceParser struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *SourceParser) Parse(tpl *template.Template) error {
|
func (p *SourceParser) Parse(tpl *template.Template) error {
|
||||||
|
var unknownBuilders []string
|
||||||
if p.out == nil {
|
if p.out == nil {
|
||||||
p.out = []byte{}
|
p.out = []byte{}
|
||||||
}
|
}
|
||||||
|
@ -980,7 +981,8 @@ func (p *SourceParser) Parse(tpl *template.Template) error {
|
||||||
|
|
||||||
body.AppendNewline()
|
body.AppendNewline()
|
||||||
if !p.BuilderPlugins.Has(builderCfg.Type) {
|
if !p.BuilderPlugins.Has(builderCfg.Type) {
|
||||||
return fmt.Errorf("unknown builder type: %q\n", builderCfg.Type)
|
unknownBuilders = append(unknownBuilders, builderCfg.Type)
|
||||||
|
|
||||||
}
|
}
|
||||||
if builderCfg.Name == "" || builderCfg.Name == builderCfg.Type {
|
if builderCfg.Name == "" || builderCfg.Name == builderCfg.Type {
|
||||||
builderCfg.Name = fmt.Sprintf("autogenerated_%d", i+1)
|
builderCfg.Name = fmt.Sprintf("autogenerated_%d", i+1)
|
||||||
|
@ -993,6 +995,9 @@ func (p *SourceParser) Parse(tpl *template.Template) error {
|
||||||
|
|
||||||
p.out = append(p.out, transposeTemplatingCalls(sourcesContent.Bytes())...)
|
p.out = append(p.out, transposeTemplatingCalls(sourcesContent.Bytes())...)
|
||||||
}
|
}
|
||||||
|
if len(unknownBuilders) > 0 {
|
||||||
|
return fmt.Errorf("unknown builder type(s): %v\n", unknownBuilders)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,11 @@ func Test_hcl2_upgrade(t *testing.T) {
|
||||||
_ = cwd
|
_ = cwd
|
||||||
|
|
||||||
tc := []struct {
|
tc := []struct {
|
||||||
folder string
|
folder string
|
||||||
flags []string
|
flags []string
|
||||||
|
exitCode int
|
||||||
}{
|
}{
|
||||||
|
{folder: "unknown_builder", flags: []string{}, exitCode: 1},
|
||||||
{folder: "complete", flags: []string{"-with-annotations"}},
|
{folder: "complete", flags: []string{"-with-annotations"}},
|
||||||
{folder: "without-annotations", flags: []string{}},
|
{folder: "without-annotations", flags: []string{}},
|
||||||
{folder: "minimal", flags: []string{"-with-annotations"}},
|
{folder: "minimal", flags: []string{"-with-annotations"}},
|
||||||
|
@ -43,9 +45,9 @@ func Test_hcl2_upgrade(t *testing.T) {
|
||||||
}
|
}
|
||||||
args = append(args, inputPath)
|
args = append(args, inputPath)
|
||||||
p := helperCommand(t, args...)
|
p := helperCommand(t, args...)
|
||||||
bs, err := p.CombinedOutput()
|
err := p.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%v %s", err, bs)
|
t.Logf("run returned an error: %s", err)
|
||||||
}
|
}
|
||||||
expected := string(mustBytes(ioutil.ReadFile(expectedPath)))
|
expected := string(mustBytes(ioutil.ReadFile(expectedPath)))
|
||||||
actual := string(mustBytes(ioutil.ReadFile(outputPath)))
|
actual := string(mustBytes(ioutil.ReadFile(outputPath)))
|
||||||
|
@ -53,6 +55,10 @@ func Test_hcl2_upgrade(t *testing.T) {
|
||||||
if diff := cmp.Diff(expected, actual); diff != "" {
|
if diff := cmp.Diff(expected, actual); diff != "" {
|
||||||
t.Fatalf("unexpected output: %s", diff)
|
t.Fatalf("unexpected output: %s", diff)
|
||||||
}
|
}
|
||||||
|
actualExitCode := p.ProcessState.ExitCode()
|
||||||
|
if tc.exitCode != actualExitCode {
|
||||||
|
t.Fatalf("unexpected exit code: %d found; expected %d ", actualExitCode, tc.exitCode)
|
||||||
|
}
|
||||||
os.Remove(outputPath)
|
os.Remove(outputPath)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
packer {
|
||||||
|
required_version = ">= 1.6.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_access_key" {
|
||||||
|
type = string
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_region" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_secret_key" {
|
||||||
|
type = string
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
source "potatoes" "autogenerated_1" {
|
||||||
|
access_key = "${var.aws_access_key}"
|
||||||
|
ami_description = "Ubuntu 16.04 LTS - expand root partition"
|
||||||
|
ami_name = "ubuntu-16-04-test"
|
||||||
|
encrypt_boot = true
|
||||||
|
launch_block_device_mappings {
|
||||||
|
delete_on_termination = true
|
||||||
|
device_name = "/dev/sda1"
|
||||||
|
volume_size = 48
|
||||||
|
volume_type = "gp2"
|
||||||
|
}
|
||||||
|
region = "${var.aws_region}"
|
||||||
|
secret_key = "${var.aws_secret_key}"
|
||||||
|
source_ami = "ami1234567"
|
||||||
|
spot_instance_types = ["t2.small", "t2.medium", "t2.large"]
|
||||||
|
spot_price = "0.0075"
|
||||||
|
ssh_interface = "session_manager"
|
||||||
|
ssh_username = "ubuntu"
|
||||||
|
temporary_iam_instance_profile_policy_document {
|
||||||
|
Statement {
|
||||||
|
Action = ["*"]
|
||||||
|
Effect = "Allow"
|
||||||
|
Resource = ["*"]
|
||||||
|
}
|
||||||
|
Version = "2012-10-17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
build {
|
||||||
|
sources = ["source.potatoes.autogenerated_1"]
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"min_packer_version": "1.6.0",
|
||||||
|
"variables": {
|
||||||
|
"aws_region": null,
|
||||||
|
"aws_secret_key": "",
|
||||||
|
"aws_access_key": ""
|
||||||
|
},
|
||||||
|
"builders": [
|
||||||
|
{
|
||||||
|
"type": "potatoes",
|
||||||
|
"region": "{{ user `aws_region` }}",
|
||||||
|
"secret_key": "{{ user `aws_secret_key` }}",
|
||||||
|
"access_key": "{{ user `aws_access_key` }}",
|
||||||
|
"ami_name": "ubuntu-16-04-test",
|
||||||
|
"ami_description": "Ubuntu 16.04 LTS - expand root partition",
|
||||||
|
"source_ami": "ami1234567",
|
||||||
|
"launch_block_device_mappings": [
|
||||||
|
{
|
||||||
|
"delete_on_termination": true,
|
||||||
|
"device_name": "/dev/sda1",
|
||||||
|
"volume_type": "gp2",
|
||||||
|
"volume_size": 48
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"spot_price": "0.0075",
|
||||||
|
"spot_instance_types": [
|
||||||
|
"t2.small",
|
||||||
|
"t2.medium",
|
||||||
|
"t2.large"
|
||||||
|
],
|
||||||
|
"encrypt_boot": true,
|
||||||
|
"ssh_username": "ubuntu",
|
||||||
|
"temporary_iam_instance_profile_policy_document": {
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"Resource": ["*"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ssh_interface": "session_manager"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue