diff --git a/config/manager/deployment.yaml b/config/manager/deployment.yaml index a635d694..a87653f3 100644 --- a/config/manager/deployment.yaml +++ b/config/manager/deployment.yaml @@ -41,6 +41,7 @@ spec: - --log-json - --enable-leader-election - --storage-path=/data + - --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local. livenessProbe: httpGet: port: http diff --git a/main.go b/main.go index 8d7ca73b..7aaecce9 100644 --- a/main.go +++ b/main.go @@ -68,19 +68,26 @@ func main() { enableLeaderElection bool storagePath string storageAddr string + storageAdvAddr string concurrent int logLevel string logJSON bool watchAllNamespaces bool ) - flag.StringVar(&metricsAddr, "metrics-addr", envOrDefault("METRICS_ADDR", ":8080"), "The address the metric endpoint binds to.") - flag.StringVar(&eventsAddr, "events-addr", envOrDefault("EVENTS_ADDR", ""), "The address of the events receiver.") + flag.StringVar(&metricsAddr, "metrics-addr", envOrDefault("METRICS_ADDR", ":8080"), + "The address the metric endpoint binds to.") + flag.StringVar(&eventsAddr, "events-addr", envOrDefault("EVENTS_ADDR", ""), + "The address of the events receiver.") flag.BoolVar(&enableLeaderElection, "enable-leader-election", false, "Enable leader election for controller manager. "+ "Enabling this will ensure there is only one active controller manager.") - flag.StringVar(&storagePath, "storage-path", envOrDefault("STORAGE_PATH", ""), "The local storage path.") - flag.StringVar(&storageAddr, "storage-addr", envOrDefault("STORAGE_ADDR", ":9090"), "The address the static file server binds to.") + flag.StringVar(&storagePath, "storage-path", envOrDefault("STORAGE_PATH", ""), + "The local storage path.") + flag.StringVar(&storageAddr, "storage-addr", envOrDefault("STORAGE_ADDR", ":9090"), + "The address the static file server binds to.") + flag.StringVar(&storageAdvAddr, "storage-adv-addr", envOrDefault("STORAGE_ADV_ADDR", ""), + "The advertised address of the static file server.") flag.IntVar(&concurrent, "concurrent", 2, "The number of concurrent reconciles per controller.") flag.StringVar(&logLevel, "log-level", "info", "Set logging level. Can be debug, info or error.") flag.BoolVar(&logJSON, "log-json", false, "Set logging to JSON format.") @@ -122,8 +129,10 @@ func main() { os.Exit(1) } - storage := mustInitStorage(storagePath, storageAddr, setupLog) - + if storageAdvAddr == "" { + storageAdvAddr = determineAdvStorageAddr(storageAddr, setupLog) + } + storage := mustInitStorage(storagePath, storageAdvAddr, setupLog) go startFileServer(storage.BasePath, storageAddr, setupLog) if err = (&controllers.GitRepositoryReconciler{ @@ -202,19 +211,36 @@ func startFileServer(path string, address string, l logr.Logger) { } } -func mustInitStorage(path string, storageAddr string, l logr.Logger) *controllers.Storage { +func mustInitStorage(path string, storageAdvAddr string, l logr.Logger) *controllers.Storage { if path == "" { p, _ := os.Getwd() path = filepath.Join(p, "bin") os.MkdirAll(path, 0777) } + storage, err := controllers.NewStorage(path, storageAdvAddr, 5*time.Minute) + if err != nil { + l.Error(err, "unable to initialise storage") + os.Exit(1) + } + + return storage +} + +func determineAdvStorageAddr(storageAddr string, l logr.Logger) string { + // TODO(hidde): remove next MINOR prerelease as it can be passed in using + // Kubernetes' substitution. + if os.Getenv("RUNTIME_NAMESPACE") != "" { + svcParts := strings.Split(os.Getenv("HOSTNAME"), "-") + return fmt.Sprintf("%s.%s", + strings.Join(svcParts[:len(svcParts)-2], "-"), os.Getenv("RUNTIME_NAMESPACE")) + } + host, port, err := net.SplitHostPort(storageAddr) if err != nil { l.Error(err, "unable to parse storage address") os.Exit(1) } - switch host { case "": host = "localhost" @@ -226,26 +252,10 @@ func mustInitStorage(path string, storageAddr string, l logr.Logger) *controller l.Error(err, "0.0.0.0 specified in storage addr but hostname is invalid") os.Exit(1) } - host = hn } } - - hostname := net.JoinHostPort(host, port) - - if os.Getenv("RUNTIME_NAMESPACE") != "" { - svcParts := strings.Split(os.Getenv("HOSTNAME"), "-") - hostname = fmt.Sprintf("%s.%s", - strings.Join(svcParts[:len(svcParts)-2], "-"), os.Getenv("RUNTIME_NAMESPACE")) - } - - storage, err := controllers.NewStorage(path, hostname, 5*time.Minute) - if err != nil { - l.Error(err, "unable to initialise storage") - os.Exit(1) - } - - return storage + return net.JoinHostPort(host, port) } func envOrDefault(envName, defaultValue string) string {