github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/registry.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/drycc/controller-sdk-go/api" 8 "github.com/drycc/controller-sdk-go/config" 9 ) 10 11 // RegistryList lists an app's registry information. 12 func (d *DryccCmd) RegistryList(appID string) error { 13 s, appID, err := load(d.ConfigFile, appID) 14 15 if err != nil { 16 return err 17 } 18 19 config, err := config.List(s.Client, appID) 20 if d.checkAPICompatibility(s.Client, err) != nil { 21 return err 22 } 23 if len(config.Registry) == 0 { 24 d.Println(fmt.Sprintf("No registrys found in %s app.", appID)) 25 } else { 26 table := d.getDefaultFormatTable([]string{"UUID", "OWNER", "KEY", "VALUE"}) 27 for _, key := range *sortKeys(config.Registry) { 28 table.Append([]string{ 29 config.UUID, 30 config.Owner, 31 key, 32 fmt.Sprintf("%v", config.Registry[key]), 33 }) 34 } 35 table.Render() 36 } 37 return nil 38 } 39 40 // RegistrySet sets an app's registry information. 41 func (d *DryccCmd) RegistrySet(appID string, item []string) error { 42 s, appID, err := load(d.ConfigFile, appID) 43 44 if err != nil { 45 return err 46 } 47 48 registryMap, err := parseInfos(item) 49 if err != nil { 50 return err 51 } 52 53 d.Print("Applying registry information... ") 54 55 quit := progress(d.WOut) 56 configObj := api.Config{} 57 configObj.Registry = registryMap 58 59 _, err = config.Set(s.Client, appID, configObj) 60 quit <- true 61 <-quit 62 if d.checkAPICompatibility(s.Client, err) != nil { 63 return err 64 } 65 66 d.Print("done\n\n") 67 68 return d.RegistryList(appID) 69 } 70 71 // RegistryUnset removes an app's registry information. 72 func (d *DryccCmd) RegistryUnset(appID string, items []string) error { 73 s, appID, err := load(d.ConfigFile, appID) 74 75 if err != nil { 76 return err 77 } 78 79 d.Print("Applying registry information... ") 80 81 quit := progress(d.WOut) 82 83 configObj := api.Config{} 84 85 registryMap := make(map[string]interface{}) 86 87 for _, key := range items { 88 registryMap[key] = nil 89 } 90 91 configObj.Registry = registryMap 92 93 _, err = config.Set(s.Client, appID, configObj) 94 quit <- true 95 <-quit 96 if d.checkAPICompatibility(s.Client, err) != nil { 97 return err 98 } 99 100 d.Print("done\n\n") 101 102 return d.RegistryList(appID) 103 } 104 105 func parseInfos(items []string) (map[string]interface{}, error) { 106 registryMap := make(map[string]interface{}) 107 108 for _, item := range items { 109 key, value, err := parseInfo(item) 110 111 if err != nil { 112 return nil, err 113 } 114 115 registryMap[key] = value 116 } 117 118 return registryMap, nil 119 } 120 121 func parseInfo(item string) (string, string, error) { 122 parts := strings.SplitN(item, "=", 2) 123 124 if len(parts) != 2 || parts[0] == "" || parts[1] == "" { 125 return "", "", fmt.Errorf(`%s is invalid. Must be in format key=value 126 Examples: username=bob password=s3cur3pw1`, item) 127 } 128 129 if parts[0] != "username" && parts[0] != "password" { 130 return "", "", fmt.Errorf(`%s is invalid. Valid keys are "username" or "password"`, parts[0]) 131 } 132 133 return parts[0], parts[1], nil 134 }