github.com/simonswine/terraform@v0.9.0-beta2/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 }