Newer
Older
EnvoyControlPlane / internal / config / config.go
package config

import (
	"flag"

	"k8s.io/klog/v2"
)

// Config holds all application configuration derived from flags.
type Config struct {
	Port               uint
	NodeID             string
	RESTPort           uint
	SnapshotFile       string
	ConfigDir          string
	DBConnStr          string
	EnableCertIssuance bool
	WebrootPath        string
}

// Global configuration variable.
var cfg Config

// InitFlags initializes and binds all command-line flags.
func InitFlags() {
	klog.InitFlags(nil)

	flag.UintVar(&cfg.Port, "port", 18000, "xDS management server port")
	flag.StringVar(&cfg.NodeID, "nodeID", "test-id", "Node ID")
	flag.UintVar(&cfg.RESTPort, "rest-port", 8080, "REST API server port")
	flag.StringVar(&cfg.SnapshotFile, "snapshot-file", "", "Optional initial snapshot JSON/YAML file")
	flag.StringVar(&cfg.ConfigDir, "config-dir", "data/config", "Optional directory containing multiple config files")
	flag.StringVar(&cfg.DBConnStr, "db", "", "Optional database connection string for config persistence")
	flag.BoolVar(&cfg.EnableCertIssuance, "enable-cert-issuance", false, "Enable Let's Encrypt certificate issuance on startup")
	flag.StringVar(&cfg.WebrootPath, "webroot-path", "data/acme", "Local path to serve the HTTP-01 challenge file (required if enabled)")
}

// GetConfig returns the application configuration.
func GetConfig() *Config {
	return &cfg
}