// ConfigPull pulls an app's config to a file. func ConfigPull(appID string, interactive bool, overwrite bool) error { filename := ".env" if !overwrite { if _, err := os.Stat(filename); err == nil { return fmt.Errorf("%s already exists, pass -o to overwrite", filename) } } c, appID, err := load(appID) if err != nil { return err } configVars, err := config.List(c, appID) if interactive { contents, err := ioutil.ReadFile(filename) if err != nil { return err } localConfigVars := strings.Split(string(contents), "\n") configMap := parseConfig(localConfigVars[:len(localConfigVars)-1]) for key, value := range configVars.Values { localValue, ok := configMap[key] if ok { if value != localValue { var confirm string fmt.Printf("%s: overwrite %s with %s? (y/N) ", key, localValue, value) fmt.Scanln(&confirm) if strings.ToLower(confirm) == "y" { configMap[key] = value } } } else { configMap[key] = value } } return ioutil.WriteFile(filename, []byte(formatConfig(configMap)), 0755) } return ioutil.WriteFile(filename, []byte(formatConfig(configVars.Values)), 0755) }
// TagsList lists an app's tags. func TagsList(appID string) error { c, appID, err := load(appID) if err != nil { return err } config, err := config.List(c, appID) fmt.Printf("=== %s Tags\n", appID) tagMap := make(map[string]string) for key, value := range config.Tags { tagMap[key] = fmt.Sprintf("%v", value) } fmt.Print(prettyprint.PrettyTabs(tagMap, 5)) return nil }
// LimitsList lists an app's limits. func LimitsList(appID string) error { c, appID, err := load(appID) if err != nil { return err } config, err := config.List(c, appID) fmt.Printf("=== %s Limits\n\n", appID) fmt.Println("--- Memory") if len(config.Memory) == 0 { fmt.Println("Unlimited") } else { memoryMap := make(map[string]string) for key, value := range config.Memory { memoryMap[key] = fmt.Sprintf("%v", value) } fmt.Print(prettyprint.PrettyTabs(memoryMap, 5)) } fmt.Println("\n--- CPU") if len(config.CPU) == 0 { fmt.Println("Unlimited") } else { cpuMap := make(map[string]string) for key, value := range config.CPU { cpuMap[key] = strconv.Itoa(int(value.(float64))) } fmt.Print(prettyprint.PrettyTabs(cpuMap, 5)) } return nil }
// ConfigList lists an app's config. func ConfigList(appID string, oneLine bool) error { c, appID, err := load(appID) if err != nil { return err } config, err := config.List(c, appID) if err != nil { return err } var keys []string for k := range config.Values { keys = append(keys, k) } sort.Strings(keys) if oneLine { for _, key := range keys { fmt.Printf("%s=%s ", key, config.Values[key]) } fmt.Println() } else { fmt.Printf("=== %s Config\n", appID) configMap := make(map[string]string) // config.Values is type interface, so it needs to be converted to a string for _, key := range keys { configMap[key] = fmt.Sprintf("%v", config.Values[key]) } fmt.Print(prettyprint.PrettyTabs(configMap, 6)) } return nil }