github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/plugin/cli_connection.go (about) 1 package plugin 2 3 import ( 4 "errors" 5 "fmt" 6 "net" 7 "net/rpc" 8 "os" 9 "time" 10 11 "github.com/cloudfoundry/cli/plugin/models" 12 ) 13 14 type cliConnection struct { 15 cliServerPort string 16 } 17 18 func NewCliConnection(cliServerPort string) *cliConnection { 19 return &cliConnection{ 20 cliServerPort: cliServerPort, 21 } 22 } 23 24 func (cliConnection *cliConnection) sendPluginMetadataToCliServer(metadata PluginMetadata) { 25 cliServerConn, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 26 if err != nil { 27 fmt.Println(err) 28 os.Exit(1) 29 } 30 defer cliServerConn.Close() 31 32 var success bool 33 34 err = cliServerConn.Call("CliRpcCmd.SetPluginMetadata", metadata, &success) 35 if err != nil { 36 fmt.Println(err) 37 os.Exit(1) 38 } 39 40 if !success { 41 os.Exit(1) 42 } 43 44 os.Exit(0) 45 } 46 47 func (cliConnection *cliConnection) isMinCliVersion(version string) bool { 48 cliServerConn, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 49 if err != nil { 50 fmt.Println(err) 51 os.Exit(1) 52 } 53 defer cliServerConn.Close() 54 55 var result bool 56 57 err = cliServerConn.Call("CliRpcCmd.IsMinCliVersion", version, &result) 58 if err != nil { 59 fmt.Println(err) 60 os.Exit(1) 61 } 62 63 return result 64 } 65 66 func (cliConnection *cliConnection) CliCommandWithoutTerminalOutput(args ...string) ([]string, error) { 67 return cliConnection.callCliCommand(true, args...) 68 } 69 70 func (cliConnection *cliConnection) CliCommand(args ...string) ([]string, error) { 71 return cliConnection.callCliCommand(false, args...) 72 } 73 74 func (cliConnection *cliConnection) callCliCommand(silently bool, args ...string) ([]string, error) { 75 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 76 if err != nil { 77 return []string{}, err 78 } 79 defer client.Close() 80 81 var success bool 82 83 client.Call("CliRpcCmd.DisableTerminalOutput", silently, &success) 84 err = client.Call("CliRpcCmd.CallCoreCommand", args, &success) 85 86 var cmdOutput []string 87 outputErr := client.Call("CliRpcCmd.GetOutputAndReset", success, &cmdOutput) 88 89 if err != nil { 90 return cmdOutput, err 91 } else if !success { 92 return cmdOutput, errors.New("Error executing cli core command") 93 } 94 95 if outputErr != nil { 96 return cmdOutput, errors.New("something completely unexpected happened") 97 } 98 return cmdOutput, nil 99 } 100 101 func (cliConnection *cliConnection) pingCLI() { 102 //call back to cf saying we have been setup 103 var connErr error 104 var conn net.Conn 105 for i := 0; i < 5; i++ { 106 conn, connErr = net.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 107 if connErr != nil { 108 time.Sleep(200 * time.Millisecond) 109 } else { 110 conn.Close() 111 break 112 } 113 } 114 if connErr != nil { 115 fmt.Println(connErr) 116 os.Exit(1) 117 } 118 } 119 120 func (cliConnection *cliConnection) GetCurrentOrg() (plugin_models.Organization, error) { 121 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 122 if err != nil { 123 return plugin_models.Organization{}, err 124 } 125 126 var result plugin_models.Organization 127 128 err = client.Call("CliRpcCmd.GetCurrentOrg", "", &result) 129 return result, err 130 } 131 132 func (cliConnection *cliConnection) GetCurrentSpace() (plugin_models.Space, error) { 133 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 134 if err != nil { 135 return plugin_models.Space{}, err 136 } 137 138 var result plugin_models.Space 139 140 err = client.Call("CliRpcCmd.GetCurrentSpace", "", &result) 141 return result, err 142 } 143 144 func (cliConnection *cliConnection) Username() (string, error) { 145 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 146 if err != nil { 147 return "", err 148 } 149 150 var result string 151 152 err = client.Call("CliRpcCmd.Username", "", &result) 153 return result, err 154 } 155 156 func (cliConnection *cliConnection) UserGuid() (string, error) { 157 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 158 if err != nil { 159 return "", err 160 } 161 162 var result string 163 164 err = client.Call("CliRpcCmd.UserGuid", "", &result) 165 return result, err 166 } 167 168 func (cliConnection *cliConnection) UserEmail() (string, error) { 169 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 170 if err != nil { 171 return "", err 172 } 173 174 var result string 175 176 err = client.Call("CliRpcCmd.UserEmail", "", &result) 177 return result, err 178 } 179 180 func (cliConnection *cliConnection) IsSSLDisabled() (bool, error) { 181 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 182 if err != nil { 183 return false, err 184 } 185 186 var result bool 187 188 err = client.Call("CliRpcCmd.IsSSLDisabled", "", &result) 189 return result, err 190 } 191 192 func (cliConnection *cliConnection) IsLoggedIn() (bool, error) { 193 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 194 if err != nil { 195 return false, err 196 } 197 198 var result bool 199 200 err = client.Call("CliRpcCmd.IsLoggedIn", "", &result) 201 return result, err 202 } 203 204 func (cliConnection *cliConnection) HasOrganization() (bool, error) { 205 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 206 if err != nil { 207 return false, err 208 } 209 210 var result bool 211 212 err = client.Call("CliRpcCmd.HasOrganization", "", &result) 213 return result, err 214 } 215 216 func (cliConnection *cliConnection) HasSpace() (bool, error) { 217 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 218 if err != nil { 219 return false, err 220 } 221 222 var result bool 223 224 err = client.Call("CliRpcCmd.HasSpace", "", &result) 225 return result, err 226 } 227 228 func (cliConnection *cliConnection) ApiEndpoint() (string, error) { 229 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 230 if err != nil { 231 return "", err 232 } 233 234 var result string 235 236 err = client.Call("CliRpcCmd.ApiEndpoint", "", &result) 237 return result, err 238 } 239 240 func (cliConnection *cliConnection) HasAPIEndpoint() (bool, error) { 241 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 242 if err != nil { 243 return false, err 244 } 245 246 var result bool 247 248 err = client.Call("CliRpcCmd.HasAPIEndpoint", "", &result) 249 return result, err 250 } 251 252 func (cliConnection *cliConnection) ApiVersion() (string, error) { 253 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 254 if err != nil { 255 return "", err 256 } 257 258 var result string 259 260 err = client.Call("CliRpcCmd.ApiVersion", "", &result) 261 return result, err 262 } 263 264 func (cliConnection *cliConnection) LoggregatorEndpoint() (string, error) { 265 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 266 if err != nil { 267 return "", err 268 } 269 270 var result string 271 272 err = client.Call("CliRpcCmd.LoggregatorEndpoint", "", &result) 273 return result, err 274 } 275 276 func (cliConnection *cliConnection) DopplerEndpoint() (string, error) { 277 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 278 if err != nil { 279 return "", err 280 } 281 282 var result string 283 284 err = client.Call("CliRpcCmd.DopplerEndpoint", "", &result) 285 return result, err 286 } 287 288 func (cliConnection *cliConnection) AccessToken() (string, error) { 289 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 290 if err != nil { 291 return "", err 292 } 293 294 var result string 295 296 err = client.Call("CliRpcCmd.AccessToken", "", &result) 297 return result, err 298 } 299 300 func (cliConnection *cliConnection) GetApp(appName string) (plugin_models.GetAppModel, error) { 301 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 302 if err != nil { 303 return plugin_models.GetAppModel{}, err 304 } 305 306 var result plugin_models.GetAppModel 307 308 err = client.Call("CliRpcCmd.GetApp", appName, &result) 309 return result, err 310 } 311 312 func (cliConnection *cliConnection) GetApps() ([]plugin_models.GetAppsModel, error) { 313 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 314 if err != nil { 315 return []plugin_models.GetAppsModel{}, err 316 } 317 318 var result []plugin_models.GetAppsModel 319 320 err = client.Call("CliRpcCmd.GetApps", "", &result) 321 return result, err 322 } 323 324 func (cliConnection *cliConnection) GetOrgs() ([]plugin_models.GetOrgs_Model, error) { 325 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 326 if err != nil { 327 return []plugin_models.GetOrgs_Model{}, err 328 } 329 330 var result []plugin_models.GetOrgs_Model 331 332 err = client.Call("CliRpcCmd.GetOrgs", "", &result) 333 return result, err 334 } 335 336 func (cliConnection *cliConnection) GetSpaces() ([]plugin_models.GetSpaces_Model, error) { 337 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 338 if err != nil { 339 return []plugin_models.GetSpaces_Model{}, err 340 } 341 342 var result []plugin_models.GetSpaces_Model 343 344 err = client.Call("CliRpcCmd.GetSpaces", "", &result) 345 return result, err 346 } 347 348 func (cliConnection *cliConnection) GetServices() ([]plugin_models.GetServices_Model, error) { 349 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 350 if err != nil { 351 return []plugin_models.GetServices_Model{}, err 352 } 353 354 var result []plugin_models.GetServices_Model 355 356 err = client.Call("CliRpcCmd.GetServices", "", &result) 357 return result, err 358 } 359 360 func (cliConnection *cliConnection) GetOrgUsers(orgName string, args ...string) ([]plugin_models.GetOrgUsers_Model, error) { 361 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 362 if err != nil { 363 return []plugin_models.GetOrgUsers_Model{}, err 364 } 365 366 var result []plugin_models.GetOrgUsers_Model 367 368 cmdArgs := append([]string{orgName}, args...) 369 370 err = client.Call("CliRpcCmd.GetOrgUsers", cmdArgs, &result) 371 return result, err 372 } 373 374 func (cliConnection *cliConnection) GetSpaceUsers(orgName string, spaceName string) ([]plugin_models.GetSpaceUsers_Model, error) { 375 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 376 if err != nil { 377 return []plugin_models.GetSpaceUsers_Model{}, err 378 } 379 380 var result []plugin_models.GetSpaceUsers_Model 381 382 cmdArgs := []string{orgName, spaceName} 383 384 err = client.Call("CliRpcCmd.GetSpaceUsers", cmdArgs, &result) 385 return result, err 386 } 387 388 func (cliConnection *cliConnection) GetOrg(orgName string) (plugin_models.GetOrg_Model, error) { 389 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 390 if err != nil { 391 return plugin_models.GetOrg_Model{}, err 392 } 393 394 var result plugin_models.GetOrg_Model 395 396 err = client.Call("CliRpcCmd.GetOrg", orgName, &result) 397 return result, err 398 } 399 400 func (cliConnection *cliConnection) GetSpace(spaceName string) (plugin_models.GetSpace_Model, error) { 401 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 402 if err != nil { 403 return plugin_models.GetSpace_Model{}, err 404 } 405 406 var result plugin_models.GetSpace_Model 407 408 err = client.Call("CliRpcCmd.GetSpace", spaceName, &result) 409 return result, err 410 } 411 412 func (cliConnection *cliConnection) GetService(serviceInstance string) (plugin_models.GetService_Model, error) { 413 client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) 414 if err != nil { 415 return plugin_models.GetService_Model{}, err 416 } 417 418 var result plugin_models.GetService_Model 419 420 err = client.Call("CliRpcCmd.GetService", serviceInstance, &result) 421 return result, err 422 }