github.com/arunkumar7540/cli@v6.45.0+incompatible/command/v7/labels_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 "sort" 6 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/v7/shared" 12 "code.cloudfoundry.org/cli/types" 13 "code.cloudfoundry.org/cli/util/ui" 14 ) 15 16 type ResourceType string 17 18 const ( 19 App ResourceType = "app" 20 Org ResourceType = "org" 21 Space ResourceType = "space" 22 ) 23 24 //go:generate counterfeiter . LabelsActor 25 26 type LabelsActor interface { 27 GetApplicationLabels(appName string, spaceGUID string) (map[string]types.NullString, v7action.Warnings, error) 28 GetOrganizationLabels(orgName string) (map[string]types.NullString, v7action.Warnings, error) 29 GetSpaceLabels(spaceName string, orgGUID string) (map[string]types.NullString, v7action.Warnings, error) 30 } 31 32 type LabelsCommand struct { 33 RequiredArgs flag.LabelsArgs `positional-args:"yes"` 34 usage interface{} `usage:"CF_NAME labels RESOURCE RESOURCE_NAME\n\nEXAMPLES:\n cf labels app dora \n\nRESOURCES:\n app\n space\n org\n\nSEE ALSO:\n set-label, delete-label"` 35 UI command.UI 36 Config command.Config 37 SharedActor command.SharedActor 38 Actor LabelsActor 39 } 40 41 func (cmd *LabelsCommand) Setup(config command.Config, ui command.UI) error { 42 cmd.UI = ui 43 cmd.Config = config 44 cmd.SharedActor = sharedaction.NewActor(config) 45 ccClient, _, err := shared.NewClients(config, ui, true, "") 46 if err != nil { 47 return err 48 } 49 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil) 50 return nil 51 } 52 53 func (cmd LabelsCommand) Execute(args []string) error { 54 var ( 55 labels map[string]types.NullString 56 warnings v7action.Warnings 57 ) 58 username, err := cmd.Config.CurrentUserName() 59 if err != nil { 60 return err 61 } 62 switch ResourceType(cmd.RequiredArgs.ResourceType) { 63 case App: 64 labels, warnings, err = cmd.fetchAppLabels(username) 65 case Org: 66 labels, warnings, err = cmd.fetchOrgLabels(username) 67 case Space: 68 labels, warnings, err = cmd.fetchSpaceLabels(username) 69 default: 70 err = fmt.Errorf("Unsupported resource type of '%s'", cmd.RequiredArgs.ResourceType) 71 } 72 cmd.UI.DisplayWarnings(warnings) 73 if err != nil { 74 return err 75 } 76 77 cmd.printLabels(labels) 78 return nil 79 80 } 81 82 func (cmd LabelsCommand) fetchAppLabels(username string) (map[string]types.NullString, v7action.Warnings, error) { 83 err := cmd.SharedActor.CheckTarget(true, true) 84 if err != nil { 85 return nil, nil, err 86 } 87 88 cmd.UI.DisplayTextWithFlavor("Getting labels for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 89 "AppName": cmd.RequiredArgs.ResourceName, 90 "OrgName": cmd.Config.TargetedOrganization().Name, 91 "SpaceName": cmd.Config.TargetedSpace().Name, 92 "Username": username, 93 }) 94 95 cmd.UI.DisplayNewline() 96 return cmd.Actor.GetApplicationLabels(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID) 97 } 98 99 func (cmd LabelsCommand) fetchOrgLabels(username string) (map[string]types.NullString, v7action.Warnings, error) { 100 err := cmd.SharedActor.CheckTarget(false, false) 101 if err != nil { 102 return nil, nil, err 103 } 104 105 cmd.UI.DisplayTextWithFlavor("Getting labels for org {{.OrgName}} as {{.Username}}...", map[string]interface{}{ 106 "OrgName": cmd.RequiredArgs.ResourceName, 107 "Username": username, 108 }) 109 110 cmd.UI.DisplayNewline() 111 112 return cmd.Actor.GetOrganizationLabels(cmd.RequiredArgs.ResourceName) 113 } 114 115 func (cmd LabelsCommand) fetchSpaceLabels(username string) (map[string]types.NullString, v7action.Warnings, error) { 116 err := cmd.SharedActor.CheckTarget(true, false) 117 if err != nil { 118 return nil, nil, err 119 } 120 121 cmd.UI.DisplayTextWithFlavor("Getting labels for space {{.SpaceName}} in org {{.OrgName}} as {{.Username}}...", map[string]interface{}{ 122 "SpaceName": cmd.RequiredArgs.ResourceName, 123 "OrgName": cmd.Config.TargetedOrganization().Name, 124 "Username": username, 125 }) 126 127 cmd.UI.DisplayNewline() 128 129 return cmd.Actor.GetSpaceLabels(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedOrganization().GUID) 130 } 131 132 func (cmd LabelsCommand) printLabels(labels map[string]types.NullString) { 133 if len(labels) == 0 { 134 cmd.UI.DisplayText("No labels found.") 135 return 136 } 137 138 keys := make([]string, 0, len(labels)) 139 for key := range labels { 140 keys = append(keys, key) 141 } 142 sort.Strings(keys) 143 144 table := [][]string{ 145 { 146 cmd.UI.TranslateText("key"), 147 cmd.UI.TranslateText("value"), 148 }, 149 } 150 151 for _, key := range keys { 152 table = append(table, []string{key, labels[key].Value}) 153 } 154 155 cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding) 156 }