github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/v6/org_command.go (about) 1 package v6 2 3 import ( 4 "fmt" 5 "sort" 6 "strings" 7 8 "code.cloudfoundry.org/cli/actor/sharedaction" 9 "code.cloudfoundry.org/cli/actor/v2action" 10 "code.cloudfoundry.org/cli/actor/v3action" 11 "code.cloudfoundry.org/cli/command" 12 "code.cloudfoundry.org/cli/command/flag" 13 "code.cloudfoundry.org/cli/command/translatableerror" 14 "code.cloudfoundry.org/cli/command/v6/shared" 15 sharedV3 "code.cloudfoundry.org/cli/command/v6/shared" 16 ) 17 18 //go:generate counterfeiter . OrgActor 19 20 type OrgActor interface { 21 GetOrganizationByName(orgName string) (v2action.Organization, v2action.Warnings, error) 22 GetOrganizationSummaryByName(orgName string) (v2action.OrganizationSummary, v2action.Warnings, error) 23 } 24 25 //go:generate counterfeiter . OrgActorV3 26 27 type OrgActorV3 interface { 28 GetIsolationSegmentsByOrganization(orgName string) ([]v3action.IsolationSegment, v3action.Warnings, error) 29 } 30 31 type OrgCommand struct { 32 RequiredArgs flag.Organization `positional-args:"yes"` 33 GUID bool `long:"guid" description:"Retrieve and display the given org's guid. All other output for the org is suppressed."` 34 usage interface{} `usage:"CF_NAME org ORG [--guid]"` 35 relatedCommands interface{} `related_commands:"org-users, orgs"` 36 37 UI command.UI 38 Config command.Config 39 SharedActor command.SharedActor 40 Actor OrgActor 41 ActorV3 OrgActorV3 42 } 43 44 func (cmd *OrgCommand) Setup(config command.Config, ui command.UI) error { 45 cmd.Config = config 46 cmd.UI = ui 47 cmd.SharedActor = sharedaction.NewActor(config) 48 49 ccClient, uaaClient, err := shared.NewClients(config, ui, true) 50 if err != nil { 51 return err 52 } 53 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 54 55 ccClientV3, _, err := sharedV3.NewV3BasedClients(config, ui, true, "") 56 if err != nil { 57 if _, ok := err.(translatableerror.V3APIDoesNotExistError); !ok { 58 return err 59 } 60 } else { 61 cmd.ActorV3 = v3action.NewActor(ccClientV3, config, nil, nil) 62 } 63 64 return nil 65 } 66 67 func (cmd OrgCommand) Execute(args []string) error { 68 err := cmd.SharedActor.CheckTarget(false, false) 69 if err != nil { 70 return err 71 } 72 73 if cmd.GUID { 74 return cmd.displayOrgGUID() 75 } else { 76 return cmd.displayOrgSummary() 77 } 78 } 79 80 func (cmd OrgCommand) displayOrgGUID() error { 81 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.Organization) 82 cmd.UI.DisplayWarnings(warnings) 83 if err != nil { 84 return err 85 } 86 87 cmd.UI.DisplayText(org.GUID) 88 89 return nil 90 } 91 92 func (cmd OrgCommand) displayOrgSummary() error { 93 user, err := cmd.Config.CurrentUser() 94 if err != nil { 95 return err 96 } 97 98 cmd.UI.DisplayTextWithFlavor( 99 "Getting info for org {{.OrgName}} as {{.Username}}...", 100 map[string]interface{}{ 101 "OrgName": cmd.RequiredArgs.Organization, 102 "Username": user.Name, 103 }) 104 cmd.UI.DisplayNewline() 105 106 orgSummary, warnings, err := cmd.Actor.GetOrganizationSummaryByName(cmd.RequiredArgs.Organization) 107 cmd.UI.DisplayWarnings(warnings) 108 if err != nil { 109 return err 110 } 111 112 table := [][]string{ 113 {cmd.UI.TranslateText("name:"), orgSummary.Name}, 114 {cmd.UI.TranslateText("domains:"), strings.Join(orgSummary.DomainNames, ", ")}, 115 {cmd.UI.TranslateText("quota:"), orgSummary.QuotaName}, 116 {cmd.UI.TranslateText("spaces:"), strings.Join(orgSummary.SpaceNames, ", ")}, 117 } 118 119 if cmd.ActorV3 != nil { 120 isolationSegments, v3Warnings, err := cmd.ActorV3.GetIsolationSegmentsByOrganization(orgSummary.GUID) 121 cmd.UI.DisplayWarnings(v3Warnings) 122 if err != nil { 123 return err 124 } 125 126 isolationSegmentNames := []string{} 127 for _, iso := range isolationSegments { 128 if iso.GUID == orgSummary.DefaultIsolationSegmentGUID { 129 isolationSegmentNames = append(isolationSegmentNames, fmt.Sprintf("%s (%s)", iso.Name, cmd.UI.TranslateText("default"))) 130 } else { 131 isolationSegmentNames = append(isolationSegmentNames, iso.Name) 132 } 133 } 134 135 sort.Strings(isolationSegmentNames) 136 table = append(table, []string{cmd.UI.TranslateText("isolation segments:"), strings.Join(isolationSegmentNames, ", ")}) 137 } 138 139 cmd.UI.DisplayKeyValueTable("", table, 3) 140 141 return nil 142 }