opentofu/command/workspace_select.go

115 lines
1.9 KiB
Go
Raw Normal View History

2017-02-23 12:13:28 -06:00
package command
import (
"fmt"
"strings"
"github.com/mitchellh/cli"
)
type WorkspaceSelectCommand struct {
2017-02-23 12:13:28 -06:00
Meta
LegacyName bool
2017-02-23 12:13:28 -06:00
}
func (c *WorkspaceSelectCommand) Run(args []string) int {
2017-02-23 12:13:28 -06:00
args = c.Meta.process(args, true)
envCommandShowWarning(c.Ui, c.LegacyName)
cmdFlags := c.Meta.flagSet("workspace select")
2017-02-23 12:13:28 -06:00
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
if err := cmdFlags.Parse(args); err != nil {
return 1
}
args = cmdFlags.Args()
if len(args) == 0 {
c.Ui.Error("Expected a single argument: NAME.\n")
2017-02-23 12:13:28 -06:00
return cli.RunResultHelp
}
configPath, err := ModulePath(args[1:])
if err != nil {
c.Ui.Error(err.Error())
return 1
}
conf, err := c.Config(configPath)
if err != nil {
c.Ui.Error(fmt.Sprintf("Failed to load root config module: %s", err))
}
current, isOverridden := c.EnvOverridden()
if isOverridden {
c.Ui.Error(envIsOverriddenSelectError)
return 1
}
2017-02-23 12:13:28 -06:00
// Load the backend
b, err := c.Backend(&BackendOpts{
Config: conf,
})
2017-02-23 12:13:28 -06:00
if err != nil {
c.Ui.Error(fmt.Sprintf("Failed to load backend: %s", err))
return 1
}
name := args[0]
if !validEnvName(name) {
c.Ui.Error(fmt.Sprintf(envInvalidName, name))
return 1
}
2017-02-23 12:13:28 -06:00
states, err := b.States()
2017-02-23 12:13:28 -06:00
if err != nil {
c.Ui.Error(err.Error())
return 1
}
if name == current {
// already using this workspace
2017-02-23 12:13:28 -06:00
return 0
}
found := false
for _, s := range states {
if name == s {
found = true
break
}
}
if !found {
c.Ui.Error(fmt.Sprintf(envDoesNotExist, name))
return 1
}
err = c.SetEnv(name)
2017-02-23 12:13:28 -06:00
if err != nil {
c.Ui.Error(err.Error())
return 1
}
c.Ui.Output(
c.Colorize().Color(
fmt.Sprintf(envChanged, name),
),
)
return 0
}
func (c *WorkspaceSelectCommand) Help() string {
2017-02-23 12:13:28 -06:00
helpText := `
Usage: terraform workspace select NAME [DIR]
2017-02-23 12:13:28 -06:00
Select a different Terraform workspace.
2017-02-23 12:13:28 -06:00
`
return strings.TrimSpace(helpText)
}
func (c *WorkspaceSelectCommand) Synopsis() string {
return "Select a workspace"
2017-02-23 12:13:28 -06:00
}