From 7b1402b104e73fd561f5ac4dd1da488306c9749f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 21:28:31 -0700 Subject: [PATCH] command/mounts --- command/mounts.go | 92 ++++++++++++++++++++++++++++++++++++++++++ command/mounts_test.go | 29 +++++++++++++ commands.go | 6 +++ 3 files changed, 127 insertions(+) create mode 100644 command/mounts.go create mode 100644 command/mounts_test.go diff --git a/command/mounts.go b/command/mounts.go new file mode 100644 index 000000000..f6988f0ec --- /dev/null +++ b/command/mounts.go @@ -0,0 +1,92 @@ +package command + +import ( + "bufio" + "bytes" + "fmt" + "sort" + "strings" +) + +// MountsCommand is a Command that lists the mounts. +type MountsCommand struct { + Meta +} + +func (c *MountsCommand) Run(args []string) int { + flags := c.Meta.FlagSet("mounts", FlagSetDefault) + flags.Usage = func() { c.Ui.Error(c.Help()) } + if err := flags.Parse(args); err != nil { + return 1 + } + + client, err := c.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error initializing client: %s", err)) + return 2 + } + + mounts, err := client.Sys().ListMounts() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error reading mounts: %s", err)) + return 2 + } + + paths := make([]string, 0, len(mounts)) + for path, _ := range mounts { + paths = append(paths, path) + } + sort.Strings(paths) + + for _, path := range paths { + mount := mounts[path] + + var desc bytes.Buffer + s := bufio.NewScanner(strings.NewReader(mount.Description)) + for s.Scan() { + desc.WriteString(" " + s.Text()) + } + + c.Ui.Output(fmt.Sprintf( + "%s (type: %s)\n%s\n", + path, + mount.Type, + desc.String())) + } + + return 0 +} + +func (c *MountsCommand) Synopsis() string { + return "Lists mounted backends in Vault" +} + +func (c *MountsCommand) Help() string { + helpText := ` +Usage: vault mounts [options] + + Outputs information about the mounted backends. + + This command lists the mounted backends, their mount points, and + a human-friendly description of the mount point. + +General Options: + + -address=TODO The address of the Vault server. + + -ca-cert=path Path to a PEM encoded CA cert file to use to + verify the Vault server SSL certificate. + + -ca-path=path Path to a directory of PEM encoded CA cert files + to verify the Vault server SSL certificate. If both + -ca-cert and -ca-path are specified, -ca-path is used. + + -insecure Do not verify TLS certificate. This is highly + not recommended. This is especially not recommended + for unsealing a vault. + +` + return strings.TrimSpace(helpText) +} diff --git a/command/mounts_test.go b/command/mounts_test.go new file mode 100644 index 000000000..5cc60c82e --- /dev/null +++ b/command/mounts_test.go @@ -0,0 +1,29 @@ +package command + +import ( + "testing" + + "github.com/hashicorp/vault/http" + "github.com/hashicorp/vault/vault" + "github.com/mitchellh/cli" +) + +func TestMounts(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + ui := new(cli.MockUi) + c := &MountsCommand{ + Meta: Meta{ + Ui: ui, + }, + } + + args := []string{ + "-address", addr, + } + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } +} diff --git a/commands.go b/commands.go index ebaf2689e..7931ce3d5 100644 --- a/commands.go +++ b/commands.go @@ -66,6 +66,12 @@ func init() { }, nil }, + "mounts": func() (cli.Command, error) { + return &command.MountsCommand{ + Meta: meta, + }, nil + }, + "version": func() (cli.Command, error) { ver := Version rel := VersionPrerelease