Add `terraform state list` command

This introduces the terraform state list command to list the resources
within a state. This is the first of many state management commands to
come into 0.7.

This is the first command of many to come that is considered a
"plumbing" command within Terraform (see "plumbing vs porcelain":
http://git.661346.n2.nabble.com/what-are-plumbing-and-porcelain-td2190639.html).
As such, this PR also introduces a bunch of groundwork to support
plumbing commands.

The main changes:

- Main command output is changed to split "common" and "uncommon"
  commands.

- mitchellh/cli is updated to support nested subcommands, since
  terraform state list is a nested subcommand.

- terraform.StateFilter is introduced as a way in core to filter/search
  the state files. This is very basic currently but I expect to make it
  more advanced as time goes on.

- terraform state list command is introduced to list resources in a
  state. This can take a series of arguments to filter this down.

Known issues, or things that aren't done in this PR on purpose:

- Unit tests for terraform state list are on the way. Unit tests for the
  core changes are all there.
This commit is contained in:
Mitchell Hashimoto 2016-03-22 10:41:02 -07:00 committed by James Nugent
parent e81fb10e61
commit 473a58a672
2 changed files with 6 additions and 6 deletions

View File

@ -54,19 +54,19 @@ func (c *StateListCommand) Run(args []string) int {
func (c *StateListCommand) Help() string { func (c *StateListCommand) Help() string {
helpText := ` helpText := `
Usage: terraform state list [options] [address...] Usage: terraform state list [options] [pattern...]
List resources in the Terraform state. List resources in the Terraform state.
This command lists resources in the Terraform state. The address argument This command lists resources in the Terraform state. The pattern argument
can be used to filter the resources by resource or module. If no address can be used to filter the resources by resource or module. If no pattern
is given, all resources are listed. is given, all resources are listed.
The address argument is meant to provide very simple filtering. For The pattern argument is meant to provide very simple filtering. For
advanced filtering, please use tools such as "grep". The output of this advanced filtering, please use tools such as "grep". The output of this
command is designed to be friendly for this usage. command is designed to be friendly for this usage.
The address argument accepts any resource targeting syntax. Please The pattern argument accepts any resource targeting syntax. Please
refer to the documentation on resource targeting syntax for more refer to the documentation on resource targeting syntax for more
information. information.

View File

@ -24,7 +24,7 @@ configuration are listed first, and resources that are more deeply nested
within modules are listed last. within modules are listed last.
For complex infrastructures, the state can contain thousands of resources. For complex infrastructures, the state can contain thousands of resources.
To filter these, provide one or more addresses to the command. Addresses are To filter these, provide one or more patterns to the command. Patterns are
in [resource addressing format](/docs/commands/state/addressing.html). in [resource addressing format](/docs/commands/state/addressing.html).
The command-line flags are all optional. The list of available flags are: The command-line flags are all optional. The list of available flags are: