github.com/pgray/terraform@v0.5.4-0.20170822184730-b6a464c5214d/command/workspace_list.go (about)

     1  package command
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  type WorkspaceListCommand struct {
    10  	Meta
    11  	LegacyName bool
    12  }
    13  
    14  func (c *WorkspaceListCommand) Run(args []string) int {
    15  	args, err := c.Meta.process(args, true)
    16  	if err != nil {
    17  		return 1
    18  	}
    19  
    20  	envCommandShowWarning(c.Ui, c.LegacyName)
    21  
    22  	cmdFlags := c.Meta.flagSet("workspace list")
    23  	cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
    24  	if err := cmdFlags.Parse(args); err != nil {
    25  		return 1
    26  	}
    27  
    28  	args = cmdFlags.Args()
    29  	configPath, err := ModulePath(args)
    30  	if err != nil {
    31  		c.Ui.Error(err.Error())
    32  		return 1
    33  	}
    34  
    35  	cfg, err := c.Config(configPath)
    36  	if err != nil {
    37  		c.Ui.Error(fmt.Sprintf("Failed to load root config module: %s", err))
    38  		return 1
    39  	}
    40  
    41  	// Load the backend
    42  	b, err := c.Backend(&BackendOpts{
    43  		Config: cfg,
    44  	})
    45  
    46  	if err != nil {
    47  		c.Ui.Error(fmt.Sprintf("Failed to load backend: %s", err))
    48  		return 1
    49  	}
    50  
    51  	states, err := b.States()
    52  	if err != nil {
    53  		c.Ui.Error(err.Error())
    54  		return 1
    55  	}
    56  
    57  	env, isOverridden := c.WorkspaceOverridden()
    58  
    59  	var out bytes.Buffer
    60  	for _, s := range states {
    61  		if s == env {
    62  			out.WriteString("* ")
    63  		} else {
    64  			out.WriteString("  ")
    65  		}
    66  		out.WriteString(s + "\n")
    67  	}
    68  
    69  	c.Ui.Output(out.String())
    70  
    71  	if isOverridden {
    72  		c.Ui.Output(envIsOverriddenNote)
    73  	}
    74  
    75  	return 0
    76  }
    77  
    78  func (c *WorkspaceListCommand) Help() string {
    79  	helpText := `
    80  Usage: terraform workspace list [DIR]
    81  
    82    List Terraform workspaces.
    83  `
    84  	return strings.TrimSpace(helpText)
    85  }
    86  
    87  func (c *WorkspaceListCommand) Synopsis() string {
    88  	return "List Workspaces"
    89  }