parent
a43125701c
commit
be693e9df0
|
@ -36,6 +36,11 @@ var REPOS_BASE_URL = "https://git.coopcloud.tech/coop-cloud"
|
||||||
var CATALOGUE_JSON_REPO_NAME = "recipes-catalogue-json"
|
var CATALOGUE_JSON_REPO_NAME = "recipes-catalogue-json"
|
||||||
var SSH_URL_TEMPLATE = "ssh://git@git.coopcloud.tech:2222/coop-cloud/%s.git"
|
var SSH_URL_TEMPLATE = "ssh://git@git.coopcloud.tech:2222/coop-cloud/%s.git"
|
||||||
|
|
||||||
|
// envVarModifiers is a list of env var modifier strings. These are added to
|
||||||
|
// env vars as comments and modify their processing by Abra, e.g. determining
|
||||||
|
// how long secrets should be.
|
||||||
|
var envVarModifiers = []string{"length"}
|
||||||
|
|
||||||
// GetServers retrieves all servers.
|
// GetServers retrieves all servers.
|
||||||
func GetServers() ([]string, error) {
|
func GetServers() ([]string, error) {
|
||||||
var servers []string
|
var servers []string
|
||||||
|
@ -50,18 +55,38 @@ func GetServers() ([]string, error) {
|
||||||
return servers, nil
|
return servers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContainsEnvVarModifier determines if an env var contains a modifier.
|
||||||
|
func ContainsEnvVarModifier(envVar string) bool {
|
||||||
|
for _, mod := range envVarModifiers {
|
||||||
|
if strings.Contains(envVar, fmt.Sprintf("%s=", mod)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// ReadEnv loads an app envivornment into a map.
|
// ReadEnv loads an app envivornment into a map.
|
||||||
func ReadEnv(filePath string) (AppEnv, error) {
|
func ReadEnv(filePath string) (AppEnv, error) {
|
||||||
var envFile AppEnv
|
var envVars AppEnv
|
||||||
|
|
||||||
envFile, err := godotenv.Read(filePath)
|
envVars, err := godotenv.Read(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("read %s from %s", envFile, filePath)
|
for idx, envVar := range envVars {
|
||||||
|
if strings.Contains(envVar, "#") {
|
||||||
|
if ContainsEnvVarModifier(envVar) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
vals := strings.Split(envVar, "#")
|
||||||
|
envVars[idx] = strings.TrimSpace(vals[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return envFile, nil
|
logrus.Debugf("read %s from %s", envVars, filePath)
|
||||||
|
|
||||||
|
return envVars, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadServerNames retrieves all server names.
|
// ReadServerNames retrieves all server names.
|
||||||
|
|
|
@ -184,3 +184,36 @@ func TestCheckEnvError(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContainsEnvVarModifier(t *testing.T) {
|
||||||
|
if ok := config.ContainsEnvVarModifier("FOO=bar # bing"); ok {
|
||||||
|
t.Fatal("FOO contains no env var modifier")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ok := config.ContainsEnvVarModifier("FOO=bar # length=3"); !ok {
|
||||||
|
t.Fatal("FOO contains an env var modifier (length)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnvVarCommentsRemoved(t *testing.T) {
|
||||||
|
offline := true
|
||||||
|
r, err := recipe.Get("abra-test-recipe", offline)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
envSamplePath := path.Join(config.RECIPES_DIR, r.Name, ".env.sample")
|
||||||
|
envSample, err := config.ReadEnv(envSamplePath)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
envVar, exists := envSample["WITH_COMMENT"]
|
||||||
|
if !exists {
|
||||||
|
t.Fatal("WITH_COMMENT env var should be present in .env.sample")
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(envVar, "should be removed") {
|
||||||
|
t.Fatalf("comment from '%s' should be removed", envVar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -420,7 +420,7 @@ func convertServiceSecrets(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(d1): strip # length=... modifiers
|
// NOTE(d1): strip all comments
|
||||||
if strings.Contains(obj.Name, "#") {
|
if strings.Contains(obj.Name, "#") {
|
||||||
vals := strings.Split(obj.Name, "#")
|
vals := strings.Split(obj.Name, "#")
|
||||||
obj.Name = strings.TrimSpace(vals[0])
|
obj.Name = strings.TrimSpace(vals[0])
|
||||||
|
|
Loading…
Reference in New Issue