diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index 8cdc89a95c3..aaa7101c1a4 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -198,11 +198,11 @@ func newGCECloud(config io.Reader) (*GCECloud, error) { var nodeTags []string var nodeInstancePrefix string if config != nil { - var cfg Config - if err := gcfg.FatalOnly(gcfg.ReadInto(&cfg, config)); err != nil { - glog.Errorf("Couldn't read config: %v", err) + cfg, err := readConfig(config) + if err != nil { return nil, err } + glog.Infof("Using GCE provider config %+v", cfg) if cfg.Global.ApiEndpoint != "" { apiEndpoint = cfg.Global.ApiEndpoint @@ -241,6 +241,15 @@ func newGCECloud(config io.Reader) (*GCECloud, error) { nodeTags, nodeInstancePrefix, tokenSource, true /* useMetadataServer */) } +func readConfig(reader io.Reader) (*Config, error) { + cfg := &Config{} + if err := gcfg.FatalOnly(gcfg.ReadInto(cfg, reader)); err != nil { + glog.Errorf("Couldn't read config: %v", err) + return nil, err + } + return cfg, nil +} + // Creates a GCECloud object using the specified parameters. // If no networkUrl is specified, loads networkName via rest call. // If no tokenSource is specified, uses oauth2.DefaultTokenSource. diff --git a/pkg/cloudprovider/providers/gce/gce_test.go b/pkg/cloudprovider/providers/gce/gce_test.go index c04473f9380..0eff53dbdf7 100644 --- a/pkg/cloudprovider/providers/gce/gce_test.go +++ b/pkg/cloudprovider/providers/gce/gce_test.go @@ -18,9 +18,26 @@ package gce import ( "reflect" + "strings" "testing" ) +func TestExtraKeyInConfig(t *testing.T) { + const s = `[Global] +project-id = my-project +unknown-key = abc +network-name = my-network + ` + reader := strings.NewReader(s) + config, err := readConfig(reader) + if err != nil { + t.Fatalf("Unexpected config parsing error %v", err) + } + if config.Global.ProjectID != "my-project" || config.Global.NetworkName != "my-network" { + t.Fatalf("Expected config values to continue to be read despite extra key-value pair.") + } +} + func TestGetRegion(t *testing.T) { zoneName := "us-central1-b" regionName, err := GetGCERegion(zoneName)