@ -16,6 +16,7 @@ package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/spf13/cobra"
|
||||
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
|
||||
@ -23,13 +24,23 @@ import (
|
||||
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
||||
)
|
||||
|
||||
var (
|
||||
rangeLimit int
|
||||
rangeSortOrder string
|
||||
rangeSortTarget string
|
||||
)
|
||||
|
||||
// NewRangeCommand returns the cobra command for "range".
|
||||
func NewRangeCommand() *cobra.Command {
|
||||
return &cobra.Command{
|
||||
cmd := &cobra.Command{
|
||||
Use: "range",
|
||||
Short: "Range gets the keys in the range from the store.",
|
||||
Run: rangeCommandFunc,
|
||||
}
|
||||
cmd.Flags().StringVar(&rangeSortOrder, "order", "", "order of results; ASCEND or DESCEND")
|
||||
cmd.Flags().StringVar(&rangeSortTarget, "sort-by", "", "sort target; CREATE, KEY, MODIFY, VALUE, or VERSION")
|
||||
cmd.Flags().IntVar(&rangeLimit, "limit", 0, "maximum number of results")
|
||||
return cmd
|
||||
}
|
||||
|
||||
// rangeCommandFunc executes the "range" command.
|
||||
@ -48,13 +59,51 @@ func rangeCommandFunc(cmd *cobra.Command, args []string) {
|
||||
if err != nil {
|
||||
ExitWithError(ExitError, err)
|
||||
}
|
||||
|
||||
sortByOrder := pb.RangeRequest_NONE
|
||||
sortOrder := strings.ToUpper(rangeSortOrder)
|
||||
switch {
|
||||
case sortOrder == "ASCEND":
|
||||
sortByOrder = pb.RangeRequest_ASCEND
|
||||
case sortOrder == "DESCEND":
|
||||
sortByOrder = pb.RangeRequest_DESCEND
|
||||
case sortOrder == "":
|
||||
sortByOrder = pb.RangeRequest_NONE
|
||||
default:
|
||||
ExitWithError(ExitBadFeature, fmt.Errorf("bad sort order %v", rangeSortOrder))
|
||||
}
|
||||
|
||||
sortByTarget := pb.RangeRequest_KEY
|
||||
sortTarget := strings.ToUpper(rangeSortTarget)
|
||||
switch {
|
||||
case sortTarget == "CREATE":
|
||||
sortByTarget = pb.RangeRequest_CREATE
|
||||
case sortTarget == "KEY":
|
||||
sortByTarget = pb.RangeRequest_KEY
|
||||
case sortTarget == "MODIFY":
|
||||
sortByTarget = pb.RangeRequest_MOD
|
||||
case sortTarget == "VALUE":
|
||||
sortByTarget = pb.RangeRequest_VALUE
|
||||
case sortTarget == "VERSION":
|
||||
sortByTarget = pb.RangeRequest_VERSION
|
||||
case sortTarget == "":
|
||||
sortByTarget = pb.RangeRequest_KEY
|
||||
default:
|
||||
ExitWithError(ExitBadFeature, fmt.Errorf("bad sort target %v", rangeSortTarget))
|
||||
}
|
||||
|
||||
conn, err := grpc.Dial(endpoint)
|
||||
if err != nil {
|
||||
ExitWithError(ExitBadConnection, err)
|
||||
}
|
||||
kv := pb.NewKVClient(conn)
|
||||
req := &pb.RangeRequest{Key: key, RangeEnd: rangeEnd}
|
||||
|
||||
req := &pb.RangeRequest{
|
||||
Key: key,
|
||||
RangeEnd: rangeEnd,
|
||||
SortOrder: sortByOrder,
|
||||
SortTarget: sortByTarget,
|
||||
Limit: int64(rangeLimit),
|
||||
}
|
||||
resp, err := kv.Range(context.Background(), req)
|
||||
for _, kv := range resp.Kvs {
|
||||
fmt.Printf("%s %s\n", string(kv.Key), string(kv.Value))
|
||||
|
Reference in New Issue
Block a user