From 75501e5b1c3db1d7ef5aae170b32c68a412242a5 Mon Sep 17 00:00:00 2001 From: Eddy Filip Date: Tue, 13 Sep 2022 16:10:25 +0300 Subject: [PATCH] Add missing packages - `version` is used for getting the operator version and the operator SDK version in the logs. - `k8suitl` is extracted from the operator-sdk to be able to fetch the namespace the operator is deployed to. This is used to deploy Connect in the same namespace if `MANAGE_CONNECT` is set to `true`. In the future, we may want to no rely on this, since this functionality is internal in the operator-sdk. --- pkg/utils/k8sutil.go | 49 ++++++++++++++++++++++++++++++++++++++++++++ version/version.go | 6 ++++++ 2 files changed, 55 insertions(+) create mode 100644 pkg/utils/k8sutil.go create mode 100644 version/version.go diff --git a/pkg/utils/k8sutil.go b/pkg/utils/k8sutil.go new file mode 100644 index 0000000..962681d --- /dev/null +++ b/pkg/utils/k8sutil.go @@ -0,0 +1,49 @@ +package utils + +import ( + "fmt" + "os" + "strings" + + logf "sigs.k8s.io/controller-runtime/pkg/log" +) + +var ForceRunModeEnv = "OSDK_FORCE_RUN_MODE" + +type RunModeType string + +const ( + LocalRunMode RunModeType = "local" + ClusterRunMode RunModeType = "cluster" +) + +var log = logf.Log.WithName("k8sutil") + +// ErrNoNamespace indicates that a namespace could not be found for the current +// environment +var ErrNoNamespace = fmt.Errorf("namespace not found for current environment") + +// ErrRunLocal indicates that the operator is set to run in local mode (this error +// is returned by functions that only work on operators running in cluster mode) +var ErrRunLocal = fmt.Errorf("operator run mode forced to local") + +// GetOperatorNamespace returns the namespace the operator should be running in. +func GetOperatorNamespace() (string, error) { + if isRunModeLocal() { + return "", ErrRunLocal + } + nsBytes, err := os.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace") + if err != nil { + if os.IsNotExist(err) { + return "", ErrNoNamespace + } + return "", err + } + ns := strings.TrimSpace(string(nsBytes)) + log.V(1).Info("Found namespace", "Namespace", ns) + return ns, nil +} + +func isRunModeLocal() bool { + return os.Getenv(ForceRunModeEnv) == string(LocalRunMode) +} diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000..e2cd6fd --- /dev/null +++ b/version/version.go @@ -0,0 +1,6 @@ +package version + +var ( + OperatorVersion = "1.5.0" + OperatorSDKVersion = "1.23.0" +)