terraform: validate resource names
This commit is contained in:
parent
8552bb18cf
commit
9cd877a59c
|
@ -302,6 +302,25 @@ func TestContext2Validate_resourceConfig_good(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContext2Validate_resourceNameSymbol(t *testing.T) {
|
||||||
|
p := testProvider("aws")
|
||||||
|
m := testModule(t, "validate-resource-name-symbol")
|
||||||
|
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: %s", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestContext2Validate_selfRef(t *testing.T) {
|
func TestContext2Validate_selfRef(t *testing.T) {
|
||||||
p := testProvider("aws")
|
p := testProvider("aws")
|
||||||
m := testModule(t, "validate-self-ref")
|
m := testModule(t, "validate-self-ref")
|
||||||
|
@ -446,25 +465,6 @@ func TestContextValidate_tainted(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextValidate_resourceNameSymbol(t *testing.T) {
|
|
||||||
p := testProvider("aws")
|
|
||||||
m := testModule(t, "validate-resource-name-symbol")
|
|
||||||
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_provisionerConfig_bad(t *testing.T) {
|
func TestContextValidate_provisionerConfig_bad(t *testing.T) {
|
||||||
m := testModule(t, "validate-bad-prov-conf")
|
m := testModule(t, "validate-bad-prov-conf")
|
||||||
p := testProvider("aws")
|
p := testProvider("aws")
|
||||||
|
|
|
@ -96,6 +96,7 @@ func (n *EvalValidateProvider) Type() EvalType {
|
||||||
type EvalValidateResource struct {
|
type EvalValidateResource struct {
|
||||||
Provider EvalNode
|
Provider EvalNode
|
||||||
Config EvalNode
|
Config EvalNode
|
||||||
|
ResourceName string
|
||||||
ResourceType string
|
ResourceType string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,9 +110,19 @@ func (n *EvalValidateResource) Eval(
|
||||||
// TODO: test
|
// TODO: test
|
||||||
|
|
||||||
provider := args[0].(ResourceProvider)
|
provider := args[0].(ResourceProvider)
|
||||||
config := args[1].(*ResourceConfig)
|
cfg := args[1].(*ResourceConfig)
|
||||||
|
warns, errs := provider.ValidateResource(n.ResourceType, cfg)
|
||||||
|
|
||||||
|
// If the resouce name doesn't match the name regular
|
||||||
|
// expression, show a warning.
|
||||||
|
if !config.NameRegexp.Match([]byte(n.ResourceName)) {
|
||||||
|
warns = append(warns, fmt.Sprintf(
|
||||||
|
"%s: resource name can only contain letters, numbers, "+
|
||||||
|
"dashes, and underscores.\n"+
|
||||||
|
"This will be an error in Terraform 0.4",
|
||||||
|
n.ResourceName))
|
||||||
|
}
|
||||||
|
|
||||||
warns, errs := provider.ValidateResource(n.ResourceType, config)
|
|
||||||
if len(warns) == 0 && len(errs) == 0 {
|
if len(warns) == 0 && len(errs) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,7 @@ func (n *graphNodeExpandedResource) EvalTree() EvalNode {
|
||||||
&EvalValidateResource{
|
&EvalValidateResource{
|
||||||
Provider: &EvalGetProvider{Name: n.ProvidedBy()},
|
Provider: &EvalGetProvider{Name: n.ProvidedBy()},
|
||||||
Config: &EvalInterpolate{Config: n.Resource.RawConfig},
|
Config: &EvalInterpolate{Config: n.Resource.RawConfig},
|
||||||
|
ResourceName: n.Resource.Name,
|
||||||
ResourceType: n.Resource.Type,
|
ResourceType: n.Resource.Type,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue