func ConfigSet(configStore *config.Store, app, env string, envVars []string) error { if len(envVars) == 0 { bytes, err := ioutil.ReadAll(os.Stdin) if err != nil { return err } envVars = strings.Split(string(bytes), "\n") } if len(envVars) == 0 { return fmt.Errorf("no config values specified.") } svcCfg, err := configStore.GetApp(app, env) if err != nil { return fmt.Errorf("unable to set config: %s.", err) } if svcCfg == nil { svcCfg = configStore.NewAppConfig(app, "") } updated := false for _, arg := range envVars { if strings.TrimSpace(arg) == "" { continue } if !strings.Contains(arg, "=") { return fmt.Errorf("bad config variable format: %s", arg) } sep := strings.Index(arg, "=") k := strings.ToUpper(strings.TrimSpace(arg[0:sep])) v := strings.TrimSpace(arg[sep+1:]) if k == "ENV" { log.Warnf("%s cannot be updated.", k) continue } log.Printf("%s=%s\n", k, v) svcCfg.EnvSet(k, v) updated = true } if !updated { return fmt.Errorf("configuration NOT changed for %s", app) } updated, err = configStore.UpdateApp(svcCfg, env) if err != nil { return fmt.Errorf("unable to set config: %s.", err) } if !updated { return fmt.Errorf("configuration NOT changed for %s", app) } log.Printf("Configuration changed for %s. v%d\n", app, svcCfg.ID()) return nil }