mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-22 15:38:06 +00:00

- `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.
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
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)
|
|
}
|