github.com/rvichery/terraform@v0.11.10/command/workspace_list.go (about)

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