diff --git a/command/meta.go b/command/meta.go index c84f7550ee..aca94b1a85 100644 --- a/command/meta.go +++ b/command/meta.go @@ -11,6 +11,7 @@ import ( "log" "os" "path/filepath" + "sort" "strconv" "strings" "time" @@ -398,38 +399,26 @@ func (m *Meta) process(args []string, vars bool) ([]string, error) { if err != nil { return nil, err } - f, err := os.Open(wd) + + fis, err := ioutil.ReadDir(wd) if err != nil { return nil, err } - defer f.Close() - fi, err := f.Stat() - if err != nil { - return nil, err - } - if !fi.IsDir() { - return nil, err - } + // make sure we add the files in order + sort.Slice(fis, func(i, j int) bool { + return fis[i].Name() < fis[j].Name() + }) - err = nil - for err != io.EOF { - var fis []os.FileInfo - fis, err = f.Readdir(128) - if err != nil && err != io.EOF { - return nil, err + for _, fi := range fis { + name := fi.Name() + // Ignore directories, non-var-files, and ignored files + if fi.IsDir() || !isAutoVarFile(name) || config.IsIgnoredFile(name) { + continue } - for _, fi := range fis { - name := fi.Name() - // Ignore directories, non-var-files, and ignored files - if fi.IsDir() || !isAutoVarFile(name) || config.IsIgnoredFile(name) { - continue - } - - m.autoKey = "var-file-default" - preArgs = append(preArgs, "-"+m.autoKey, name) - } + m.autoKey = "var-file-default" + preArgs = append(preArgs, "-"+m.autoKey, name) } args = append(preArgs, args...) diff --git a/command/meta_test.go b/command/meta_test.go index 51f3b49290..63ab0fb28b 100644 --- a/command/meta_test.go +++ b/command/meta_test.go @@ -138,20 +138,12 @@ func TestMetaInputMode_defaultVars(t *testing.T) { // Create a temporary directory for our cwd d := tempDir(t) - if err := os.MkdirAll(d, 0755); err != nil { - t.Fatalf("err: %s", err) - } - cwd, err := os.Getwd() - if err != nil { - t.Fatalf("err: %s", err) - } - if err := os.Chdir(d); err != nil { - t.Fatalf("err: %s", err) - } - defer os.Chdir(cwd) + os.MkdirAll(d, 0755) + defer os.RemoveAll(d) + defer testChdir(t, d)() // Create the default vars file - err = ioutil.WriteFile( + err := ioutil.WriteFile( filepath.Join(d, DefaultVarsFilename), []byte(""), 0644) @@ -326,21 +318,13 @@ func TestMeta_process(t *testing.T) { // Create a temporary directory for our cwd d := tempDir(t) - if err := os.MkdirAll(d, 0755); err != nil { - t.Fatalf("err: %s", err) - } - cwd, err := os.Getwd() - if err != nil { - t.Fatalf("err: %s", err) - } - if err := os.Chdir(d); err != nil { - t.Fatalf("err: %s", err) - } - defer os.Chdir(cwd) + os.MkdirAll(d, 0755) + defer os.RemoveAll(d) + defer testChdir(t, d)() // Create two vars files defaultVarsfile := "terraform.tfvars" - err = ioutil.WriteFile( + err := ioutil.WriteFile( filepath.Join(d, defaultVarsfile), []byte(""), 0644) @@ -388,18 +372,18 @@ func TestMeta_process(t *testing.T) { t.Fatalf("expected %q, got %q", "-var-file-default", args[0]) } if args[1] != defaultVarsfile { - t.Fatalf("expected %q, got %q", defaultVarsfile, args[3]) + t.Fatalf("expected %q, got %q", defaultVarsfile, args[1]) } if args[2] != "-var-file-default" { - t.Fatalf("expected %q, got %q", "-var-file-default", args[0]) + t.Fatalf("expected %q, got %q", "-var-file-default", args[2]) } if args[3] != fileFirstAlphabetical { - t.Fatalf("expected %q, got %q", fileFirstAlphabetical, args[1]) + t.Fatalf("expected %q, got %q", fileFirstAlphabetical, args[3]) } if args[4] != "-var-file-default" { - t.Fatalf("expected %q, got %q", "-var-file-default", args[0]) + t.Fatalf("expected %q, got %q", "-var-file-default", args[4]) } if args[5] != fileLastAlphabetical { - t.Fatalf("expected %q, got %q", fileLastAlphabetical, args[3]) + t.Fatalf("expected %q, got %q", fileLastAlphabetical, args[5]) } }