diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0e0eed2..4dafb3c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "name": "Kubebuilder DevContainer", - "image": "docker.io/golang:1.23", + "image": "docker.io/golang:1.24", "features": { "ghcr.io/devcontainers/features/docker-in-docker:2": {}, "ghcr.io/devcontainers/features/git:1": {} diff --git a/cmd/main.go b/cmd/main.go index f9a14aa..de526c9 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -20,11 +20,15 @@ import ( "crypto/tls" "errors" "flag" + "os" + "path/filepath" + + "github.com/go-logr/zapr" "github.com/pdok/mapserver-operator/internal/controller/mapfilegenerator" smoothoperator "github.com/pdok/smooth-operator/api/v1" + "github.com/pdok/smooth-operator/pkg/integrations/logging" traefikiov1alpha1 "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/traefikio/v1alpha1" - "os" - "path/filepath" + "go.uber.org/zap/zapcore" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) // to ensure that exec-entrypoint and run can make use of them. @@ -36,7 +40,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/certwatcher" "sigs.k8s.io/controller-runtime/pkg/healthz" - "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -88,6 +91,8 @@ func main() { var host string var mapserverDebugLevel int var multitoolImage, mapfileGeneratorImage, mapserverImage, capabilitiesGeneratorImage, featureinfoGeneratorImage, ogcWebserviceProxyImage, apacheExporterImage string + var slackWebhookURL string + var logLevel int flag.StringVar(&metricsAddr, "metrics-bind-address", "0", "The address the metrics endpoint binds to. "+ "Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") @@ -114,14 +119,16 @@ func main() { flag.StringVar(&ogcWebserviceProxyImage, "ogc-webservice-proxy-image", defaultOgcWebserviceProxyImage, "The image to use in the ogc webservice proxy container.") flag.StringVar(&apacheExporterImage, "apache-exporter-image", defaultApacheExporterImage, "The image to use in the apache-exporter container.") flag.IntVar(&mapserverDebugLevel, "mapserver-debug-level", 0, "Debug level for the mapserver container, between 0 (error only) and 5 (very very verbose).") + flag.StringVar(&slackWebhookURL, "slack-webhook-url", "", "The webhook url for sending slack messages. Disabled if left empty") + flag.IntVar(&logLevel, "log-level", 0, "The zapcore loglevel. 0 = info, 1 = warn, 2 = error") - opts := zap.Options{ - Development: true, - } - opts.BindFlags(flag.CommandLine) flag.Parse() - ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) + //nolint:gosec + levelEnabler := zapcore.Level(logLevel) + zapLogger, _ := logging.SetupLogger("atom-operator", slackWebhookURL, levelEnabler) + + ctrl.SetLogger(zapr.NewLogger(zapLogger)) if host == "" { setupLog.Error(errors.New("baseURL is required"), "A value for baseURL must be specified.") diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 89a995b..321727e 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -210,7 +210,7 @@ var _ = Describe("Manager", Ordered, func() { cmd := exec.Command("kubectl", "logs", controllerPodName, "-n", namespace) output, err := utils.Run(cmd) g.Expect(err).NotTo(HaveOccurred()) - g.Expect(output).To(ContainSubstring("controller-runtime.metrics\tServing metrics server"), + g.Expect(output).To(ContainSubstring("Serving metrics server"), "Metrics server not yet started") } Eventually(verifyMetricsServerStarted).Should(Succeed())