pkg/service/platform/helper/helper.go (80 lines of code) (raw):
package helper
import (
"fmt"
"os"
"path/filepath"
"github.com/pkg/errors"
coreV1Api "k8s.io/api/core/v1"
"github.com/epam/edp-gerrit-operator/v2/pkg/service/helpers"
)
const (
DefaultConfigFilesAbsolutePath = "/usr/local/"
LocalConfigsRelativePath = "configs"
DefaultTemplatesDirectory = "templates"
DefaultScriptsDirectory = "scripts"
LocalTemplatesRelativePath = DefaultConfigFilesAbsolutePath + LocalConfigsRelativePath + "/" + DefaultTemplatesDirectory
LocalScriptsRelativePath = DefaultConfigFilesAbsolutePath + LocalConfigsRelativePath + "/" + DefaultScriptsDirectory
RouteHTTPSScheme = "https"
RouteHTTPScheme = "http"
inClusterNamespacePath = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
)
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
func GetExecutableFilePath() (string, error) {
executableFilePath, err := os.Executable()
if err != nil {
return "", fmt.Errorf("failed to get path for the executable that started process: %w", err)
}
return filepath.Dir(executableFilePath), nil
}
func RunningInCluster() bool {
_, err := os.Stat(inClusterNamespacePath)
return !os.IsNotExist(err)
}
// GenerateLabels returns initialized map using name parameter.
func GenerateLabels(name string) map[string]string {
return map[string]string{
"app": name,
}
}
func SelectContainer(containers []coreV1Api.Container, name string) (coreV1Api.Container, error) {
for i := 0; i < len(containers); i++ {
if containers[i].Name == name {
return containers[i], nil
}
}
return coreV1Api.Container{}, errors.New("no matching container in spec found")
}
func UpdateEnv(existing, env []coreV1Api.EnvVar) []coreV1Api.EnvVar {
out := make([]coreV1Api.EnvVar, 0)
covered := make([]string, 0)
for _, e := range existing {
newer, ok := findEnv(env, e.Name)
if ok {
covered = append(covered, e.Name)
out = append(out, newer)
continue
}
out = append(out, e)
}
for _, e := range env {
if helpers.IsStringInSlice(e.Name, covered) {
continue
}
covered = append(covered, e.Name)
out = append(out, e)
}
return out
}
func findEnv(env []coreV1Api.EnvVar, name string) (coreV1Api.EnvVar, bool) {
for _, e := range env {
if e.Name == name {
return e, true
}
}
return coreV1Api.EnvVar{}, false
}