github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/v3_apps_command.go (about) 1 package v3 2 3 import ( 4 "net/http" 5 "strings" 6 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v2action" 9 "code.cloudfoundry.org/cli/actor/v3action" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 12 "code.cloudfoundry.org/cli/command" 13 "code.cloudfoundry.org/cli/command/translatableerror" 14 sharedV2 "code.cloudfoundry.org/cli/command/v2/shared" 15 "code.cloudfoundry.org/cli/command/v3/shared" 16 "code.cloudfoundry.org/cli/util/ui" 17 ) 18 19 //go:generate counterfeiter . V3AppsActor 20 21 type V3AppsActor interface { 22 CloudControllerAPIVersion() string 23 GetApplicationsWithProcessesBySpace(spaceGUID string) ([]v3action.ApplicationWithProcessSummary, v3action.Warnings, error) 24 } 25 26 type V3AppsCommand struct { 27 usage interface{} `usage:"CF_NAME v3-apps"` 28 29 UI command.UI 30 Config command.Config 31 Actor V3AppsActor 32 V2AppRouteActor shared.V2AppRouteActor 33 SharedActor command.SharedActor 34 } 35 36 func (cmd *V3AppsCommand) Setup(config command.Config, ui command.UI) error { 37 cmd.UI = ui 38 cmd.Config = config 39 cmd.SharedActor = sharedaction.NewActor(config) 40 41 ccClient, _, err := shared.NewClients(config, ui, true) 42 if err != nil { 43 if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound { 44 return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionV3} 45 } 46 47 return err 48 } 49 cmd.Actor = v3action.NewActor(nil, ccClient, config) 50 51 ccClientV2, uaaClientV2, err := sharedV2.NewClients(config, ui, true) 52 if err != nil { 53 return err 54 } 55 56 cmd.V2AppRouteActor = v2action.NewActor(ccClientV2, uaaClientV2, config) 57 58 return nil 59 } 60 61 func (cmd V3AppsCommand) Execute(args []string) error { 62 err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionV3) 63 if err != nil { 64 return err 65 } 66 67 err = cmd.SharedActor.CheckTarget(cmd.Config, true, true) 68 if err != nil { 69 return shared.HandleError(err) 70 } 71 72 user, err := cmd.Config.CurrentUser() 73 if err != nil { 74 return shared.HandleError(err) 75 } 76 77 cmd.UI.DisplayTextWithFlavor("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 78 "OrgName": cmd.Config.TargetedOrganization().Name, 79 "SpaceName": cmd.Config.TargetedSpace().Name, 80 "Username": user.Name, 81 }) 82 cmd.UI.DisplayNewline() 83 84 summaries, warnings, err := cmd.Actor.GetApplicationsWithProcessesBySpace(cmd.Config.TargetedSpace().GUID) 85 cmd.UI.DisplayWarnings(warnings) 86 if err != nil { 87 return shared.HandleError(err) 88 } 89 90 if len(summaries) == 0 { 91 cmd.UI.DisplayText("No apps found") 92 return nil 93 } 94 95 table := [][]string{ 96 { 97 cmd.UI.TranslateText("name"), 98 cmd.UI.TranslateText("requested state"), 99 cmd.UI.TranslateText("processes"), 100 cmd.UI.TranslateText("routes"), 101 }, 102 } 103 104 for _, summary := range summaries { 105 var routesList string 106 if len(summary.ProcessSummaries) > 0 { 107 routes, warnings, err := cmd.V2AppRouteActor.GetApplicationRoutes(summary.GUID) 108 cmd.UI.DisplayWarnings(warnings) 109 if err != nil { 110 return shared.HandleError(err) 111 } 112 routesList = routes.Summary() 113 } 114 115 table = append(table, []string{ 116 summary.Name, 117 cmd.UI.TranslateText(strings.ToLower(string(summary.State))), 118 summary.ProcessSummaries.String(), 119 routesList, 120 }) 121 } 122 123 cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding) 124 125 return nil 126 }