github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/cmd/juju/endpoint.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"launchpad.net/gnuflag"
     8  
     9  	"launchpad.net/juju-core/cmd"
    10  	"launchpad.net/juju-core/environs"
    11  	"launchpad.net/juju-core/environs/configstore"
    12  )
    13  
    14  // EndpointCommand returns the API endpoints
    15  type EndpointCommand struct {
    16  	cmd.EnvCommandBase
    17  	out cmd.Output
    18  }
    19  
    20  const endpointDoc = `
    21  Returns a list of the API servers formatted as host:port
    22  Default output format returns an api server per line.
    23  
    24  Examples:
    25    $ juju api-endpoints
    26    10.0.3.1:17070
    27    $
    28  `
    29  
    30  func (c *EndpointCommand) Info() *cmd.Info {
    31  	return &cmd.Info{
    32  		Name:    "api-endpoints",
    33  		Args:    "",
    34  		Purpose: "Print the API server addresses",
    35  		Doc:     endpointDoc,
    36  	}
    37  }
    38  
    39  func (c *EndpointCommand) Init(args []string) error {
    40  	return cmd.CheckEmpty(args)
    41  }
    42  
    43  func (c *EndpointCommand) SetFlags(f *gnuflag.FlagSet) {
    44  	c.EnvCommandBase.SetFlags(f)
    45  	c.out.AddFlags(f, "smart", cmd.DefaultFormatters)
    46  }
    47  
    48  // Print out the addresses of the API server endpoints.
    49  func (c *EndpointCommand) Run(ctx *cmd.Context) error {
    50  	store, err := configstore.Default()
    51  	if err != nil {
    52  		return err
    53  	}
    54  	environ, err := environs.NewFromName(c.EnvName, store)
    55  	if err != nil {
    56  		return err
    57  	}
    58  	_, api_info, err := environ.StateInfo()
    59  	if err != nil {
    60  		return err
    61  	}
    62  	return c.out.Write(ctx, api_info.Addrs)
    63  }