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  }