Skip to content

Commit

Permalink
Merge pull request moby#21112 from allencloud/validate-configs-from-file
Browse files Browse the repository at this point in the history
add validating configs from configuration file
  • Loading branch information
calavera committed Mar 16, 2016
2 parents 45b2a57 + 825b582 commit f817548
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
36 changes: 36 additions & 0 deletions daemon/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@ func ReloadConfiguration(configFile string, flags *flag.FlagSet, reload func(*Co
if err != nil {
return err
}

if err := validateConfiguration(newConfig); err != nil {
return fmt.Errorf("file configuration validation failed (%v)", err)
}

reload(newConfig)
return nil
}
Expand All @@ -184,6 +189,10 @@ func MergeDaemonConfigurations(flagsConfig *Config, flags *flag.FlagSet, configF
return nil, err
}

if err := validateConfiguration(fileConfig); err != nil {
return nil, fmt.Errorf("file configuration validation failed (%v)", err)
}

// merge flags configuration on top of the file configuration
if err := mergo.Merge(fileConfig, flagsConfig); err != nil {
return nil, err
Expand Down Expand Up @@ -336,3 +345,30 @@ func findConfigurationConflicts(config map[string]interface{}, flags *flag.FlagS
}
return nil
}

// validateConfiguration validates some specific configs.
// such as config.DNS, config.Labels, config.DNSSearch
func validateConfiguration(config *Config) error {
// validate DNS
for _, dns := range config.DNS {
if _, err := opts.ValidateIPAddress(dns); err != nil {
return err
}
}

// validate DNSSearch
for _, dnsSearch := range config.DNSSearch {
if _, err := opts.ValidateDNSSearch(dnsSearch); err != nil {
return err
}
}

// validate Labels
for _, label := range config.Labels {
if _, err := opts.ValidateLabel(label); err != nil {
return err
}
}

return nil
}
68 changes: 68 additions & 0 deletions daemon/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,3 +208,71 @@ func TestFindConfigurationConflictsWithMergedValues(t *testing.T) {
t.Fatalf("expected hosts conflict, got %v", err)
}
}

func TestValidateConfiguration(t *testing.T) {
c1 := &Config{
CommonConfig: CommonConfig{
Labels: []string{"one"},
},
}

err := validateConfiguration(c1)
if err == nil {
t.Fatal("expected error, got nil")
}

c2 := &Config{
CommonConfig: CommonConfig{
Labels: []string{"one=two"},
},
}

err = validateConfiguration(c2)
if err != nil {
t.Fatalf("expected no error, got error %v", err)
}

c3 := &Config{
CommonConfig: CommonConfig{
DNS: []string{"1.1.1.1"},
},
}

err = validateConfiguration(c3)
if err != nil {
t.Fatalf("expected no error, got error %v", err)
}

c4 := &Config{
CommonConfig: CommonConfig{
DNS: []string{"1.1.1.1o"},
},
}

err = validateConfiguration(c4)
if err == nil {
t.Fatal("expected error, got nil")
}

c5 := &Config{
CommonConfig: CommonConfig{
DNSSearch: []string{"a.b.c"},
},
}

err = validateConfiguration(c5)
if err != nil {
t.Fatalf("expected no error, got error %v", err)
}

c6 := &Config{
CommonConfig: CommonConfig{
DNSSearch: []string{"123456"},
},
}

err = validateConfiguration(c6)
if err == nil {
t.Fatal("expected error, got nil")
}
}

0 comments on commit f817548

Please sign in to comment.