github.com/adityamillind98/moby@v23.0.0-rc.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 Scopes map[string]*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 Scopes: make(map[string]*datastore.ScopeCfg), 42 } 43 44 for _, opt := range opts { 45 if opt != nil { 46 opt(cfg) 47 } 48 } 49 50 // load default scope configs which don't have explicit user specified configs. 51 for k, v := range datastore.DefaultScopes(cfg.DataDir) { 52 if _, ok := cfg.Scopes[k]; !ok { 53 cfg.Scopes[k] = v 54 } 55 } 56 return cfg 57 } 58 59 // Option is an option setter function type used to pass various configurations 60 // to the controller 61 type Option func(c *Config) 62 63 // OptionDefaultNetwork function returns an option setter for a default network 64 func OptionDefaultNetwork(dn string) Option { 65 return func(c *Config) { 66 logrus.Debugf("Option DefaultNetwork: %s", dn) 67 c.DefaultNetwork = strings.TrimSpace(dn) 68 } 69 } 70 71 // OptionDefaultDriver function returns an option setter for default driver 72 func OptionDefaultDriver(dd string) Option { 73 return func(c *Config) { 74 logrus.Debugf("Option DefaultDriver: %s", dd) 75 c.DefaultDriver = strings.TrimSpace(dd) 76 } 77 } 78 79 // OptionDefaultAddressPoolConfig function returns an option setter for default address pool 80 func OptionDefaultAddressPoolConfig(addressPool []*ipamutils.NetworkToSplit) Option { 81 return func(c *Config) { 82 c.DefaultAddressPool = addressPool 83 } 84 } 85 86 // OptionDriverConfig returns an option setter for driver configuration. 87 func OptionDriverConfig(networkType string, config map[string]interface{}) Option { 88 return func(c *Config) { 89 c.DriverCfg[networkType] = config 90 } 91 } 92 93 // OptionLabels function returns an option setter for labels 94 func OptionLabels(labels []string) Option { 95 return func(c *Config) { 96 for _, label := range labels { 97 if strings.HasPrefix(label, netlabel.Prefix) { 98 c.Labels = append(c.Labels, label) 99 } 100 } 101 } 102 } 103 104 // OptionDataDir function returns an option setter for data folder 105 func OptionDataDir(dataDir string) Option { 106 return func(c *Config) { 107 c.DataDir = dataDir 108 } 109 } 110 111 // OptionExecRoot function returns an option setter for exec root folder 112 func OptionExecRoot(execRoot string) Option { 113 return func(c *Config) { 114 c.ExecRoot = execRoot 115 osl.SetBasePath(execRoot) 116 } 117 } 118 119 // OptionPluginGetter returns a plugingetter for remote drivers. 120 func OptionPluginGetter(pg plugingetter.PluginGetter) Option { 121 return func(c *Config) { 122 c.PluginGetter = pg 123 } 124 } 125 126 // OptionNetworkControlPlaneMTU function returns an option setter for control plane MTU 127 func OptionNetworkControlPlaneMTU(exp int) Option { 128 return func(c *Config) { 129 logrus.Debugf("Network Control Plane MTU: %d", exp) 130 if exp < warningThNetworkControlPlaneMTU { 131 logrus.Warnf("Received a MTU of %d, this value is very low, the network control plane can misbehave,"+ 132 " defaulting to minimum value (%d)", exp, minimumNetworkControlPlaneMTU) 133 if exp < minimumNetworkControlPlaneMTU { 134 exp = minimumNetworkControlPlaneMTU 135 } 136 } 137 c.NetworkControlPlaneMTU = exp 138 } 139 } 140 141 // IsValidName validates configuration objects supported by libnetwork 142 func IsValidName(name string) bool { 143 return strings.TrimSpace(name) != "" 144 } 145 146 // OptionLocalKVProvider function returns an option setter for kvstore provider 147 func OptionLocalKVProvider(provider string) Option { 148 return func(c *Config) { 149 logrus.Debugf("Option OptionLocalKVProvider: %s", provider) 150 if _, ok := c.Scopes[datastore.LocalScope]; !ok { 151 c.Scopes[datastore.LocalScope] = &datastore.ScopeCfg{} 152 } 153 c.Scopes[datastore.LocalScope].Client.Provider = strings.TrimSpace(provider) 154 } 155 } 156 157 // OptionLocalKVProviderURL function returns an option setter for kvstore url 158 func OptionLocalKVProviderURL(url string) Option { 159 return func(c *Config) { 160 logrus.Debugf("Option OptionLocalKVProviderURL: %s", url) 161 if _, ok := c.Scopes[datastore.LocalScope]; !ok { 162 c.Scopes[datastore.LocalScope] = &datastore.ScopeCfg{} 163 } 164 c.Scopes[datastore.LocalScope].Client.Address = strings.TrimSpace(url) 165 } 166 } 167 168 // OptionLocalKVProviderConfig function returns an option setter for kvstore config 169 func OptionLocalKVProviderConfig(config *store.Config) Option { 170 return func(c *Config) { 171 logrus.Debugf("Option OptionLocalKVProviderConfig: %v", config) 172 if _, ok := c.Scopes[datastore.LocalScope]; !ok { 173 c.Scopes[datastore.LocalScope] = &datastore.ScopeCfg{} 174 } 175 c.Scopes[datastore.LocalScope].Client.Config = config 176 } 177 } 178 179 // OptionActiveSandboxes function returns an option setter for passing the sandboxes 180 // which were active during previous daemon life 181 func OptionActiveSandboxes(sandboxes map[string]interface{}) Option { 182 return func(c *Config) { 183 c.ActiveSandboxes = sandboxes 184 } 185 }