mirror of
https://github.com/hashicorp/packer.git
synced 2026-06-13 18:50:11 -04:00
Previously duplicate detection for local variables happened during `Initialise`, through a call to `checkForDuplicateLocalDefinition`. This works in a majority of cases, but for commands like `console`, this was not detected as the return diagnostics for `Initialise` are ignored. That check can be done as early as during parsing however, as the names of blocks are not dynamic in the slightest (no interpolation possible), so we move that detection logic into `Parse`, so that the behaviour is coherent between all commands.
31 lines
884 B
Go
31 lines
884 B
Go
package packer_test
|
|
|
|
import "fmt"
|
|
|
|
func (ts *PackerTestSuite) TestEvalLocalsOrder() {
|
|
ts.SkipNoAcc()
|
|
|
|
pluginDir, cleanup := ts.MakePluginDir()
|
|
defer cleanup()
|
|
|
|
ts.PackerCommand().UsePluginDir(pluginDir).
|
|
Runs(10).
|
|
Stdin("local.test_local\n").
|
|
SetArgs("console", "./templates/locals_no_order.pkr.hcl").
|
|
Assert(MustSucceed(), Grep("\\[\\]", grepStdout, grepInvert))
|
|
}
|
|
|
|
func (ts *PackerTestSuite) TestLocalDuplicates() {
|
|
pluginDir, cleanup := ts.MakePluginDir()
|
|
defer cleanup()
|
|
|
|
for _, cmd := range []string{"console", "validate", "build"} {
|
|
ts.Run(fmt.Sprintf("duplicate local detection with %s command - expect error", cmd), func() {
|
|
ts.PackerCommand().UsePluginDir(pluginDir).
|
|
SetArgs(cmd, "./templates/locals_duplicate.pkr.hcl").
|
|
Assert(MustFail(),
|
|
Grep("Duplicate local definition"),
|
|
Grep("Local variable \"test\" is defined twice"))
|
|
})
|
|
}
|
|
}
|