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  }