Skip to content

Commit

Permalink
agent: use mapstructure's Metadata.Unused to detect extraneous config
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanuber committed Jan 5, 2015
1 parent b8740b6 commit 42ace3a
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions command/agent/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -335,13 +335,6 @@ type Config struct {

// WatchPlans contains the compiled watches
WatchPlans []*watch.WatchPlan `mapstructure:"-" json:"-"`

// Allow the following fields to be present in configuration files without
// mapstructure erroring on them.
_ interface{} `mapstructure:"services"`
_ interface{} `mapstructure:"checks"`
_ interface{} `mapstructure:"service"`
_ interface{} `mapstructure:"check"`
}

type dirEnts []os.FileInfo
Expand Down Expand Up @@ -470,9 +463,8 @@ func DecodeConfig(r io.Reader) (*Config, error) {
// Decode
var md mapstructure.Metadata
msdec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
Metadata: &md,
Result: &result,
ErrorUnused: true,
Metadata: &md,
Result: &result,
})
if err != nil {
return nil, err
Expand All @@ -482,6 +474,20 @@ func DecodeConfig(r io.Reader) (*Config, error) {
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
if raw := result.DNSConfig.NodeTTLRaw; raw != "" {
dur, err := time.ParseDuration(raw)
Expand Down

1 comment on commit 42ace3a

@mitchellh
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MAPSTRUCTURE STRIKES AGAIN

Please sign in to comment.