terraform: provider configuration validation

This commit is contained in:
Mitchell Hashimoto 2015-02-05 17:32:36 -05:00
parent f9f18122ed
commit 57ad9e2502
5 changed files with 66 additions and 59 deletions

View File

@ -108,6 +108,46 @@ func TestContext2Validate_providerConfig_bad(t *testing.T) {
}
}
func TestContext2Validate_providerConfig_badEmpty(t *testing.T) {
m := testModule(t, "validate-bad-pc-empty")
p := testProvider("aws")
c := testContext2(t, &ContextOpts{
Module: m,
Providers: map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
})
p.ValidateReturnErrors = []error{fmt.Errorf("bad")}
w, e := c.Validate()
if len(w) > 0 {
t.Fatalf("bad: %#v", w)
}
if len(e) == 0 {
t.Fatalf("bad: %#v", e)
}
}
func TestContext2Validate_providerConfig_good(t *testing.T) {
m := testModule(t, "validate-bad-pc")
p := testProvider("aws")
c := testContext2(t, &ContextOpts{
Module: m,
Providers: map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
})
w, e := c.Validate()
if len(w) > 0 {
t.Fatalf("bad: %#v", w)
}
if len(e) > 0 {
t.Fatalf("bad: %#v", e)
}
}
/*
func TestContextValidate_goodModule(t *testing.T) {
p := testProvider("aws")
@ -296,46 +336,6 @@ func TestContextValidate_tainted(t *testing.T) {
}
}
func TestContextValidate_providerConfig_badEmpty(t *testing.T) {
m := testModule(t, "validate-bad-pc-empty")
p := testProvider("aws")
c := testContext(t, &ContextOpts{
Module: m,
Providers: map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
})
p.ValidateReturnErrors = []error{fmt.Errorf("bad")}
w, e := c.Validate()
if len(w) > 0 {
t.Fatalf("bad: %#v", w)
}
if len(e) == 0 {
t.Fatalf("bad: %#v", e)
}
}
func TestContextValidate_providerConfig_good(t *testing.T) {
m := testModule(t, "validate-bad-pc")
p := testProvider("aws")
c := testContext(t, &ContextOpts{
Module: m,
Providers: map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
})
w, e := c.Validate()
if len(w) > 0 {
t.Fatalf("bad: %#v", w)
}
if len(e) > 0 {
t.Fatalf("bad: %#v", e)
}
}
func TestContextValidate_resourceConfig_bad(t *testing.T) {
m := testModule(t, "validate-bad-rc")
p := testProvider("aws")

View File

@ -1,9 +1,5 @@
package terraform
import (
"github.com/hashicorp/terraform/config"
)
// EvalValidateError is the error structure returned if there were
// validation errors.
type EvalValidateError struct {

View File

@ -0,0 +1,23 @@
package terraform
import (
"github.com/hashicorp/terraform/config"
)
// ProviderEvalTree returns the evaluation tree for initializing and
// configuring providers.
func ProviderEvalTree(n string, config *config.RawConfig) EvalNode {
return &EvalSequence{
Nodes: []EvalNode{
&EvalInitProvider{Name: n},
&EvalValidateProvider{
Provider: &EvalGetProvider{Name: n},
Config: &EvalInterpolate{Config: config},
},
&EvalConfigProvider{
Provider: &EvalGetProvider{Name: n},
Config: &EvalInterpolate{Config: config},
},
},
}
}

View File

@ -75,19 +75,7 @@ func (n *GraphNodeConfigProvider) DependentOn() []string {
// GraphNodeEvalable impl.
func (n *GraphNodeConfigProvider) EvalTree() EvalNode {
return &EvalSequence{
Nodes: []EvalNode{
&EvalInitProvider{Name: n.Provider.Name},
&EvalValidateProvider{
Provider: &EvalGetProvider{Name: n.Provider.Name},
Config: &EvalInterpolate{Config: n.Provider.RawConfig},
},
&EvalConfigProvider{
Provider: &EvalGetProvider{Name: n.Provider.Name},
Config: &EvalInterpolate{Config: n.Provider.RawConfig},
},
},
}
return ProviderEvalTree(n.Provider.Name, n.Provider.RawConfig)
}
// GraphNodeProvider implementation
@ -134,7 +122,7 @@ func (n *GraphNodeConfigResource) EvalTree() EvalNode {
Nodes: []EvalNode{
&EvalValidateResource{
Provider: &EvalGetProvider{Name: n.ProvidedBy()},
Config: n.Resource.RawConfig,
Config: &EvalInterpolate{Config: n.Resource.RawConfig},
ProviderType: n.ProvidedBy(),
},
},

View File

@ -102,7 +102,7 @@ func (n *graphNodeMissingProvider) Name() string {
// GraphNodeEvalable impl.
func (n *graphNodeMissingProvider) EvalTree() EvalNode {
return &EvalInitProvider{Name: n.ProviderNameValue}
return ProviderEvalTree(n.ProviderNameValue, nil)
}
func (n *graphNodeMissingProvider) ProviderName() string {