427 lines
11 KiB
Go
427 lines
11 KiB
Go
package hcl2template
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
. "github.com/hashicorp/packer/hcl2template/internal"
|
|
"github.com/hashicorp/packer/packer"
|
|
)
|
|
|
|
func TestParse_build(t *testing.T) {
|
|
defaultParser := getBasicParser()
|
|
|
|
tests := []parseTest{
|
|
{"basic build no src",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/basic.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
Sources: []SourceUseBlock{
|
|
{
|
|
SourceRef: SourceRef{
|
|
Type: "amazon-ebs",
|
|
Name: "ubuntu-1604",
|
|
},
|
|
},
|
|
{
|
|
SourceRef: refVBIsoUbuntu1204,
|
|
},
|
|
},
|
|
ProvisionerBlocks: []*ProvisionerBlock{
|
|
{
|
|
PType: "shell",
|
|
},
|
|
{
|
|
PType: "file",
|
|
},
|
|
},
|
|
PostProcessorsLists: [][]*PostProcessorBlock{
|
|
{
|
|
{
|
|
PType: "amazon-import",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{},
|
|
true,
|
|
},
|
|
{"untyped provisioner",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/provisioner_untyped.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: nil,
|
|
},
|
|
true, true,
|
|
nil,
|
|
false,
|
|
},
|
|
{"inexistent provisioner",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/provisioner_inexistent.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
ProvisionerBlocks: []*ProvisionerBlock{
|
|
{
|
|
PType: "inexistant",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{&packer.CoreBuild{
|
|
Provisioners: []packer.CoreBuildProvisioner{},
|
|
}},
|
|
false,
|
|
},
|
|
{"two error-cleanup-provisioner",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/two-error-cleanup-provisioner.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Sources: map[SourceRef]SourceBlock{
|
|
refVBIsoUbuntu1204: {Type: "virtualbox-iso", Name: "ubuntu-1204"},
|
|
},
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{&packer.CoreBuild{
|
|
Builder: emptyMockBuilder,
|
|
CleanupProvisioner: packer.CoreBuildProvisioner{
|
|
PType: "shell-local",
|
|
Provisioner: &HCL2Provisioner{
|
|
Provisioner: &MockProvisioner{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}},
|
|
false,
|
|
},
|
|
{"untyped post-processor",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/post-processor_untyped.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: nil,
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{&packer.CoreBuild{}},
|
|
false,
|
|
},
|
|
{"inexistent post-processor",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/post-processor_inexistent.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
PostProcessorsLists: [][]*PostProcessorBlock{
|
|
{
|
|
{
|
|
PType: "inexistant",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{&packer.CoreBuild{
|
|
PostProcessors: [][]packer.CoreBuildPostProcessor{},
|
|
}},
|
|
true,
|
|
},
|
|
{"invalid source",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/invalid_source_reference.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: nil,
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{},
|
|
false,
|
|
},
|
|
{"named build",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/named.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
Name: "somebuild",
|
|
Sources: []SourceUseBlock{
|
|
{
|
|
SourceRef: SourceRef{
|
|
Type: "amazon-ebs",
|
|
Name: "ubuntu-1604",
|
|
},
|
|
},
|
|
{
|
|
SourceRef: refVBIsoUbuntu1204,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
true, true,
|
|
[]packersdk.Build{},
|
|
true,
|
|
},
|
|
{"post-processor with only and except",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/post-processor_onlyexcept.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Sources: map[SourceRef]SourceBlock{
|
|
refVBIsoUbuntu1204: {Type: "virtualbox-iso", Name: "ubuntu-1204"},
|
|
refAWSEBSUbuntu1604: {Type: "amazon-ebs", Name: "ubuntu-1604"},
|
|
},
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
Sources: []SourceUseBlock{
|
|
{
|
|
SourceRef: refVBIsoUbuntu1204,
|
|
},
|
|
{
|
|
SourceRef: SourceRef{Type: "amazon-ebs", Name: "ubuntu-1604"},
|
|
LocalName: "aws-ubuntu-16.04",
|
|
},
|
|
},
|
|
ProvisionerBlocks: nil,
|
|
PostProcessorsLists: [][]*PostProcessorBlock{
|
|
{
|
|
{
|
|
PType: "amazon-import",
|
|
OnlyExcept: OnlyExcept{Only: []string{"virtualbox-iso.ubuntu-1204"}, Except: nil},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
PType: "manifest",
|
|
OnlyExcept: OnlyExcept{Only: nil, Except: []string{"virtualbox-iso.ubuntu-1204"}},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
PType: "amazon-import",
|
|
OnlyExcept: OnlyExcept{Only: []string{"amazon-ebs.aws-ubuntu-16.04"}, Except: nil},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
PType: "manifest",
|
|
OnlyExcept: OnlyExcept{Only: nil, Except: []string{"amazon-ebs.aws-ubuntu-16.04"}},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
false, false,
|
|
[]packersdk.Build{
|
|
&packer.CoreBuild{
|
|
Type: "virtualbox-iso.ubuntu-1204",
|
|
Prepared: true,
|
|
Builder: emptyMockBuilder,
|
|
Provisioners: []packer.CoreBuildProvisioner{},
|
|
PostProcessors: [][]packer.CoreBuildPostProcessor{
|
|
{
|
|
{
|
|
PType: "amazon-import",
|
|
PostProcessor: &HCL2PostProcessor{
|
|
PostProcessor: &MockPostProcessor{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
PType: "manifest",
|
|
PostProcessor: &HCL2PostProcessor{
|
|
PostProcessor: &MockPostProcessor{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
&packer.CoreBuild{
|
|
Type: "amazon-ebs.aws-ubuntu-16.04",
|
|
Prepared: true,
|
|
Builder: emptyMockBuilder,
|
|
Provisioners: []packer.CoreBuildProvisioner{},
|
|
PostProcessors: [][]packer.CoreBuildPostProcessor{
|
|
{
|
|
{
|
|
PType: "manifest",
|
|
PostProcessor: &HCL2PostProcessor{
|
|
PostProcessor: &MockPostProcessor{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
PType: "amazon-import",
|
|
PostProcessor: &HCL2PostProcessor{
|
|
PostProcessor: &MockPostProcessor{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
false,
|
|
},
|
|
{"provisioner with only and except",
|
|
defaultParser,
|
|
parseTestArgs{"testdata/build/provisioner_onlyexcept.pkr.hcl", nil, nil},
|
|
&PackerConfig{
|
|
CorePackerVersionString: lockedVersion,
|
|
Basedir: filepath.Join("testdata", "build"),
|
|
Sources: map[SourceRef]SourceBlock{
|
|
refVBIsoUbuntu1204: {Type: "virtualbox-iso", Name: "ubuntu-1204"},
|
|
refAWSEBSUbuntu1604: {Type: "amazon-ebs", Name: "ubuntu-1604"},
|
|
},
|
|
Builds: Builds{
|
|
&BuildBlock{
|
|
Sources: []SourceUseBlock{
|
|
{
|
|
SourceRef: refVBIsoUbuntu1204,
|
|
},
|
|
{
|
|
SourceRef: SourceRef{Type: "amazon-ebs", Name: "ubuntu-1604"},
|
|
LocalName: "aws-ubuntu-16.04",
|
|
},
|
|
},
|
|
ProvisionerBlocks: []*ProvisionerBlock{
|
|
{
|
|
PType: "shell",
|
|
OnlyExcept: OnlyExcept{Only: []string{"virtualbox-iso.ubuntu-1204"}},
|
|
},
|
|
{
|
|
PType: "file",
|
|
OnlyExcept: OnlyExcept{Except: []string{"virtualbox-iso.ubuntu-1204"}},
|
|
},
|
|
{
|
|
PType: "shell",
|
|
OnlyExcept: OnlyExcept{Only: []string{"amazon-ebs.aws-ubuntu-16.04"}},
|
|
},
|
|
{
|
|
PType: "file",
|
|
OnlyExcept: OnlyExcept{Except: []string{"amazon-ebs.aws-ubuntu-16.04"}},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
false, false,
|
|
[]packersdk.Build{
|
|
&packer.CoreBuild{
|
|
Type: "virtualbox-iso.ubuntu-1204",
|
|
Prepared: true,
|
|
Builder: emptyMockBuilder,
|
|
Provisioners: []packer.CoreBuildProvisioner{
|
|
{
|
|
PType: "shell",
|
|
Provisioner: &HCL2Provisioner{
|
|
Provisioner: &MockProvisioner{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
PType: "file",
|
|
Provisioner: &HCL2Provisioner{
|
|
Provisioner: &MockProvisioner{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
PostProcessors: [][]packer.CoreBuildPostProcessor{},
|
|
},
|
|
&packer.CoreBuild{
|
|
Type: "amazon-ebs.aws-ubuntu-16.04",
|
|
Prepared: true,
|
|
Builder: emptyMockBuilder,
|
|
Provisioners: []packer.CoreBuildProvisioner{
|
|
{
|
|
PType: "file",
|
|
Provisioner: &HCL2Provisioner{
|
|
Provisioner: &MockProvisioner{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
PType: "shell",
|
|
Provisioner: &HCL2Provisioner{
|
|
Provisioner: &MockProvisioner{
|
|
Config: MockConfig{
|
|
NestedMockConfig: NestedMockConfig{Tags: []MockTag{}},
|
|
NestedSlice: []NestedMockConfig{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
PostProcessors: [][]packer.CoreBuildPostProcessor{},
|
|
},
|
|
},
|
|
false,
|
|
},
|
|
}
|
|
testParse(t, tests)
|
|
}
|