github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/serverutils/config.go (about) 1 package serverutils 2 3 import ( 4 "flag" 5 6 "github.com/imdario/mergo" 7 "github.com/weaveworks/common/server" 8 ) 9 10 // MergeWithDefaults applies server.Config defaults to a given and different server.Config. 11 func MergeWithDefaults(config server.Config) (server.Config, error) { 12 // Bit of a chicken and egg problem trying to register the defaults and apply overrides from the loaded config. 13 // First create an empty config and set defaults. 14 mergee := server.Config{} 15 mergee.RegisterFlags(flag.NewFlagSet("empty", flag.ContinueOnError)) 16 // Then apply any config values loaded as overrides to the defaults. 17 if err := mergo.Merge(&mergee, config, mergo.WithOverride); err != nil { 18 return server.Config{}, err 19 } 20 // The merge won't overwrite with a zero value but in the case of ports 0 value 21 // indicates the desire for a random port so reset these to zero if the incoming config val is 0 22 if config.HTTPListenPort == 0 { 23 mergee.HTTPListenPort = 0 24 } 25 if config.GRPCListenPort == 0 { 26 mergee.GRPCListenPort = 0 27 } 28 return mergee, nil 29 }