Browse Source

etcdctlv3: separate out cmd parsing logic for creating client

Xiang Li 9 years ago
parent
commit
d78cff2c4a

+ 1 - 1
etcdctlv3/command/compaction_command.go

@@ -43,7 +43,7 @@ func compactionCommandFunc(cmd *cobra.Command, args []string) {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}
 
 
-	c := mustClient(cmd)
+	c := mustClientFromCmd(cmd)
 	if cerr := clientv3.NewKV(c).Compact(context.TODO(), rev); cerr != nil {
 	if cerr := clientv3.NewKV(c).Compact(context.TODO(), rev); cerr != nil {
 		ExitWithError(ExitError, cerr)
 		ExitWithError(ExitError, cerr)
 		return
 		return

+ 1 - 1
etcdctlv3/command/delete_range_command.go

@@ -44,7 +44,7 @@ func deleteRangeCommandFunc(cmd *cobra.Command, args []string) {
 	}
 	}
 
 
 	req := &pb.DeleteRangeRequest{Key: key, RangeEnd: rangeEnd}
 	req := &pb.DeleteRangeRequest{Key: key, RangeEnd: rangeEnd}
-	mustClient(cmd).KV.DeleteRange(context.Background(), req)
+	mustClientFromCmd(cmd).KV.DeleteRange(context.Background(), req)
 
 
 	if rangeEnd != nil {
 	if rangeEnd != nil {
 		fmt.Printf("range [%s, %s) is deleted\n", string(key), string(rangeEnd))
 		fmt.Printf("range [%s, %s) is deleted\n", string(key), string(rangeEnd))

+ 29 - 12
etcdctlv3/command/global.go

@@ -32,35 +32,52 @@ type GlobalFlags struct {
 	TLS       transport.TLSInfo
 	TLS       transport.TLSInfo
 }
 }
 
 
-func mustClient(cmd *cobra.Command) *clientv3.Client {
+func mustClientFromCmd(cmd *cobra.Command) *clientv3.Client {
 	endpoint, err := cmd.Flags().GetString("endpoint")
 	endpoint, err := cmd.Flags().GetString("endpoint")
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}
 
 
+	var cert, key, cacert string
+	if cert, err = cmd.Flags().GetString("cert"); err != nil {
+		ExitWithError(ExitBadArgs, err)
+	} else if cert == "" && cmd.Flags().Changed("cert") {
+		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --cert option"))
+	}
+
+	if key, err = cmd.Flags().GetString("key"); err != nil {
+		ExitWithError(ExitBadArgs, err)
+	} else if key == "" && cmd.Flags().Changed("key") {
+		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --key option"))
+	}
+
+	if cacert, err = cmd.Flags().GetString("cacert"); err != nil {
+		ExitWithError(ExitBadArgs, err)
+	} else if cacert == "" && cmd.Flags().Changed("cacert") {
+		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --cacert option"))
+	}
+
+	return mustClient(endpoint, cert, key, cacert)
+}
+
+func mustClient(endpoint, cert, key, cacert string) *clientv3.Client {
 	// set tls if any one tls option set
 	// set tls if any one tls option set
 	var cfgtls *transport.TLSInfo
 	var cfgtls *transport.TLSInfo
 	tls := transport.TLSInfo{}
 	tls := transport.TLSInfo{}
 	var file string
 	var file string
-	if file, err = cmd.Flags().GetString("cert"); err == nil && file != "" {
-		tls.CertFile = file
+	if cert != "" {
+		tls.CertFile = cert
 		cfgtls = &tls
 		cfgtls = &tls
-	} else if cmd.Flags().Changed("cert") {
-		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --cert option"))
 	}
 	}
 
 
-	if file, err = cmd.Flags().GetString("key"); err == nil && file != "" {
-		tls.KeyFile = file
+	if key != "" {
+		tls.KeyFile = key
 		cfgtls = &tls
 		cfgtls = &tls
-	} else if cmd.Flags().Changed("key") {
-		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --key option"))
 	}
 	}
 
 
-	if file, err = cmd.Flags().GetString("cacert"); err == nil && file != "" {
+	if cacert != "" {
 		tls.CAFile = file
 		tls.CAFile = file
 		cfgtls = &tls
 		cfgtls = &tls
-	} else if cmd.Flags().Changed("cacert") {
-		ExitWithError(ExitBadArgs, errors.New("empty string is passed to --cacert option"))
 	}
 	}
 
 
 	cfg := clientv3.Config{
 	cfg := clientv3.Config{

+ 3 - 3
etcdctlv3/command/lease_command.go

@@ -62,7 +62,7 @@ func leaseCreateCommandFunc(cmd *cobra.Command, args []string) {
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad TTL (%v)", err))
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad TTL (%v)", err))
 	}
 	}
 
 
-	c := mustClient(cmd)
+	c := mustClientFromCmd(cmd)
 	l := clientv3.NewLease(c)
 	l := clientv3.NewLease(c)
 	resp, err := l.Create(context.TODO(), ttl)
 	resp, err := l.Create(context.TODO(), ttl)
 	if err != nil {
 	if err != nil {
@@ -95,7 +95,7 @@ func leaseRevokeCommandFunc(cmd *cobra.Command, args []string) {
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad lease ID arg (%v), expecting ID in Hex", err))
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad lease ID arg (%v), expecting ID in Hex", err))
 	}
 	}
 
 
-	c := mustClient(cmd)
+	c := mustClientFromCmd(cmd)
 	l := clientv3.NewLease(c)
 	l := clientv3.NewLease(c)
 	_, err = l.Revoke(context.TODO(), lease.LeaseID(id))
 	_, err = l.Revoke(context.TODO(), lease.LeaseID(id))
 	if err != nil {
 	if err != nil {
@@ -128,7 +128,7 @@ func leaseKeepAliveCommandFunc(cmd *cobra.Command, args []string) {
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad lease ID arg (%v), expecting ID in Hex", err))
 		ExitWithError(ExitBadArgs, fmt.Errorf("bad lease ID arg (%v), expecting ID in Hex", err))
 	}
 	}
 
 
-	c := mustClient(cmd)
+	c := mustClientFromCmd(cmd)
 	l := clientv3.NewLease(c)
 	l := clientv3.NewLease(c)
 	respc, kerr := l.KeepAlive(context.TODO(), lease.LeaseID(id))
 	respc, kerr := l.KeepAlive(context.TODO(), lease.LeaseID(id))
 	if kerr != nil {
 	if kerr != nil {

+ 4 - 4
etcdctlv3/command/member_command.go

@@ -109,7 +109,7 @@ func memberAddCommandFunc(cmd *cobra.Command, args []string) {
 	urls := strings.Split(memberPeerURLs, ",")
 	urls := strings.Split(memberPeerURLs, ",")
 
 
 	req := &pb.MemberAddRequest{PeerURLs: urls}
 	req := &pb.MemberAddRequest{PeerURLs: urls}
-	resp, err := mustClient(cmd).Cluster.MemberAdd(context.TODO(), req)
+	resp, err := mustClientFromCmd(cmd).Cluster.MemberAdd(context.TODO(), req)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}
@@ -129,7 +129,7 @@ func memberRemoveCommandFunc(cmd *cobra.Command, args []string) {
 	}
 	}
 
 
 	req := &pb.MemberRemoveRequest{ID: uint64(id)}
 	req := &pb.MemberRemoveRequest{ID: uint64(id)}
-	resp, err := mustClient(cmd).Cluster.MemberRemove(context.TODO(), req)
+	resp, err := mustClientFromCmd(cmd).Cluster.MemberRemove(context.TODO(), req)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}
@@ -155,7 +155,7 @@ func memberUpdateCommandFunc(cmd *cobra.Command, args []string) {
 	urls := strings.Split(memberPeerURLs, ",")
 	urls := strings.Split(memberPeerURLs, ",")
 
 
 	req := &pb.MemberUpdateRequest{ID: uint64(id), PeerURLs: urls}
 	req := &pb.MemberUpdateRequest{ID: uint64(id), PeerURLs: urls}
-	resp, err := mustClient(cmd).Cluster.MemberUpdate(context.TODO(), req)
+	resp, err := mustClientFromCmd(cmd).Cluster.MemberUpdate(context.TODO(), req)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}
@@ -165,7 +165,7 @@ func memberUpdateCommandFunc(cmd *cobra.Command, args []string) {
 
 
 // memberListCommandFunc executes the "member list" command.
 // memberListCommandFunc executes the "member list" command.
 func memberListCommandFunc(cmd *cobra.Command, args []string) {
 func memberListCommandFunc(cmd *cobra.Command, args []string) {
-	resp, err := mustClient(cmd).Cluster.MemberList(context.TODO(), &pb.MemberListRequest{})
+	resp, err := mustClientFromCmd(cmd).Cluster.MemberList(context.TODO(), &pb.MemberListRequest{})
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}

+ 1 - 1
etcdctlv3/command/put_command.go

@@ -71,7 +71,7 @@ func putCommandFunc(cmd *cobra.Command, args []string) {
 	}
 	}
 
 
 	req := &pb.PutRequest{Key: key, Value: value, Lease: id}
 	req := &pb.PutRequest{Key: key, Value: value, Lease: id}
-	_, err = mustClient(cmd).KV.Put(context.Background(), req)
+	_, err = mustClientFromCmd(cmd).KV.Put(context.Background(), req)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}

+ 1 - 1
etcdctlv3/command/range_command.go

@@ -93,7 +93,7 @@ func rangeCommandFunc(cmd *cobra.Command, args []string) {
 		SortTarget: sortByTarget,
 		SortTarget: sortByTarget,
 		Limit:      int64(rangeLimit),
 		Limit:      int64(rangeLimit),
 	}
 	}
-	resp, err := mustClient(cmd).KV.Range(context.Background(), req)
+	resp, err := mustClientFromCmd(cmd).KV.Range(context.Background(), req)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}

+ 2 - 2
etcdctlv3/command/snapshot_command.go

@@ -40,9 +40,9 @@ func NewSnapshotCommand() *cobra.Command {
 func snapshotCommandFunc(cmd *cobra.Command, args []string) {
 func snapshotCommandFunc(cmd *cobra.Command, args []string) {
 	switch {
 	switch {
 	case len(args) == 0:
 	case len(args) == 0:
-		snapshotToStdout(mustClient(cmd))
+		snapshotToStdout(mustClientFromCmd(cmd))
 	case len(args) == 1:
 	case len(args) == 1:
-		snapshotToFile(mustClient(cmd), args[0])
+		snapshotToFile(mustClientFromCmd(cmd), args[0])
 	default:
 	default:
 		err := fmt.Errorf("snapshot takes at most one argument")
 		err := fmt.Errorf("snapshot takes at most one argument")
 		ExitWithError(ExitBadArgs, err)
 		ExitWithError(ExitBadArgs, err)

+ 1 - 1
etcdctlv3/command/txn_command.go

@@ -49,7 +49,7 @@ func txnCommandFunc(cmd *cobra.Command, args []string) {
 		next = next(txn, reader)
 		next = next(txn, reader)
 	}
 	}
 
 
-	resp, err := mustClient(cmd).KV.Txn(context.Background(), txn)
+	resp, err := mustClientFromCmd(cmd).KV.Txn(context.Background(), txn)
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitError, err)
 		ExitWithError(ExitError, err)
 	}
 	}

+ 1 - 1
etcdctlv3/command/watch_command.go

@@ -38,7 +38,7 @@ func NewWatchCommand() *cobra.Command {
 
 
 // watchCommandFunc executes the "watch" command.
 // watchCommandFunc executes the "watch" command.
 func watchCommandFunc(cmd *cobra.Command, args []string) {
 func watchCommandFunc(cmd *cobra.Command, args []string) {
-	wStream, err := mustClient(cmd).Watch.Watch(context.TODO())
+	wStream, err := mustClientFromCmd(cmd).Watch.Watch(context.TODO())
 	if err != nil {
 	if err != nil {
 		ExitWithError(ExitBadConnection, err)
 		ExitWithError(ExitBadConnection, err)
 	}
 	}