github.com/cloudfoundry/cli@v7.1.0+incompatible/plugin/plugin_examples/basic_plugin.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"code.cloudfoundry.org/cli/plugin"
     7  )
     8  
     9  // BasicPlugin is the struct implementing the interface defined by the core CLI. It can
    10  // be found at  "code.cloudfoundry.org/cli/plugin/plugin.go"
    11  type BasicPlugin struct{}
    12  
    13  // Run must be implemented by any plugin because it is part of the
    14  // plugin interface defined by the core CLI.
    15  //
    16  // Run(....) is the entry point when the core CLI is invoking a command defined
    17  // by a plugin. The first parameter, plugin.CliConnection, is a struct that can
    18  // be used to invoke cli commands. The second paramter, args, is a slice of
    19  // strings. args[0] will be the name of the command, and will be followed by
    20  // any additional arguments a cli user typed in.
    21  //
    22  // Any error handling should be handled with the plugin itself (this means printing
    23  // user facing errors). The CLI will exit 0 if the plugin exits 0 and will exit
    24  // 1 should the plugin exits nonzero.
    25  func (c *BasicPlugin) Run(cliConnection plugin.CliConnection, args []string) {
    26  	// Ensure that we called the command basic-plugin-command
    27  	if args[0] == "basic-plugin-command" {
    28  		fmt.Println("Running the basic-plugin-command")
    29  	}
    30  }
    31  
    32  // GetMetadata must be implemented as part of the plugin interface
    33  // defined by the core CLI.
    34  //
    35  // GetMetadata() returns a PluginMetadata struct. The first field, Name,
    36  // determines the name of the plugin which should generally be without spaces.
    37  // If there are spaces in the name a user will need to properly quote the name
    38  // during uninstall otherwise the name will be treated as seperate arguments.
    39  // The second value is a slice of Command structs. Our slice only contains one
    40  // Command Struct, but could contain any number of them. The first field Name
    41  // defines the command `cf basic-plugin-command` once installed into the CLI. The
    42  // second field, HelpText, is used by the core CLI to display help information
    43  // to the user in the core commands `cf help`, `cf`, or `cf -h`.
    44  func (c *BasicPlugin) GetMetadata() plugin.PluginMetadata {
    45  	return plugin.PluginMetadata{
    46  		Name: "MyBasicPlugin",
    47  		Version: plugin.VersionType{
    48  			Major: 1,
    49  			Minor: 0,
    50  			Build: 0,
    51  		},
    52  		MinCliVersion: plugin.VersionType{
    53  			Major: 6,
    54  			Minor: 7,
    55  			Build: 0,
    56  		},
    57  		Commands: []plugin.Command{
    58  			{
    59  				Name:     "basic-plugin-command",
    60  				HelpText: "Basic plugin command's help text",
    61  
    62  				// UsageDetails is optional
    63  				// It is used to show help of usage of each command
    64  				UsageDetails: plugin.Usage{
    65  					Usage: "basic-plugin-command\n   cf basic-plugin-command",
    66  				},
    67  			},
    68  		},
    69  	}
    70  }
    71  
    72  // Unlike most Go programs, the `Main()` function will not be used to run all of the
    73  // commands provided in your plugin. Main will be used to initialize the plugin
    74  // process, as well as any dependencies you might require for your
    75  // plugin.
    76  func main() {
    77  	// Any initialization for your plugin can be handled here
    78  	//
    79  	// Note: to run the plugin.Start method, we pass in a pointer to the struct
    80  	// implementing the interface defined at "code.cloudfoundry.org/cli/plugin/plugin.go"
    81  	//
    82  	// Note: The plugin's main() method is invoked at install time to collect
    83  	// metadata. The plugin will exit 0 and the Run([]string) method will not be
    84  	// invoked.
    85  	plugin.Start(new(BasicPlugin))
    86  	// Plugin code should be written in the Run([]string) method,
    87  	// ensuring the plugin environment is bootstrapped.
    88  }