github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/command/v7/labels_command.go (about) 1 package v7 2 3 import ( 4 "sort" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/v7/shared" 11 "code.cloudfoundry.org/cli/types" 12 "code.cloudfoundry.org/cli/util/ui" 13 ) 14 15 type LabelsCommand struct { 16 RequiredArgs flag.LabelsArgs `positional-args:"yes"` 17 usage interface{} `usage:"CF_NAME labels RESOURCE RESOURCE_NAME\n\nEXAMPLES:\n cf labels app dora \n\nRESOURCES:\n app\n\nSEE ALSO:\n set-label, delete-label"` 18 UI command.UI 19 Config command.Config 20 SharedActor command.SharedActor 21 Actor AppActor 22 } 23 24 func (cmd *LabelsCommand) Setup(config command.Config, ui command.UI) error { 25 cmd.UI = ui 26 cmd.Config = config 27 cmd.SharedActor = sharedaction.NewActor(config) 28 ccClient, _, err := shared.NewClients(config, ui, true, "") 29 if err != nil { 30 return err 31 } 32 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil) 33 return nil 34 } 35 36 func (cmd LabelsCommand) Execute(args []string) error { 37 err := cmd.SharedActor.CheckTarget(true, true) 38 if err != nil { 39 return err 40 } 41 42 username, err := cmd.Config.CurrentUserName() 43 if err != nil { 44 return err 45 } 46 47 cmd.UI.DisplayTextWithFlavor("Getting labels for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 48 "AppName": cmd.RequiredArgs.ResourceName, 49 "OrgName": cmd.Config.TargetedOrganization().Name, 50 "SpaceName": cmd.Config.TargetedSpace().Name, 51 "Username": username, 52 }) 53 54 cmd.UI.DisplayNewline() 55 56 app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID) 57 58 cmd.UI.DisplayWarnings(warnings) 59 if err != nil { 60 return err 61 } 62 63 var labels map[string]types.NullString 64 if app.Metadata != nil { 65 labels = app.Metadata.Labels 66 } 67 if len(labels) == 0 { 68 cmd.UI.DisplayText("No labels found.") 69 return nil 70 } 71 72 keys := make([]string, 0, len(labels)) 73 for key := range labels { 74 keys = append(keys, key) 75 } 76 sort.Strings(keys) 77 78 table := [][]string{ 79 { 80 cmd.UI.TranslateText("Key"), 81 cmd.UI.TranslateText("Value"), 82 }, 83 } 84 85 for _, key := range keys { 86 table = append(table, []string{key, labels[key].Value}) 87 } 88 89 cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding) 90 91 return nil 92 }