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 }