terraform/command/workspace_list.go

102 lines
1.9 KiB
Go
Raw Normal View History

2017-02-23 19:13:28 +01:00
package command
import (
"bytes"
"fmt"
2017-02-23 19:13:28 +01:00
"strings"
"github.com/hashicorp/terraform/tfdiags"
"github.com/posener/complete"
2017-02-23 19:13:28 +01:00
)
type WorkspaceListCommand struct {
2017-02-23 19:13:28 +01:00
Meta
LegacyName bool
2017-02-23 19:13:28 +01:00
}
func (c *WorkspaceListCommand) Run(args []string) int {
args = c.Meta.process(args)
envCommandShowWarning(c.Ui, c.LegacyName)
cmdFlags := c.Meta.defaultFlagSet("workspace list")
2017-02-23 19:13:28 +01:00
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
if err := cmdFlags.Parse(args); err != nil {
c.Ui.Error(fmt.Sprintf("Error parsing command-line flags: %s\n", err.Error()))
2017-02-23 19:13:28 +01:00
return 1
}
args = cmdFlags.Args()
configPath, err := ModulePath(args)
if err != nil {
c.Ui.Error(err.Error())
return 1
}
var diags tfdiags.Diagnostics
backendConfig, backendDiags := c.loadBackendConfig(configPath)
diags = diags.Append(backendDiags)
if diags.HasErrors() {
c.showDiagnostics(diags)
return 1
}
2017-02-23 19:13:28 +01:00
// Load the backend
b, backendDiags := c.Backend(&BackendOpts{
Config: backendConfig,
})
diags = diags.Append(backendDiags)
if backendDiags.HasErrors() {
c.showDiagnostics(diags)
2017-02-23 19:13:28 +01:00
return 1
}
states, err := b.Workspaces()
2017-02-23 19:13:28 +01:00
if err != nil {
c.Ui.Error(err.Error())
return 1
}
env, isOverridden := c.WorkspaceOverridden()
2017-02-23 19:13:28 +01:00
var out bytes.Buffer
for _, s := range states {
if s == env {
2017-02-23 19:13:28 +01:00
out.WriteString("* ")
} else {
out.WriteString(" ")
}
out.WriteString(s + "\n")
}
c.Ui.Output(out.String())
if isOverridden {
c.Ui.Output(envIsOverriddenNote)
}
2017-02-23 19:13:28 +01:00
return 0
}
func (c *WorkspaceListCommand) AutocompleteArgs() complete.Predictor {
return complete.PredictDirs("")
}
func (c *WorkspaceListCommand) AutocompleteFlags() complete.Flags {
return nil
}
func (c *WorkspaceListCommand) Help() string {
2017-02-23 19:13:28 +01:00
helpText := `
Usage: terraform workspace list [DIR]
2017-02-23 19:13:28 +01:00
List Terraform workspaces.
2017-02-23 19:13:28 +01:00
`
return strings.TrimSpace(helpText)
}
func (c *WorkspaceListCommand) Synopsis() string {
return "List Workspaces"
2017-02-23 19:13:28 +01:00
}