Documentation ¶
Overview ¶
The config package provides config inheritance for Typha.
It supports loading config from various sources, parsing and validating the config and merging the config according to the priority of the sources.
Usage ¶
To use it, create a Config object with:
config.New()
Load some raw config using:
envConfig := config.LoadConfigFromEnvironment() fileConfig, err := config.LoadConfigFile()
Then feed it to the config object:
changed, err := config.UpdateFrom(envConfig, config.EnvironmentVariable) ... changed, err = config.UpdateFrom(fileConfig, config.ConfigFile)
Config inheritance ¶
Config from higher-priority sources overrides config from lower-priority sources. The priorities, in increasing order of priority, are:
Default // Default value of a parameter DatastoreGlobal // Cluster-wide config parameters from the datastore. DatastorePerHost // Per-host overrides from the datastore. ConfigFile // The local config file. EnvironmentVariable // Environment variables.
Index ¶
- Constants
- Variables
- func LoadConfigFile(filename string) (map[string]string, error)
- func LoadConfigFileData(data []byte) (map[string]string, error)
- func LoadConfigFromEnvironment(environ []string) map[string]string
- type BoolParam
- type Config
- type EndpointListParam
- type FileParam
- type FloatParam
- type Int32Param
- type IntParam
- type Ipv4Param
- type MarkBitmaskParam
- type Metadata
- type OneofListParam
- type PortListParam
- type PortParam
- type ProtoPort
- type RegexpParam
- type SecondsParam
- type Source
Constants ¶
const ( Default = iota DatastoreGlobal DatastorePerHost ConfigFile EnvironmentVariable )
const (
MinIptablesMarkBits = 2
)
Variables ¶
var ( IfaceListRegexp = regexp.MustCompile(`^[a-zA-Z0-9_-]{1,15}(,[a-zA-Z0-9_-]{1,15})*$`) AuthorityRegexp = regexp.MustCompile(`^[^:/]+:\d+$`) HostnameRegexp = regexp.MustCompile(`^[a-zA-Z0-9_.-]+$`) StringRegexp = regexp.MustCompile(`^.*$`) HostAddressRegexp = regexp.MustCompile(`^[a-zA-Z0-9:._+-]{1,64}$`) )
var SourcesInDescendingOrder = []Source{EnvironmentVariable, ConfigFile, DatastorePerHost, DatastoreGlobal}
Functions ¶
func LoadConfigFromEnvironment ¶
LoadConfigFromEnvironment extracts raw config parameters (identified by case-insensitive prefix "typha_") from the given OS environment variables. An environment entry of "TYPHA_FOO=bar" is translated to "foo": "bar".
Types ¶
type Config ¶
type Config struct { DatastoreType string `config:"oneof(kubernetes,etcdv3);etcdv3;non-zero,die-on-fail"` EtcdAddr string `config:"authority;127.0.0.1:2379;local"` EtcdScheme string `config:"oneof(http,https);http;local"` EtcdKeyFile string `config:"file(must-exist);;local"` EtcdCertFile string `config:"file(must-exist);;local"` EtcdCaFile string `config:"file(must-exist);;local"` EtcdEndpoints []string `config:"endpoint-list;;local"` LogFilePath string `config:"file;/var/log/calico/typha.log;die-on-fail"` LogSeverityFile string `config:"oneof(DEBUG,INFO,WARNING,ERROR,CRITICAL);INFO"` LogSeverityScreen string `config:"oneof(DEBUG,INFO,WARNING,ERROR,CRITICAL);INFO"` LogSeveritySys string `config:"oneof(DEBUG,INFO,WARNING,ERROR,CRITICAL);INFO"` HealthEnabled bool `config:"bool;false"` HealthHost string `config:"host-address;localhost"` HealthPort int `config:"int(0,65535);9098"` PrometheusMetricsEnabled bool `config:"bool;false"` PrometheusMetricsHost string `config:"host-address;"` PrometheusMetricsPort int `config:"int(0,65535);9093"` PrometheusGoMetricsEnabled bool `config:"bool;true"` PrometheusProcessMetricsEnabled bool `config:"bool;true"` SnapshotCacheMaxBatchSize int `config:"int(1,);100"` ServerMaxMessageSize int `config:"int(1,);100"` ServerMaxFallBehindSecs time.Duration `config:"seconds;300"` ServerNewClientFallBehindGracePeriod time.Duration `config:"seconds;300"` ServerMinBatchingAgeThresholdSecs time.Duration `config:"seconds;0.01"` ServerPingIntervalSecs time.Duration `config:"seconds;10"` ServerPongTimeoutSecs time.Duration `config:"seconds;60"` ServerHandshakeTimeoutSecs time.Duration `config:"seconds;10"` ServerPort int `config:"port;0"` // Server-side TLS config for Typha's communication with Felix. If any of these are // specified, they _all_ must be - except that either ClientCN or ClientURISAN may be left // unset - and Typha will then only accept secure (TLS) connections. Each connecting client // (Felix) must present a certificate signed by a CA in CAFile, and with CN matching // ClientCN or URI SAN matching ClientURISAN. ServerKeyFile string `config:"file(must-exist);;local"` ServerCertFile string `config:"file(must-exist);;local"` CAFile string `config:"file(must-exist);;local"` ClientCN string `config:"string;"` ClientURISAN string `config:"string;"` DebugMemoryProfilePath string `config:"file;;"` DebugDisableLogDropping bool `config:"bool;false"` // DebugHost is the host to bind the debug server port to. Only used if DebugPort is non-zero. DebugHost string `config:"host-address;localhost"` // DebugPort is the port to bind the pprof debug server to or 0 to disable the debug port. DebugPort int `config:"int(0,65535);"` ConnectionRebalancingMode string `config:"oneof(none,kubernetes);none"` ConnectionDropIntervalSecs time.Duration `config:"seconds;1"` ShutdownTimeoutSecs time.Duration `config:"seconds;300"` ShutdownConnectionDropIntervalMaxSecs time.Duration `config:"seconds;1"` MaxConnectionsUpperLimit int `config:"int(1,);10000"` MaxConnectionsLowerLimit int `config:"int(1,);400"` K8sServicePollIntervalSecs time.Duration `config:"seconds;30"` K8sNamespace string `config:"string;kube-system"` K8sServiceName string `config:"string;calico-typha"` K8sPortName string `config:"string;calico-typha"` // contains filtered or unexported fields }
Config contains the best, parsed config values loaded from the various sources. We use tags to control the parsing and validation.
func (*Config) DatastoreConfig ¶
func (config *Config) DatastoreConfig() apiconfig.CalicoAPIConfig
func (*Config) UpdateFrom ¶
func (config *Config) UpdateFrom(rawData map[string]string, source Source) (changed bool, err error)
Load parses and merges the rawData from one particular source into this config object. If there is a config value already loaded from a higher-priority source, then the new value will be ignored (after validation).
type EndpointListParam ¶
type EndpointListParam struct {
Metadata
}
func (*EndpointListParam) Parse ¶
func (p *EndpointListParam) Parse(raw string) (result interface{}, err error)
type FloatParam ¶
type FloatParam struct {
Metadata
}
func (*FloatParam) Parse ¶
func (p *FloatParam) Parse(raw string) (result interface{}, err error)
type Int32Param ¶
type Int32Param struct {
Metadata
}
func (*Int32Param) Parse ¶
func (p *Int32Param) Parse(raw string) (interface{}, error)
type MarkBitmaskParam ¶
type MarkBitmaskParam struct {
Metadata
}
func (*MarkBitmaskParam) Parse ¶
func (p *MarkBitmaskParam) Parse(raw string) (interface{}, error)
type Metadata ¶
type Metadata struct { Name string Default interface{} ZeroValue interface{} NonZero bool DieOnParseFailure bool Local bool }
func (*Metadata) GetMetadata ¶
type OneofListParam ¶
type OneofListParam struct { Metadata // contains filtered or unexported fields }
func (*OneofListParam) Parse ¶
func (p *OneofListParam) Parse(raw string) (result interface{}, err error)
type PortListParam ¶
type PortListParam struct {
Metadata
}
func (*PortListParam) Parse ¶
func (p *PortListParam) Parse(raw string) (interface{}, error)
type RegexpParam ¶
func (*RegexpParam) Parse ¶
func (p *RegexpParam) Parse(raw string) (result interface{}, err error)
type SecondsParam ¶
type SecondsParam struct {
Metadata
}
func (*SecondsParam) Parse ¶
func (p *SecondsParam) Parse(raw string) (result interface{}, err error)