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