pkg/config/controller_config.go (56 lines of code) (raw):
package config
import (
"errors"
"github.com/spf13/pflag"
)
const (
flagLogLevel = "log-level"
flagLogFile = "log-file"
flagMaxConcurrentReconciles = "max-concurrent-reconciles"
defaultLogLevel = "info"
defaultLogFile = "/var/log/aws-routed-eni/network-policy-agent.log"
defaultMaxConcurrentReconciles = 3
defaultConntrackCacheCleanupPeriod = 300
defaultConntrackCacheTableSize = 512 * 1024
flagEnablePolicyEventLogs = "enable-policy-event-logs"
flagEnableCloudWatchLogs = "enable-cloudwatch-logs"
flagEnableIPv6 = "enable-ipv6"
flagEnableNetworkPolicy = "enable-network-policy"
flagConntrackCacheCleanupPeriod = "conntrack-cache-cleanup-period"
flagConntrackCacheTableSize = "conntrack-cache-table-size"
)
// ControllerConfig contains the controller configuration
type ControllerConfig struct {
// Log level for the controller logs
LogLevel string
// Local log file for Network Policy Agent
LogFile string
// MaxConcurrentReconciles specifies the max number of reconcile loops
MaxConcurrentReconciles int
// Enable Policy decision logs
EnablePolicyEventLogs bool
// Enable Policy decision logs streaming to CloudWatch
EnableCloudWatchLogs bool
// Enable IPv6 mode
EnableIPv6 bool
// Enable Network Policy
EnableNetworkPolicy bool
// ConntrackCacheCleanupPeriod specifies the cleanup period
ConntrackCacheCleanupPeriod int
// ConntrackTableSize specifies the conntrack table size for the agent
ConntrackCacheTableSize int
// Configurations for the Controller Runtime
RuntimeConfig RuntimeConfig
}
func (cfg *ControllerConfig) BindFlags(fs *pflag.FlagSet) {
fs.StringVar(&cfg.LogLevel, flagLogLevel, defaultLogLevel,
"Set the controller log level - info, debug")
fs.StringVar(&cfg.LogFile, flagLogFile, defaultLogFile, ""+
"Set the controller log file - if not specified logs are written to stdout")
fs.IntVar(&cfg.MaxConcurrentReconciles, flagMaxConcurrentReconciles, defaultMaxConcurrentReconciles, ""+
"Maximum number of concurrent reconcile loops")
fs.BoolVar(&cfg.EnablePolicyEventLogs, flagEnablePolicyEventLogs, false, "If enabled, policy decision logs will be collected & logged")
fs.BoolVar(&cfg.EnableCloudWatchLogs, flagEnableCloudWatchLogs, false, "If enabled, policy decision logs will be streamed to CloudWatch, requires \"enable-policy-event-logs=true\"")
fs.BoolVar(&cfg.EnableIPv6, flagEnableIPv6, false, "If enabled, Network Policy agent will operate in IPv6 mode")
fs.BoolVar(&cfg.EnableNetworkPolicy, flagEnableNetworkPolicy, false, "If enabled, Network Policy agent will initialize BPF maps and start reconciler")
fs.IntVar(&cfg.ConntrackCacheCleanupPeriod, flagConntrackCacheCleanupPeriod, defaultConntrackCacheCleanupPeriod, ""+
"Cleanup interval for network policy agent conntrack cache")
fs.IntVar(&cfg.ConntrackCacheTableSize, flagConntrackCacheTableSize, defaultConntrackCacheTableSize, ""+
"Table size for network policy agent conntrack cache")
cfg.RuntimeConfig.BindFlags(fs)
}
// Validate controller flags
func (cfg *ControllerConfig) ValidControllerFlags() error {
// Validate conntrack cache table size
if cfg.ConntrackCacheTableSize < (32*1024) || cfg.ConntrackCacheTableSize > (1024*1024) {
return errors.New("Invalid conntrack cache table size, should be between 32K and 1024K")
}
return nil
}