terraform: prefix the Id for configuring providers
This commit is contained in:
parent
459ffe9d2a
commit
133a28e363
|
@ -569,11 +569,17 @@ func (c *walkContext) inputWalkFn() depgraph.WalkFunc {
|
||||||
}
|
}
|
||||||
rc := NewResourceConfig(raw)
|
rc := NewResourceConfig(raw)
|
||||||
|
|
||||||
|
// Wrap the input into a namespace
|
||||||
|
input := &PrefixUIInput{
|
||||||
|
IdPrefix: fmt.Sprintf("provider.%s", rn.ID),
|
||||||
|
UIInput: c.Context.uiInput,
|
||||||
|
}
|
||||||
|
|
||||||
// Go through each provider and capture the input necessary
|
// Go through each provider and capture the input necessary
|
||||||
// to satisfy it.
|
// to satisfy it.
|
||||||
configs := make(map[string]map[string]interface{})
|
configs := make(map[string]map[string]interface{})
|
||||||
for k, p := range sharedProvider.Providers {
|
for k, p := range sharedProvider.Providers {
|
||||||
newc, err := p.Input(c.Context.uiInput, rc)
|
newc, err := p.Input(input, rc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"Error configuring %s: %s", k, err)
|
"Error configuring %s: %s", k, err)
|
||||||
|
|
|
@ -499,6 +499,56 @@ func TestContextInput_provider(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContextInput_providerId(t *testing.T) {
|
||||||
|
input := new(MockUIInput)
|
||||||
|
m := testModule(t, "input-provider")
|
||||||
|
p := testProvider("aws")
|
||||||
|
p.ApplyFn = testApplyFn
|
||||||
|
p.DiffFn = testDiffFn
|
||||||
|
ctx := testContext(t, &ContextOpts{
|
||||||
|
Module: m,
|
||||||
|
Providers: map[string]ResourceProviderFactory{
|
||||||
|
"aws": testProviderFuncFixed(p),
|
||||||
|
},
|
||||||
|
UIInput: input,
|
||||||
|
})
|
||||||
|
|
||||||
|
var actual interface{}
|
||||||
|
p.InputFn = func(i UIInput, c *ResourceConfig) (*ResourceConfig, error) {
|
||||||
|
v, err := i.Input(&InputOpts{Id: "foo"})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Raw["foo"] = v
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
p.ConfigureFn = func(c *ResourceConfig) error {
|
||||||
|
actual = c.Raw["foo"]
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
input.InputReturnMap = map[string]string{
|
||||||
|
"provider.aws.foo": "bar",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ctx.Input(); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := ctx.Plan(nil); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := ctx.Apply(); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(actual, "bar") {
|
||||||
|
t.Fatalf("bad: %#v", actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestContextApply(t *testing.T) {
|
func TestContextApply(t *testing.T) {
|
||||||
m := testModule(t, "apply-good")
|
m := testModule(t, "apply-good")
|
||||||
p := testProvider("aws")
|
p := testProvider("aws")
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package terraform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PrefixUIInput is an implementation of UIInput that prefixes the ID
|
||||||
|
// with a string, allowing queries to be namespaced.
|
||||||
|
type PrefixUIInput struct {
|
||||||
|
IdPrefix string
|
||||||
|
UIInput UIInput
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *PrefixUIInput) Input(opts *InputOpts) (string, error) {
|
||||||
|
opts.Id = fmt.Sprintf("%s.%s", i.IdPrefix, opts.Id)
|
||||||
|
return i.UIInput.Input(opts)
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package terraform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPrefixUIInput_impl(t *testing.T) {
|
||||||
|
var _ UIInput = new(PrefixUIInput)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testPrefixUIInput(t *testing.T) {
|
||||||
|
input := new(MockUIInput)
|
||||||
|
prefix := &PrefixUIInput{
|
||||||
|
IdPrefix: "foo",
|
||||||
|
UIInput: input,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := prefix.Input(&InputOpts{Id: "bar"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.InputOpts.Id != "foo.bar" {
|
||||||
|
t.Fatalf("bad: %#v", input.InputOpts)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue