mirror of https://github.com/status-im/consul.git
Merge pull request #576 from hashicorp/f-verify-config
agent: reject config with invalid options
This commit is contained in:
commit
db3c502dcc
|
@ -477,6 +477,20 @@ func DecodeConfig(r io.Reader) (*Config, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check unused fields and verify that no bad configuration options were
|
||||||
|
// passed to Consul. There are a few additional fields which don't directly
|
||||||
|
// use mapstructure decoding, so we need to account for those as well.
|
||||||
|
allowedKeys := []string{"service", "services", "check", "checks"}
|
||||||
|
var unused []string
|
||||||
|
for _, field := range md.Unused {
|
||||||
|
if !strContains(allowedKeys, field) {
|
||||||
|
unused = append(unused, field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(unused) > 0 {
|
||||||
|
return nil, fmt.Errorf("Config has invalid keys: %s", strings.Join(unused, ","))
|
||||||
|
}
|
||||||
|
|
||||||
// Handle time conversions
|
// Handle time conversions
|
||||||
if raw := result.DNSConfig.NodeTTLRaw; raw != "" {
|
if raw := result.DNSConfig.NodeTTLRaw; raw != "" {
|
||||||
dur, err := time.ParseDuration(raw)
|
dur, err := time.ParseDuration(raw)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -606,6 +607,14 @@ func TestDecodeConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDecodeConfig_invalidKeys(t *testing.T) {
|
||||||
|
input := `{"bad": "no way jose"}`
|
||||||
|
_, err := DecodeConfig(bytes.NewReader([]byte(input)))
|
||||||
|
if err == nil || !strings.Contains(err.Error(), "invalid keys") {
|
||||||
|
t.Fatalf("should have rejected invalid config keys")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDecodeConfig_Services(t *testing.T) {
|
func TestDecodeConfig_Services(t *testing.T) {
|
||||||
input := `{
|
input := `{
|
||||||
"services": [
|
"services": [
|
||||||
|
|
Loading…
Reference in New Issue