github.com/rawahars/moby@v24.0.4+incompatible/libnetwork/config/config.go (about)

     1  package config
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/docker/docker/libnetwork/cluster"
     7  	"github.com/docker/docker/libnetwork/datastore"
     8  	"github.com/docker/docker/libnetwork/ipamutils"
     9  	"github.com/docker/docker/libnetwork/netlabel"
    10  	"github.com/docker/docker/libnetwork/osl"
    11  	"github.com/docker/docker/pkg/plugingetter"
    12  	"github.com/docker/libkv/store"
    13  	"github.com/sirupsen/logrus"
    14  )
    15  
    16  const (
    17  	warningThNetworkControlPlaneMTU = 1500
    18  	minimumNetworkControlPlaneMTU   = 500
    19  )
    20  
    21  // Config encapsulates configurations of various Libnetwork components
    22  type Config struct {
    23  	DataDir                string
    24  	ExecRoot               string
    25  	DefaultNetwork         string
    26  	DefaultDriver          string
    27  	Labels                 []string
    28  	DriverCfg              map[string]interface{}
    29  	ClusterProvider        cluster.Provider
    30  	NetworkControlPlaneMTU int
    31  	DefaultAddressPool     []*ipamutils.NetworkToSplit
    32  	Scope                  datastore.ScopeCfg
    33  	ActiveSandboxes        map[string]interface{}
    34  	PluginGetter           plugingetter.PluginGetter
    35  }
    36  
    37  // New creates a new Config and initializes it with the given Options.
    38  func New(opts ...Option) *Config {
    39  	cfg := &Config{
    40  		DriverCfg: make(map[string]interface{}),
    41  	}
    42  
    43  	for _, opt := range opts {
    44  		if opt != nil {
    45  			opt(cfg)
    46  		}
    47  	}
    48  
    49  	// load default scope configs which don't have explicit user specified configs.
    50  	if cfg.Scope == (datastore.ScopeCfg{}) {
    51  		cfg.Scope = datastore.DefaultScope(cfg.DataDir)
    52  	}
    53  	return cfg
    54  }
    55  
    56  // Option is an option setter function type used to pass various configurations
    57  // to the controller
    58  type Option func(c *Config)
    59  
    60  // OptionDefaultNetwork function returns an option setter for a default network
    61  func OptionDefaultNetwork(dn string) Option {
    62  	return func(c *Config) {
    63  		logrus.Debugf("Option DefaultNetwork: %s", dn)
    64  		c.DefaultNetwork = strings.TrimSpace(dn)
    65  	}
    66  }
    67  
    68  // OptionDefaultDriver function returns an option setter for default driver
    69  func OptionDefaultDriver(dd string) Option {
    70  	return func(c *Config) {
    71  		logrus.Debugf("Option DefaultDriver: %s", dd)
    72  		c.DefaultDriver = strings.TrimSpace(dd)
    73  	}
    74  }
    75  
    76  // OptionDefaultAddressPoolConfig function returns an option setter for default address pool
    77  func OptionDefaultAddressPoolConfig(addressPool []*ipamutils.NetworkToSplit) Option {
    78  	return func(c *Config) {
    79  		c.DefaultAddressPool = addressPool
    80  	}
    81  }
    82  
    83  // OptionDriverConfig returns an option setter for driver configuration.
    84  func OptionDriverConfig(networkType string, config map[string]interface{}) Option {
    85  	return func(c *Config) {
    86  		c.DriverCfg[networkType] = config
    87  	}
    88  }
    89  
    90  // OptionLabels function returns an option setter for labels
    91  func OptionLabels(labels []string) Option {
    92  	return func(c *Config) {
    93  		for _, label := range labels {
    94  			if strings.HasPrefix(label, netlabel.Prefix) {
    95  				c.Labels = append(c.Labels, label)
    96  			}
    97  		}
    98  	}
    99  }
   100  
   101  // OptionDataDir function returns an option setter for data folder
   102  func OptionDataDir(dataDir string) Option {
   103  	return func(c *Config) {
   104  		c.DataDir = dataDir
   105  	}
   106  }
   107  
   108  // OptionExecRoot function returns an option setter for exec root folder
   109  func OptionExecRoot(execRoot string) Option {
   110  	return func(c *Config) {
   111  		c.ExecRoot = execRoot
   112  		osl.SetBasePath(execRoot)
   113  	}
   114  }
   115  
   116  // OptionPluginGetter returns a plugingetter for remote drivers.
   117  func OptionPluginGetter(pg plugingetter.PluginGetter) Option {
   118  	return func(c *Config) {
   119  		c.PluginGetter = pg
   120  	}
   121  }
   122  
   123  // OptionNetworkControlPlaneMTU function returns an option setter for control plane MTU
   124  func OptionNetworkControlPlaneMTU(exp int) Option {
   125  	return func(c *Config) {
   126  		logrus.Debugf("Network Control Plane MTU: %d", exp)
   127  		if exp < warningThNetworkControlPlaneMTU {
   128  			logrus.Warnf("Received a MTU of %d, this value is very low, the network control plane can misbehave,"+
   129  				" defaulting to minimum value (%d)", exp, minimumNetworkControlPlaneMTU)
   130  			if exp < minimumNetworkControlPlaneMTU {
   131  				exp = minimumNetworkControlPlaneMTU
   132  			}
   133  		}
   134  		c.NetworkControlPlaneMTU = exp
   135  	}
   136  }
   137  
   138  // IsValidName validates configuration objects supported by libnetwork
   139  func IsValidName(name string) bool {
   140  	return strings.TrimSpace(name) != ""
   141  }
   142  
   143  // OptionLocalKVProvider function returns an option setter for kvstore provider
   144  func OptionLocalKVProvider(provider string) Option {
   145  	return func(c *Config) {
   146  		logrus.Debugf("Option OptionLocalKVProvider: %s", provider)
   147  		c.Scope.Client.Provider = strings.TrimSpace(provider)
   148  	}
   149  }
   150  
   151  // OptionLocalKVProviderURL function returns an option setter for kvstore url
   152  func OptionLocalKVProviderURL(url string) Option {
   153  	return func(c *Config) {
   154  		logrus.Debugf("Option OptionLocalKVProviderURL: %s", url)
   155  		c.Scope.Client.Address = strings.TrimSpace(url)
   156  	}
   157  }
   158  
   159  // OptionLocalKVProviderConfig function returns an option setter for kvstore config
   160  func OptionLocalKVProviderConfig(config *store.Config) Option {
   161  	return func(c *Config) {
   162  		logrus.Debugf("Option OptionLocalKVProviderConfig: %v", config)
   163  		c.Scope.Client.Config = config
   164  	}
   165  }
   166  
   167  // OptionActiveSandboxes function returns an option setter for passing the sandboxes
   168  // which were active during previous daemon life
   169  func OptionActiveSandboxes(sandboxes map[string]interface{}) Option {
   170  	return func(c *Config) {
   171  		c.ActiveSandboxes = sandboxes
   172  	}
   173  }