Skip to content

Commit

Permalink
append module parameters when running apply
Browse files Browse the repository at this point in the history
  • Loading branch information
thdaraujo committed Jun 10, 2020
1 parent 945146b commit aef6b57
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 7 deletions.
12 changes: 5 additions & 7 deletions internal/config/projectconfig/apply.go
Expand Up @@ -27,16 +27,14 @@ func Apply(dir string, projectContext *ZeroProjectConfig, applyEnvironments []st

func makeAll(dir string, projectContext *ZeroProjectConfig, applyEnvironments []string) []string {
environmentArg := fmt.Sprintf("ENVIRONMENT=%s", strings.Join(applyEnvironments, ","))
envars := []string{environmentArg}

envList := []string{environmentArg}
outputs := []string{}

for _, module := range projectContext.Modules {
// @TODO what's the root dir for these modules?
modulePath := path.Join(dir, projectContext.Name, module.Files.Directory)
output := util.ExecuteCommandOutput(exec.Command("make", environmentArg), modulePath, envars)
flog.Infof("%s", output)
for _, mod := range projectContext.Modules {
modulePath := path.Join(dir, projectContext.Name, mod.Files.Directory)
envList = util.AppendProjectEnvToCmdEnv(mod.Parameters, envList)

output := util.ExecuteCommandOutput(exec.Command("make"), modulePath, envList)
outputs = append(outputs, output)
}
return outputs
Expand Down
70 changes: 70 additions & 0 deletions internal/module/module.go
Expand Up @@ -5,6 +5,8 @@ import (
"encoding/base64"
"io"
"log"
"os"
"os/exec"
"path"
"regexp"
"sync"
Expand All @@ -15,6 +17,7 @@ import (
"github.com/commitdev/zero/internal/util"
"github.com/commitdev/zero/pkg/util/exit"
"github.com/hashicorp/go-getter"
"github.com/manifoldco/promptui"
)

// TemplateModule merges a module instance params with the static configs
Expand Down Expand Up @@ -46,6 +49,73 @@ func ParseModuleConfig(source string) (moduleconfig.ModuleConfig, error) {
return config, err
}

// aws cli prints output with linebreak in them
func sanitizePromptResult(str string) string {
re := regexp.MustCompile("\\n")
return re.ReplaceAllString(str, "")
}

// TODO : Use this function signature instead
// PromptParams renders series of prompt UI based on the config
func PromptParams(moduleConfig moduleconfig.ModuleConfig, parameters map[string]string) (map[string]string, error) {
return map[string]string{}, nil
}

// PromptParams renders series of prompt UI based on the config
func (m *TemplateModule) PromptParams(projectContext map[string]string) error {
for _, promptConfig := range m.Config.Prompts {

label := promptConfig.Label
if promptConfig.Label == "" {
label = promptConfig.Field
}

// deduplicate fields already prompted and received
if _, isAlreadySet := projectContext[promptConfig.Field]; isAlreadySet {
continue
}

var err error
var result string
if len(promptConfig.Options) > 0 {
prompt := promptui.Select{
Label: label,
Items: promptConfig.Options,
}
_, result, err = prompt.Run()

} else if promptConfig.Execute != "" {
// TODO: this could perhaps be set as a default for part of regular prompt
cmd := exec.Command("bash", "-c", promptConfig.Execute)
cmd.Env = util.AppendProjectEnvToCmdEnv(projectContext, os.Environ())
out, err := cmd.Output()

if err != nil {
log.Fatalf("Failed to execute %v\n", err)
panic(err)
}
result = string(out)
} else {
prompt := promptui.Prompt{
Label: label,
}
result, err = prompt.Run()
}
if err != nil {
return err
}

result = sanitizePromptResult(result)
if m.Params == nil {
m.Params = make(map[string]string)
}
m.Params[promptConfig.Field] = result
projectContext[promptConfig.Field] = result
}

return nil
}

// GetSourcePath gets a unique local source directory name. For local modules, it use the local directory
func GetSourceDir(source string) string {
if !isLocal(source) {
Expand Down
12 changes: 12 additions & 0 deletions internal/util/util.go
Expand Up @@ -3,6 +3,7 @@ package util
// @TODO split up and move into /pkg directory

import (
"fmt"
"io"
"log"
"os"
Expand Down Expand Up @@ -101,3 +102,14 @@ func ExecuteCommandOutput(cmd *exec.Cmd, pathPrefix string, envars []string) str
}
return string(out)
}

// AppendProjectEnvToCmdEnv will add all the keys and values from envMap
// into envList as key-value pair strings (e.g.: "key=value")
func AppendProjectEnvToCmdEnv(envMap map[string]string, envList []string) []string {
for key, val := range envMap {
if val != "" {
envList = append(envList, fmt.Sprintf("%s=%s", key, val))
}
}
return envList
}

0 comments on commit aef6b57

Please sign in to comment.