2016-10-31 23:37:27 +00:00
|
|
|
package command
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
"text/tabwriter"
|
|
|
|
|
2017-02-10 01:00:38 +00:00
|
|
|
"github.com/hashicorp/consul/command/base"
|
2016-11-04 04:36:25 +00:00
|
|
|
"github.com/hashicorp/consul/snapshot"
|
2016-10-31 23:37:27 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// SnapshotInspectCommand is a Command implementation that is used to display
|
|
|
|
// metadata about a snapshot file
|
|
|
|
type SnapshotInspectCommand struct {
|
2017-02-10 01:00:38 +00:00
|
|
|
base.Command
|
2016-10-31 23:37:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c *SnapshotInspectCommand) Help() string {
|
|
|
|
helpText := `
|
|
|
|
Usage: consul snapshot inspect [options] FILE
|
|
|
|
|
|
|
|
Displays information about a snapshot file on disk.
|
|
|
|
|
|
|
|
To inspect the file "backup.snap":
|
|
|
|
|
|
|
|
$ consul snapshot inspect backup.snap
|
|
|
|
|
|
|
|
For a full list of options and examples, please see the Consul documentation.
|
|
|
|
`
|
|
|
|
|
|
|
|
return strings.TrimSpace(helpText)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *SnapshotInspectCommand) Run(args []string) int {
|
2017-02-10 01:00:38 +00:00
|
|
|
flagSet := c.Command.NewFlagSet(c)
|
|
|
|
|
|
|
|
if err := c.Command.Parse(args); err != nil {
|
2016-10-31 23:37:27 +00:00
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
var file string
|
|
|
|
|
2017-02-10 01:00:38 +00:00
|
|
|
args = flagSet.Args()
|
2016-10-31 23:37:27 +00:00
|
|
|
switch len(args) {
|
|
|
|
case 0:
|
|
|
|
c.Ui.Error("Missing FILE argument")
|
|
|
|
return 1
|
|
|
|
case 1:
|
|
|
|
file = args[0]
|
|
|
|
default:
|
|
|
|
c.Ui.Error(fmt.Sprintf("Too many arguments (expected 1, got %d)", len(args)))
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
// Open the file.
|
|
|
|
f, err := os.Open(file)
|
|
|
|
if err != nil {
|
|
|
|
c.Ui.Error(fmt.Sprintf("Error opening snapshot file: %s", err))
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
|
|
|
|
meta, err := snapshot.Verify(f)
|
|
|
|
if err != nil {
|
|
|
|
c.Ui.Error(fmt.Sprintf("Error verifying snapshot: %s", err))
|
|
|
|
}
|
|
|
|
|
|
|
|
var b bytes.Buffer
|
|
|
|
tw := tabwriter.NewWriter(&b, 0, 2, 6, ' ', 0)
|
|
|
|
fmt.Fprintf(tw, "ID\t%s\n", meta.ID)
|
|
|
|
fmt.Fprintf(tw, "Size\t%d\n", meta.Size)
|
|
|
|
fmt.Fprintf(tw, "Index\t%d\n", meta.Index)
|
|
|
|
fmt.Fprintf(tw, "Term\t%d\n", meta.Term)
|
|
|
|
fmt.Fprintf(tw, "Version\t%d\n", meta.Version)
|
|
|
|
if err = tw.Flush(); err != nil {
|
|
|
|
c.Ui.Error(fmt.Sprintf("Error rendering snapshot info: %s", err))
|
|
|
|
}
|
|
|
|
|
|
|
|
c.Ui.Info(b.String())
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *SnapshotInspectCommand) Synopsis() string {
|
|
|
|
return "Displays information about a Consul snapshot file"
|
|
|
|
}
|