github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/cmd/juju/controller/getconfig.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package controller
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/errors"
    11  	"github.com/juju/gnuflag"
    12  
    13  	apicontroller "github.com/juju/juju/api/controller"
    14  	"github.com/juju/juju/cmd/modelcmd"
    15  	"github.com/juju/juju/cmd/output"
    16  	"github.com/juju/juju/controller"
    17  )
    18  
    19  func NewGetConfigCommand() cmd.Command {
    20  	return modelcmd.WrapController(&getConfigCommand{})
    21  }
    22  
    23  // getConfigCommand is able to output either the entire environment or
    24  // the requested value in a format of the user's choosing.
    25  type getConfigCommand struct {
    26  	modelcmd.ControllerCommandBase
    27  	api controllerAPI
    28  	key string
    29  	out cmd.Output
    30  }
    31  
    32  const getControllerHelpDoc = `
    33  By default, all configuration (keys and values) for the controller are
    34  displayed if a key is not specified.
    35  
    36  Examples:
    37  
    38      juju controller-config
    39      juju controller-config api-port
    40      juju controller-config -c mycontroller
    41  
    42  See also:
    43      controllers
    44  `
    45  
    46  func (c *getConfigCommand) Info() *cmd.Info {
    47  	return &cmd.Info{
    48  		Name:    "controller-config",
    49  		Args:    "[<attribute key>]",
    50  		Purpose: "Displays configuration settings for a controller.",
    51  		Doc:     strings.TrimSpace(getControllerHelpDoc),
    52  	}
    53  }
    54  
    55  func (c *getConfigCommand) SetFlags(f *gnuflag.FlagSet) {
    56  	c.ControllerCommandBase.SetFlags(f)
    57  	c.out.AddFlags(f, "yaml", output.DefaultFormatters)
    58  }
    59  
    60  func (c *getConfigCommand) Init(args []string) (err error) {
    61  	c.key, err = cmd.ZeroOrOneArgs(args)
    62  	return
    63  }
    64  
    65  type controllerAPI interface {
    66  	Close() error
    67  	ControllerConfig() (controller.Config, error)
    68  }
    69  
    70  func (c *getConfigCommand) getAPI() (controllerAPI, error) {
    71  	if c.api != nil {
    72  		return c.api, nil
    73  	}
    74  	root, err := c.NewAPIRoot()
    75  	if err != nil {
    76  		return nil, errors.Trace(err)
    77  	}
    78  	return apicontroller.NewClient(root), nil
    79  }
    80  
    81  func (c *getConfigCommand) Run(ctx *cmd.Context) error {
    82  	client, err := c.getAPI()
    83  	if err != nil {
    84  		return err
    85  	}
    86  	defer client.Close()
    87  
    88  	attrs, err := client.ControllerConfig()
    89  	if err != nil {
    90  		return err
    91  	}
    92  
    93  	if c.key != "" {
    94  		if value, found := attrs[c.key]; found {
    95  			return c.out.Write(ctx, value)
    96  		}
    97  		return errors.Errorf("key %q not found in %q controller.", c.key, c.ControllerName())
    98  	}
    99  	// If key is empty, write out the whole lot.
   100  	return c.out.Write(ctx, attrs)
   101  }