core: Convert context vars to map[string]interface{}
This is the first step in allowing overrides of map and list variables. We convert Context.variables to map[string]interface{} from map[string]string and fix up all the call sites.
This commit is contained in:
parent
d4e8616a9c
commit
5d18f41f04
|
@ -294,7 +294,7 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
|
||||||
copy(opts.Hooks[1:], m.ContextOpts.Hooks)
|
copy(opts.Hooks[1:], m.ContextOpts.Hooks)
|
||||||
copy(opts.Hooks[len(m.ContextOpts.Hooks)+1:], m.extraHooks)
|
copy(opts.Hooks[len(m.ContextOpts.Hooks)+1:], m.extraHooks)
|
||||||
|
|
||||||
vs := make(map[string]string)
|
vs := make(map[string]interface{})
|
||||||
for k, v := range opts.Variables {
|
for k, v := range opts.Variables {
|
||||||
vs[k] = v
|
vs[k] = v
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,21 +276,21 @@ func (c *PushCommand) Synopsis() string {
|
||||||
// pushClient is implementd internally to control where pushes go. This is
|
// pushClient is implementd internally to control where pushes go. This is
|
||||||
// either to Atlas or a mock for testing.
|
// either to Atlas or a mock for testing.
|
||||||
type pushClient interface {
|
type pushClient interface {
|
||||||
Get(string) (map[string]string, error)
|
Get(string) (map[string]interface{}, error)
|
||||||
Upsert(*pushUpsertOptions) (int, error)
|
Upsert(*pushUpsertOptions) (int, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type pushUpsertOptions struct {
|
type pushUpsertOptions struct {
|
||||||
Name string
|
Name string
|
||||||
Archive *archive.Archive
|
Archive *archive.Archive
|
||||||
Variables map[string]string
|
Variables map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type atlasPushClient struct {
|
type atlasPushClient struct {
|
||||||
Client *atlas.Client
|
Client *atlas.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *atlasPushClient) Get(name string) (map[string]string, error) {
|
func (c *atlasPushClient) Get(name string) (map[string]interface{}, error) {
|
||||||
user, name, err := atlas.ParseSlug(name)
|
user, name, err := atlas.ParseSlug(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -301,7 +301,7 @@ func (c *atlasPushClient) Get(name string) (map[string]string, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var variables map[string]string
|
var variables map[string]interface{}
|
||||||
if version != nil {
|
if version != nil {
|
||||||
variables = version.Variables
|
variables = version.Variables
|
||||||
}
|
}
|
||||||
|
@ -333,7 +333,7 @@ type mockPushClient struct {
|
||||||
|
|
||||||
GetCalled bool
|
GetCalled bool
|
||||||
GetName string
|
GetName string
|
||||||
GetResult map[string]string
|
GetResult map[string]interface{}
|
||||||
GetError error
|
GetError error
|
||||||
|
|
||||||
UpsertCalled bool
|
UpsertCalled bool
|
||||||
|
@ -342,7 +342,7 @@ type mockPushClient struct {
|
||||||
UpsertError error
|
UpsertError error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *mockPushClient) Get(name string) (map[string]string, error) {
|
func (c *mockPushClient) Get(name string) (map[string]interface{}, error) {
|
||||||
c.GetCalled = true
|
c.GetCalled = true
|
||||||
c.GetName = name
|
c.GetName = name
|
||||||
return c.GetResult, c.GetError
|
return c.GetResult, c.GetError
|
||||||
|
|
|
@ -61,7 +61,7 @@ func TestPush_good(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", actual)
|
t.Fatalf("bad: %#v", actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := make(map[string]string)
|
variables := make(map[string]interface{})
|
||||||
if !reflect.DeepEqual(client.UpsertOptions.Variables, variables) {
|
if !reflect.DeepEqual(client.UpsertOptions.Variables, variables) {
|
||||||
t.Fatalf("bad: %#v", client.UpsertOptions)
|
t.Fatalf("bad: %#v", client.UpsertOptions)
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ func TestPush_input(t *testing.T) {
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := map[string]string{
|
variables := map[string]interface{}{
|
||||||
"foo": "foo",
|
"foo": "foo",
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(client.UpsertOptions.Variables, variables) {
|
if !reflect.DeepEqual(client.UpsertOptions.Variables, variables) {
|
||||||
|
@ -143,7 +143,7 @@ func TestPush_inputPartial(t *testing.T) {
|
||||||
|
|
||||||
client := &mockPushClient{
|
client := &mockPushClient{
|
||||||
File: archivePath,
|
File: archivePath,
|
||||||
GetResult: map[string]string{"foo": "bar"},
|
GetResult: map[string]interface{}{"foo": "bar"},
|
||||||
}
|
}
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &PushCommand{
|
c := &PushCommand{
|
||||||
|
@ -170,7 +170,7 @@ func TestPush_inputPartial(t *testing.T) {
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := map[string]string{
|
variables := map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"bar": "foo",
|
"bar": "foo",
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ func TestPush_localOverride(t *testing.T) {
|
||||||
|
|
||||||
client := &mockPushClient{File: archivePath}
|
client := &mockPushClient{File: archivePath}
|
||||||
// Provided vars should override existing ones
|
// Provided vars should override existing ones
|
||||||
client.GetResult = map[string]string{
|
client.GetResult = map[string]interface{}{
|
||||||
"foo": "old",
|
"foo": "old",
|
||||||
}
|
}
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
|
@ -247,7 +247,7 @@ func TestPush_localOverride(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", client.UpsertOptions)
|
t.Fatalf("bad: %#v", client.UpsertOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := map[string]string{
|
variables := map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"bar": "foo",
|
"bar": "foo",
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,7 @@ func TestPush_preferAtlas(t *testing.T) {
|
||||||
|
|
||||||
client := &mockPushClient{File: archivePath}
|
client := &mockPushClient{File: archivePath}
|
||||||
// Provided vars should override existing ones
|
// Provided vars should override existing ones
|
||||||
client.GetResult = map[string]string{
|
client.GetResult = map[string]interface{}{
|
||||||
"foo": "old",
|
"foo": "old",
|
||||||
}
|
}
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
|
@ -323,7 +323,7 @@ func TestPush_preferAtlas(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", client.UpsertOptions)
|
t.Fatalf("bad: %#v", client.UpsertOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := map[string]string{
|
variables := map[string]interface{}{
|
||||||
"foo": "old",
|
"foo": "old",
|
||||||
"bar": "foo",
|
"bar": "foo",
|
||||||
}
|
}
|
||||||
|
@ -394,7 +394,7 @@ func TestPush_tfvars(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", client.UpsertOptions)
|
t.Fatalf("bad: %#v", client.UpsertOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := map[string]string{
|
variables := map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"bar": "foo",
|
"bar": "foo",
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ type ContextOpts struct {
|
||||||
Providers map[string]ResourceProviderFactory
|
Providers map[string]ResourceProviderFactory
|
||||||
Provisioners map[string]ResourceProvisionerFactory
|
Provisioners map[string]ResourceProvisionerFactory
|
||||||
Targets []string
|
Targets []string
|
||||||
Variables map[string]string
|
Variables map[string]interface{}
|
||||||
|
|
||||||
UIInput UIInput
|
UIInput UIInput
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ type Context struct {
|
||||||
stateLock sync.RWMutex
|
stateLock sync.RWMutex
|
||||||
targets []string
|
targets []string
|
||||||
uiInput UIInput
|
uiInput UIInput
|
||||||
variables map[string]string
|
variables map[string]interface{}
|
||||||
|
|
||||||
l sync.Mutex // Lock acquired during any task
|
l sync.Mutex // Lock acquired during any task
|
||||||
parallelSem Semaphore
|
parallelSem Semaphore
|
||||||
|
@ -121,7 +121,7 @@ func NewContext(opts *ContextOpts) (*Context, error) {
|
||||||
|
|
||||||
// Setup the variables. We first take the variables given to us.
|
// Setup the variables. We first take the variables given to us.
|
||||||
// We then merge in the variables set in the environment.
|
// We then merge in the variables set in the environment.
|
||||||
variables := make(map[string]string)
|
variables := make(map[string]interface{})
|
||||||
for _, v := range os.Environ() {
|
for _, v := range os.Environ() {
|
||||||
if !strings.HasPrefix(v, VarEnvPrefix) {
|
if !strings.HasPrefix(v, VarEnvPrefix) {
|
||||||
continue
|
continue
|
||||||
|
@ -506,12 +506,12 @@ func (c *Context) Module() *module.Tree {
|
||||||
// Variables will return the mapping of variables that were defined
|
// Variables will return the mapping of variables that were defined
|
||||||
// for this Context. If Input was called, this mapping may be different
|
// for this Context. If Input was called, this mapping may be different
|
||||||
// than what was given.
|
// than what was given.
|
||||||
func (c *Context) Variables() map[string]string {
|
func (c *Context) Variables() map[string]interface{} {
|
||||||
return c.variables
|
return c.variables
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetVariable sets a variable after a context has already been built.
|
// SetVariable sets a variable after a context has already been built.
|
||||||
func (c *Context) SetVariable(k, v string) {
|
func (c *Context) SetVariable(k string, v interface{}) {
|
||||||
c.variables[k] = v
|
c.variables[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -843,7 +843,7 @@ func TestContext2Apply_compute(t *testing.T) {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.variables = map[string]string{"value": "1"}
|
ctx.variables = map[string]interface{}{"value": "1"}
|
||||||
|
|
||||||
state, err := ctx.Apply()
|
state, err := ctx.Apply()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1134,7 +1134,7 @@ func TestContext2Apply_mapVariableOverride(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"images.us-west-2": "overridden",
|
"images.us-west-2": "overridden",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1510,7 +1510,7 @@ func TestContext2Apply_moduleVarResourceCount(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"count": "2",
|
"count": "2",
|
||||||
},
|
},
|
||||||
Destroy: true,
|
Destroy: true,
|
||||||
|
@ -1529,7 +1529,7 @@ func TestContext2Apply_moduleVarResourceCount(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"count": "5",
|
"count": "5",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1623,7 +1623,7 @@ func TestContext2Apply_multiVar(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"count": "3",
|
"count": "3",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1651,7 +1651,7 @@ func TestContext2Apply_multiVar(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"count": "1",
|
"count": "1",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1813,7 +1813,7 @@ func TestContext2Apply_Provisioner_compute(t *testing.T) {
|
||||||
Provisioners: map[string]ResourceProvisionerFactory{
|
Provisioners: map[string]ResourceProvisionerFactory{
|
||||||
"shell": testProvisionerFuncFixed(pr),
|
"shell": testProvisionerFuncFixed(pr),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"value": "1",
|
"value": "1",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1937,7 +1937,7 @@ func TestContext2Apply_provisionerFail(t *testing.T) {
|
||||||
Provisioners: map[string]ResourceProvisionerFactory{
|
Provisioners: map[string]ResourceProvisionerFactory{
|
||||||
"shell": testProvisionerFuncFixed(pr),
|
"shell": testProvisionerFuncFixed(pr),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"value": "1",
|
"value": "1",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -2587,7 +2587,7 @@ func TestContext2Apply_Provisioner_ConnInfo(t *testing.T) {
|
||||||
Provisioners: map[string]ResourceProvisionerFactory{
|
Provisioners: map[string]ResourceProvisionerFactory{
|
||||||
"shell": testProvisionerFuncFixed(pr),
|
"shell": testProvisionerFuncFixed(pr),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"value": "1",
|
"value": "1",
|
||||||
"pass": "test",
|
"pass": "test",
|
||||||
},
|
},
|
||||||
|
@ -2813,7 +2813,7 @@ func TestContext2Apply_destroyModuleWithAttrsReferencingResource(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"key_name": "foobarkey",
|
"key_name": "foobarkey",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -4268,7 +4268,7 @@ func TestContext2Apply_vars(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "us-west-2",
|
"foo": "us-west-2",
|
||||||
"amis.us-east-1": "override",
|
"amis.us-east-1": "override",
|
||||||
},
|
},
|
||||||
|
|
|
@ -18,7 +18,7 @@ func TestContext2Input(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "us-west-2",
|
"foo": "us-west-2",
|
||||||
"amis.us-east-1": "override",
|
"amis.us-east-1": "override",
|
||||||
},
|
},
|
||||||
|
@ -268,7 +268,7 @@ func TestContext2Input_providerOnly(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "us-west-2",
|
"foo": "us-west-2",
|
||||||
},
|
},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
|
@ -323,7 +323,7 @@ func TestContext2Input_providerVars(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
},
|
},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
|
@ -400,7 +400,7 @@ func TestContext2Input_varOnly(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "us-west-2",
|
"foo": "us-west-2",
|
||||||
},
|
},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
|
@ -455,7 +455,7 @@ func TestContext2Input_varOnlyUnset(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "foovalue",
|
"foo": "foovalue",
|
||||||
},
|
},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
|
@ -497,7 +497,7 @@ func TestContext2Input_varWithDefault(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{},
|
Variables: map[string]interface{}{},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -543,7 +543,7 @@ func TestContext2Input_varPartiallyComputed(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "foovalue",
|
"foo": "foovalue",
|
||||||
},
|
},
|
||||||
UIInput: input,
|
UIInput: input,
|
||||||
|
|
|
@ -47,7 +47,7 @@ func TestContext2Plan_createBefore_maintainRoot(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"in": "a,b,c",
|
"in": "a,b,c",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -289,7 +289,7 @@ func TestContext2Plan_moduleInputFromVar(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "52",
|
"foo": "52",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -584,7 +584,7 @@ func TestContext2Plan_moduleProviderDefaultsVar(t *testing.T) {
|
||||||
return p, nil
|
return p, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "root",
|
"foo": "root",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1187,7 +1187,7 @@ func TestContext2Plan_countVar(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"count": "3",
|
"count": "3",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -2210,7 +2210,7 @@ func TestContext2Plan_provider(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -2265,7 +2265,7 @@ func TestContext2Plan_ignoreChanges(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "ami-1234abcd",
|
"foo": "ami-1234abcd",
|
||||||
},
|
},
|
||||||
State: s,
|
State: s,
|
||||||
|
|
|
@ -307,7 +307,7 @@ func TestContext2Validate_moduleProviderVar(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"provider_var": "bar",
|
"provider_var": "bar",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -732,7 +732,7 @@ func TestContext2Validate_varRefFilled(t *testing.T) {
|
||||||
Providers: map[string]ResourceProviderFactory{
|
Providers: map[string]ResourceProviderFactory{
|
||||||
"aws": testProviderFuncFixed(p),
|
"aws": testProviderFuncFixed(p),
|
||||||
},
|
},
|
||||||
Variables: map[string]string{
|
Variables: map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -24,7 +24,7 @@ type Plan struct {
|
||||||
Diff *Diff
|
Diff *Diff
|
||||||
Module *module.Tree
|
Module *module.Tree
|
||||||
State *State
|
State *State
|
||||||
Vars map[string]string
|
Vars map[string]interface{}
|
||||||
Targets []string
|
Targets []string
|
||||||
|
|
||||||
once sync.Once
|
once sync.Once
|
||||||
|
@ -38,8 +38,13 @@ func (p *Plan) Context(opts *ContextOpts) (*Context, error) {
|
||||||
opts.Diff = p.Diff
|
opts.Diff = p.Diff
|
||||||
opts.Module = p.Module
|
opts.Module = p.Module
|
||||||
opts.State = p.State
|
opts.State = p.State
|
||||||
opts.Variables = p.Vars
|
|
||||||
opts.Targets = p.Targets
|
opts.Targets = p.Targets
|
||||||
|
|
||||||
|
opts.Variables = make(map[string]interface{})
|
||||||
|
for k, v := range p.Vars {
|
||||||
|
opts.Variables[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
return NewContext(opts)
|
return NewContext(opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +70,7 @@ func (p *Plan) init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Vars == nil {
|
if p.Vars == nil {
|
||||||
p.Vars = make(map[string]string)
|
p.Vars = make(map[string]interface{})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ func TestReadWritePlan(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Vars: map[string]string{
|
Vars: map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ func (*SemanticCheckModulesExist) Check(g *dag.Graph, v dag.Vertex) error {
|
||||||
|
|
||||||
// smcUserVariables does all the semantic checks to verify that the
|
// smcUserVariables does all the semantic checks to verify that the
|
||||||
// variables given satisfy the configuration itself.
|
// variables given satisfy the configuration itself.
|
||||||
func smcUserVariables(c *config.Config, vs map[string]string) []error {
|
func smcUserVariables(c *config.Config, vs map[string]interface{}) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
|
|
||||||
cvs := make(map[string]*config.Variable)
|
cvs := make(map[string]*config.Variable)
|
||||||
|
|
|
@ -14,13 +14,13 @@ func TestSMCUserVariables(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Required variables set, optional variables unset
|
// Required variables set, optional variables unset
|
||||||
errs = smcUserVariables(c, map[string]string{"foo": "bar"})
|
errs = smcUserVariables(c, map[string]interface{}{"foo": "bar"})
|
||||||
if len(errs) != 0 {
|
if len(errs) != 0 {
|
||||||
t.Fatalf("err: %#v", errs)
|
t.Fatalf("err: %#v", errs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mapping element override
|
// Mapping element override
|
||||||
errs = smcUserVariables(c, map[string]string{
|
errs = smcUserVariables(c, map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"map.foo": "baz",
|
"map.foo": "baz",
|
||||||
})
|
})
|
||||||
|
@ -29,7 +29,7 @@ func TestSMCUserVariables(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mapping complete override
|
// Mapping complete override
|
||||||
errs = smcUserVariables(c, map[string]string{
|
errs = smcUserVariables(c, map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"map": "baz",
|
"map": "baz",
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue