config/module: validate that parameters into modules valid
This commit is contained in:
parent
2419bf79f2
commit
12e7c75211
|
@ -0,0 +1,5 @@
|
||||||
|
module "child" {
|
||||||
|
source = "./child"
|
||||||
|
|
||||||
|
memory = "foo"
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
# Good
|
variable "memory" {}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
module "child" {
|
module "child" {
|
||||||
source = "./child"
|
source = "./child"
|
||||||
|
memory = "1G"
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,16 +211,20 @@ func (t *Tree) Validate() error {
|
||||||
return fmt.Errorf("tree must be loaded before calling Validate")
|
return fmt.Errorf("tree must be loaded before calling Validate")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If something goes wrong, here is our error template
|
||||||
|
newErr := &ValidateError{Name: []string{t.Name()}}
|
||||||
|
|
||||||
// Validate our configuration first.
|
// Validate our configuration first.
|
||||||
if err := t.config.Validate(); err != nil {
|
if err := t.config.Validate(); err != nil {
|
||||||
return &ValidateError{
|
newErr.Err = err
|
||||||
Name: []string{t.Name()},
|
return newErr
|
||||||
Err: err,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the child trees
|
||||||
|
children := t.Children()
|
||||||
|
|
||||||
// Validate all our children
|
// Validate all our children
|
||||||
for _, c := range t.Children() {
|
for _, c := range children {
|
||||||
err := c.Validate()
|
err := c.Validate()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
continue
|
continue
|
||||||
|
@ -237,6 +241,32 @@ func (t *Tree) Validate() error {
|
||||||
return verr
|
return verr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Go over all the modules and verify that any parameters are valid
|
||||||
|
// variables into the module in question.
|
||||||
|
for _, m := range t.config.Modules {
|
||||||
|
tree, ok := children[m.Name]
|
||||||
|
if !ok {
|
||||||
|
// This should never happen because Load watches us
|
||||||
|
panic("module not found in children: " + m.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the variables that the module defines
|
||||||
|
varMap := make(map[string]struct{})
|
||||||
|
for _, v := range tree.config.Variables {
|
||||||
|
varMap[v.Name] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare to the keys in our raw config for the module
|
||||||
|
for k, _ := range m.RawConfig.Raw {
|
||||||
|
if _, ok := varMap[k]; !ok {
|
||||||
|
newErr.Err = fmt.Errorf(
|
||||||
|
"module %s: %s is not a valid parameter",
|
||||||
|
m.Name, k)
|
||||||
|
return newErr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,18 @@ func TestTreeValidate_badChild(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTreeValidate_badChildVar(t *testing.T) {
|
||||||
|
tree := NewTree(testConfig(t, "validate-bad-var"))
|
||||||
|
|
||||||
|
if err := tree.Load(testStorage(t), GetModeGet); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tree.Validate(); err == nil {
|
||||||
|
t.Fatal("should error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestTreeValidate_badRoot(t *testing.T) {
|
func TestTreeValidate_badRoot(t *testing.T) {
|
||||||
tree := NewTree(testConfig(t, "validate-root-bad"))
|
tree := NewTree(testConfig(t, "validate-root-bad"))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue