command/mounts

This commit is contained in:
Mitchell Hashimoto 2015-03-15 21:28:31 -07:00
parent 850349425a
commit 7b1402b104
3 changed files with 127 additions and 0 deletions

92
command/mounts.go Normal file
View File

@ -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)
}

29
command/mounts_test.go Normal file
View File

@ -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())
}
}

View File

@ -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