config: mark even index accesses as a multi-access
This commit is contained in:
parent
aa6a758f6b
commit
cfb08b6c60
|
@ -4,6 +4,7 @@ package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/multierror"
|
"github.com/hashicorp/terraform/helper/multierror"
|
||||||
|
@ -222,10 +223,24 @@ func NewResourceVariable(key string) (*ResourceVariable, error) {
|
||||||
parts := strings.SplitN(key, ".", 3)
|
parts := strings.SplitN(key, ".", 3)
|
||||||
field := parts[2]
|
field := parts[2]
|
||||||
multi := false
|
multi := false
|
||||||
|
var index int
|
||||||
|
|
||||||
if idx := strings.Index(field, "."); idx != -1 && field[:idx] == "*" {
|
if idx := strings.Index(field, "."); idx != -1 {
|
||||||
multi = true
|
indexStr := field[:idx]
|
||||||
field = field[idx+1:]
|
multi = indexStr == "*"
|
||||||
|
index = -1
|
||||||
|
|
||||||
|
if !multi {
|
||||||
|
indexInt, err := strconv.ParseInt(indexStr, 0, 0)
|
||||||
|
if err == nil {
|
||||||
|
multi = true
|
||||||
|
index = int(indexInt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if multi {
|
||||||
|
field = field[idx+1:]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ResourceVariable{
|
return &ResourceVariable{
|
||||||
|
@ -233,6 +248,7 @@ func NewResourceVariable(key string) (*ResourceVariable, error) {
|
||||||
Name: parts[1],
|
Name: parts[1],
|
||||||
Field: field,
|
Field: field,
|
||||||
Multi: multi,
|
Multi: multi,
|
||||||
|
Index: index,
|
||||||
key: key,
|
key: key,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,34 @@ func TestResourceVariable_Multi(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestResourceVariable_MultiIndex(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
Input string
|
||||||
|
Index int
|
||||||
|
Field string
|
||||||
|
}{
|
||||||
|
{"foo.bar.*.baz", -1, "baz"},
|
||||||
|
{"foo.bar.0.baz", 0, "baz"},
|
||||||
|
{"foo.bar.5.baz", 5, "baz"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
v, err := NewResourceVariable(tc.Input)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if !v.Multi {
|
||||||
|
t.Fatalf("should be multi: %s", tc.Input)
|
||||||
|
}
|
||||||
|
if v.Index != tc.Index {
|
||||||
|
t.Fatalf("bad: %d\n\n%s", v.Index, tc.Input)
|
||||||
|
}
|
||||||
|
if v.Field != tc.Field {
|
||||||
|
t.Fatalf("bad: %s\n\n%s", v.Field, tc.Input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewUserVariable(t *testing.T) {
|
func TestNewUserVariable(t *testing.T) {
|
||||||
v, err := NewUserVariable("var.bar")
|
v, err := NewUserVariable("var.bar")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue