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" +)