github.com/jrperritt/terraform@v0.1.1-0.20170525065507-96f391dafc38/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 if !validEnvName(name) { 43 c.Ui.Error(fmt.Sprintf(envInvalidName, name)) 44 return 1 45 } 46 47 states, err := b.States() 48 if err != nil { 49 c.Ui.Error(err.Error()) 50 return 1 51 } 52 53 if name == c.Env() { 54 // already using this env 55 return 0 56 } 57 58 found := false 59 for _, s := range states { 60 if name == s { 61 found = true 62 break 63 } 64 } 65 66 if !found { 67 c.Ui.Error(fmt.Sprintf(envDoesNotExist, name)) 68 return 1 69 } 70 71 err = c.SetEnv(name) 72 if err != nil { 73 c.Ui.Error(err.Error()) 74 return 1 75 } 76 77 c.Ui.Output( 78 c.Colorize().Color( 79 fmt.Sprintf(envChanged, name), 80 ), 81 ) 82 83 return 0 84 } 85 86 func (c *EnvSelectCommand) Help() string { 87 helpText := ` 88 Usage: terraform env select NAME [DIR] 89 90 Change Terraform environment. 91 ` 92 return strings.TrimSpace(helpText) 93 } 94 95 func (c *EnvSelectCommand) Synopsis() string { 96 return "Change environments" 97 }