github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/command/env_select.go (about)

     1  package command
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/mitchellh/cli"
     8  )
     9  
    10  type EnvSelectCommand struct {
    11  	Meta
    12  }
    13  
    14  func (c *EnvSelectCommand) Run(args []string) int {
    15  	args = c.Meta.process(args, true)
    16  
    17  	cmdFlags := c.Meta.flagSet("env select")
    18  	cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
    19  	if err := cmdFlags.Parse(args); err != nil {
    20  		return 1
    21  	}
    22  	args = cmdFlags.Args()
    23  	if len(args) == 0 {
    24  		c.Ui.Error("Expected a single argument: NAME.\n")
    25  		return cli.RunResultHelp
    26  	}
    27  
    28  	configPath, err := ModulePath(args[1:])
    29  	if err != nil {
    30  		c.Ui.Error(err.Error())
    31  		return 1
    32  	}
    33  
    34  	// Load the backend
    35  	b, err := c.Backend(&BackendOpts{ConfigPath: configPath})
    36  	if err != nil {
    37  		c.Ui.Error(fmt.Sprintf("Failed to load backend: %s", err))
    38  		return 1
    39  	}
    40  
    41  	name := args[0]
    42  
    43  	states, err := b.States()
    44  	if err != nil {
    45  		c.Ui.Error(err.Error())
    46  		return 1
    47  	}
    48  
    49  	if name == c.Env() {
    50  		// already using this env
    51  		return 0
    52  	}
    53  
    54  	found := false
    55  	for _, s := range states {
    56  		if name == s {
    57  			found = true
    58  			break
    59  		}
    60  	}
    61  
    62  	if !found {
    63  		c.Ui.Error(fmt.Sprintf(envDoesNotExist, name))
    64  		return 1
    65  	}
    66  
    67  	err = c.SetEnv(name)
    68  	if err != nil {
    69  		c.Ui.Error(err.Error())
    70  		return 1
    71  	}
    72  
    73  	c.Ui.Output(
    74  		c.Colorize().Color(
    75  			fmt.Sprintf(envChanged, name),
    76  		),
    77  	)
    78  
    79  	return 0
    80  }
    81  
    82  func (c *EnvSelectCommand) Help() string {
    83  	helpText := `
    84  Usage: terraform env select NAME [DIR]
    85  
    86    Change Terraform environment.
    87  `
    88  	return strings.TrimSpace(helpText)
    89  }
    90  
    91  func (c *EnvSelectCommand) Synopsis() string {
    92  	return "Change environments"
    93  }