pkg/util/platform.go (113 lines of code) (raw):

package util import ( "context" "errors" "fmt" "os" "strconv" coreV1 "k8s.io/api/core/v1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" codebaseApi "github.com/epam/edp-codebase-operator/v2/api/v1" "github.com/epam/edp-codebase-operator/v2/pkg/model" ) const ( watchNamespaceEnvVar = "WATCH_NAMESPACE" debugModeEnvVar = "DEBUG_MODE" ) func GetUserSettings(c client.Client, namespace string) (*model.UserSettings, error) { ctx := context.Background() us := &coreV1.ConfigMap{} err := c.Get(ctx, types.NamespacedName{ Namespace: namespace, Name: "edp-config", }, us) if err != nil { return nil, fmt.Errorf("failed to fetch 'edp-config' resource: %w", err) } return &model.UserSettings{ DnsWildcard: us.Data["dns_wildcard"], }, nil } func GetGerritPort(c client.Client, namespace string) (*int32, error) { gs, err := getGitServerCR(c, "gerrit", namespace) if err != nil { return nil, fmt.Errorf("failed to get %v Git Server CR: %w", "gerrit", err) } if gs.Spec.SshPort == 0 { return nil, errors.New("ssh port is zero or not defined in gerrit GitServer CR") } return getInt32P(gs.Spec.SshPort), nil } func getInt32P(val int32) *int32 { return &val } func GetVcsBasicAuthConfig(c client.Client, namespace, secretName string) (userName, password string, err error) { log.Info("Start getting secret", "name", secretName) secret := &coreV1.Secret{} err = c.Get(context.TODO(), types.NamespacedName{ Namespace: namespace, Name: secretName, }, secret) if err != nil { return "", "", fmt.Errorf("failed to get secret %v: %w", secretName, err) } if len(secret.Data["username"]) == 0 || len(secret.Data["password"]) == 0 { return "", "", fmt.Errorf("username/password keys are not defined in Secret %v ", secretName) } userName = string(secret.Data["username"]) password = string(secret.Data["password"]) return } func GetGitServer(c client.Client, name, namespace string) (*model.GitServer, error) { gitReq, err := getGitServerCR(c, name, namespace) if err != nil { return nil, fmt.Errorf("failed to get %v Git Server CR: %w", name, err) } gs := model.ConvertToGitServer(gitReq) return gs, nil } func getGitServerCR(c client.Client, name, namespace string) (*codebaseApi.GitServer, error) { log.Info("Start fetching GitServer resource from k8s", "name", name, "namespace", namespace) instance := &codebaseApi.GitServer{} if err := c.Get(context.TODO(), types.NamespacedName{Namespace: namespace, Name: name}, instance); err != nil { if k8sErrors.IsNotFound(err) { return nil, fmt.Errorf("failed to find GitServer %v in k8s: %w", name, err) } return nil, fmt.Errorf("failed to get GitServer %v: %w", name, err) } log.Info("Git Server instance has been received", "name", name) return instance, nil } func GetSecret(c client.Client, secretName, namespace string) (*coreV1.Secret, error) { log.Info("Start fetching Secret resource from k8s", "secret name", secretName, "namespace", namespace) secret := &coreV1.Secret{} err := c.Get(context.TODO(), types.NamespacedName{ Namespace: namespace, Name: secretName, }, secret) if err != nil { return nil, fmt.Errorf("failed to get secret %v: %w", secretName, err) } log.Info("Secret has been fetched", "secret name", secretName, "namespace", namespace) return secret, nil } // GetWatchNamespace returns the namespace the operator should be watching for changes. func GetWatchNamespace() (string, error) { ns, found := os.LookupEnv(watchNamespaceEnvVar) if !found { return "", fmt.Errorf("%s must be set", watchNamespaceEnvVar) } return ns, nil } // GetDebugMode returns the debug mode value. func GetDebugMode() (bool, error) { mode, found := os.LookupEnv(debugModeEnvVar) if !found { return false, nil } b, err := strconv.ParseBool(mode) if err != nil { return false, fmt.Errorf("failed to parse env value as boolean: %w", err) } return b, nil }