github.com/loafoe/cli@v7.1.0+incompatible/command/v7/target_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/command/translatableerror" 7 "code.cloudfoundry.org/cli/util/configv3" 8 ) 9 10 type TargetCommand struct { 11 BaseCommand 12 13 Organization string `short:"o" description:"Organization"` 14 Space string `short:"s" description:"Space"` 15 usage interface{} `usage:"CF_NAME target [-o ORG] [-s SPACE]"` 16 relatedCommands interface{} `related_commands:"create-org, create-space, login, orgs, spaces"` 17 } 18 19 func (cmd *TargetCommand) Execute(args []string) error { 20 err := cmd.SharedActor.CheckTarget(false, false) 21 if err != nil { 22 return err 23 } 24 25 user, err := cmd.Config.CurrentUser() 26 if err != nil { 27 cmd.clearTargets() 28 return err 29 } 30 31 switch { 32 case cmd.Organization != "" && cmd.Space != "": 33 err = cmd.setOrgAndSpace() 34 if err != nil { 35 cmd.clearTargets() 36 return err 37 } 38 case cmd.Organization != "": 39 err = cmd.setOrg() 40 if err != nil { 41 cmd.clearTargets() 42 return err 43 } 44 err = cmd.autoTargetSpace(cmd.Config.TargetedOrganization().GUID) 45 if err != nil { 46 cmd.clearTargets() 47 return err 48 } 49 case cmd.Space != "": 50 err = cmd.setSpace() 51 if err != nil { 52 cmd.clearTargets() 53 return err 54 } 55 } 56 57 cmd.displayTargetTable(user) 58 59 if !cmd.Config.HasTargetedOrganization() { 60 cmd.UI.DisplayText("No org or space targeted, use '{{.CFTargetCommand}}'", 61 map[string]interface{}{ 62 "CFTargetCommand": fmt.Sprintf("%s target -o ORG -s SPACE", cmd.Config.BinaryName()), 63 }) 64 return nil 65 } 66 67 if !cmd.Config.HasTargetedSpace() { 68 cmd.UI.DisplayText("No space targeted, use '{{.CFTargetCommand}}'", 69 map[string]interface{}{ 70 "CFTargetCommand": fmt.Sprintf("%s target -s SPACE", cmd.Config.BinaryName()), 71 }) 72 } 73 74 return nil 75 } 76 77 func (cmd TargetCommand) clearTargets() { 78 if cmd.Organization != "" { 79 cmd.Config.UnsetOrganizationAndSpaceInformation() 80 } else if cmd.Space != "" { 81 cmd.Config.UnsetSpaceInformation() 82 } 83 } 84 85 // setOrgAndSpace sets organization and space 86 func (cmd *TargetCommand) setOrgAndSpace() error { 87 err := cmd.setOrg() 88 if err != nil { 89 return err 90 } 91 92 err = cmd.setSpace() 93 if err != nil { 94 return err 95 } 96 97 return nil 98 } 99 100 // setOrg sets organization 101 func (cmd *TargetCommand) setOrg() error { 102 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.Organization) 103 cmd.UI.DisplayWarnings(warnings) 104 if err != nil { 105 return err 106 } 107 108 cmd.Config.SetOrganizationInformation(org.GUID, cmd.Organization) 109 cmd.Config.UnsetSpaceInformation() 110 111 return nil 112 } 113 114 // autoTargetSpace targets the space if there is only one space in the org 115 // and no space arg was provided. 116 func (cmd *TargetCommand) autoTargetSpace(orgGUID string) error { 117 spaces, warnings, err := cmd.Actor.GetOrganizationSpaces(orgGUID) 118 cmd.UI.DisplayWarnings(warnings) 119 if err != nil { 120 return err 121 } 122 123 if len(spaces) == 1 { 124 space := spaces[0] 125 cmd.Config.V7SetSpaceInformation(space.GUID, space.Name) 126 } 127 128 return nil 129 } 130 131 // setSpace sets space 132 func (cmd *TargetCommand) setSpace() error { 133 if !cmd.Config.HasTargetedOrganization() { 134 return translatableerror.NoOrganizationTargetedError{BinaryName: cmd.Config.BinaryName()} 135 } 136 137 space, warnings, err := cmd.Actor.GetSpaceByNameAndOrganization(cmd.Space, cmd.Config.TargetedOrganization().GUID) 138 cmd.UI.DisplayWarnings(warnings) 139 if err != nil { 140 return err 141 } 142 143 cmd.Config.V7SetSpaceInformation(space.GUID, space.Name) 144 145 return nil 146 } 147 148 // displayTargetTable neatly displays target information. 149 func (cmd *TargetCommand) displayTargetTable(user configv3.User) { 150 table := [][]string{ 151 {cmd.UI.TranslateText("API endpoint:"), cmd.Config.Target()}, 152 {cmd.UI.TranslateText("API version:"), cmd.Actor.CloudControllerAPIVersion()}, 153 {cmd.UI.TranslateText("user:"), user.Name}, 154 } 155 156 if cmd.Config.HasTargetedOrganization() { 157 table = append(table, []string{ 158 cmd.UI.TranslateText("org:"), cmd.Config.TargetedOrganization().Name, 159 }) 160 } 161 162 if cmd.Config.HasTargetedSpace() { 163 table = append(table, []string{ 164 cmd.UI.TranslateText("space:"), cmd.Config.TargetedSpace().Name, 165 }) 166 } 167 cmd.UI.DisplayKeyValueTable("", table, 3) 168 }