github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/labels.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/appsettings" 9 ) 10 11 // LabelsList list app's labels 12 func (d *DryccCmd) LabelsList(appID string) error { 13 s, appID, err := load(d.ConfigFile, appID) 14 15 if err != nil { 16 return err 17 } 18 19 appSettings, err := appsettings.List(s.Client, appID) 20 if d.checkAPICompatibility(s.Client, err) != nil { 21 return err 22 } 23 24 if len(appSettings.Label) == 0 { 25 d.Println(fmt.Sprintf("No labels found in %s app.", appID)) 26 } else { 27 table := d.getDefaultFormatTable([]string{"UUID", "OWNER", "KEY", "VALUE"}) 28 for _, key := range *sortKeys(appSettings.Label) { 29 table.Append([]string{ 30 appSettings.UUID, 31 appSettings.Owner, 32 key, 33 fmt.Sprintf("%v", appSettings.Label[key]), 34 }) 35 } 36 table.Render() 37 } 38 39 return nil 40 } 41 42 // LabelsSet sets labels for app 43 func (d *DryccCmd) LabelsSet(appID string, labels []string) error { 44 s, appID, err := load(d.ConfigFile, appID) 45 46 if err != nil { 47 return err 48 } 49 50 labelsMap, err := parseLabels(labels) 51 if err != nil { 52 return err 53 } 54 55 d.Printf("Applying labels on %s... ", appID) 56 57 quit := progress(d.WOut) 58 59 _, err = appsettings.Set(s.Client, appID, api.AppSettings{Label: labelsMap}) 60 61 quit <- true 62 <-quit 63 64 if err != nil { 65 return err 66 } 67 68 d.Println("done") 69 return nil 70 } 71 72 // LabelsUnset removes labels for the app. 73 func (d *DryccCmd) LabelsUnset(appID string, labels []string) error { 74 s, appID, err := load(d.ConfigFile, appID) 75 76 if err != nil { 77 return err 78 } 79 80 labelsMap := make(map[string]interface{}) 81 82 for _, label := range labels { 83 labelsMap[label] = nil 84 } 85 86 d.Printf("Removing labels on %s... ", appID) 87 88 quit := progress(d.WOut) 89 90 _, err = appsettings.Set(s.Client, appID, api.AppSettings{Label: labelsMap}) 91 92 quit <- true 93 <-quit 94 95 if err != nil { 96 return err 97 } 98 99 d.Println("done") 100 return nil 101 } 102 103 func parseLabels(labels []string) (map[string]interface{}, error) { 104 labelsMap := make(map[string]interface{}) 105 106 for _, label := range labels { 107 key, value, err := parseLabel(label) 108 109 if err != nil { 110 return nil, err 111 } 112 113 labelsMap[key] = value 114 } 115 116 return labelsMap, nil 117 } 118 119 func parseLabel(label string) (string, string, error) { 120 parts := strings.Split(label, "=") 121 122 if len(parts) != 2 || parts[0] == "" || parts[1] == "" { 123 return "", "", fmt.Errorf(`%s is invalid, Must be in format key=value 124 Examples: git_repo=https://github.com/drycc/workflow team=frontend`, label) 125 } 126 127 return parts[0], parts[1], nil 128 }