From 6603a7756126c95357a12df8c5a35264ff61aae5 Mon Sep 17 00:00:00 2001 From: Dima Kurguzov Date: Thu, 27 Jul 2017 12:42:37 +0300 Subject: [PATCH] ctlv3: exit non-zero on unhealty ep command --- etcdctl/ctlv3/command/ep_command.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/etcdctl/ctlv3/command/ep_command.go b/etcdctl/ctlv3/command/ep_command.go index 329875cd791..d31de3c4453 100644 --- a/etcdctl/ctlv3/command/ep_command.go +++ b/etcdctl/ctlv3/command/ep_command.go @@ -81,7 +81,7 @@ func epHealthCommandFunc(cmd *cobra.Command, args []string) { } var wg sync.WaitGroup - + errc := make(chan error, len(cfgs)) for _, cfg := range cfgs { wg.Add(1) go func(cfg *v3.Config) { @@ -89,7 +89,7 @@ func epHealthCommandFunc(cmd *cobra.Command, args []string) { ep := cfg.Endpoints[0] cli, err := v3.New(*cfg) if err != nil { - fmt.Printf("%s is unhealthy: failed to connect: %v\n", ep, err) + errc <- fmt.Errorf("%s is unhealthy: failed to connect: %v", ep, err) return } st := time.Now() @@ -102,12 +102,24 @@ func epHealthCommandFunc(cmd *cobra.Command, args []string) { if err == nil || err == rpctypes.ErrPermissionDenied { fmt.Printf("%s is healthy: successfully committed proposal: took = %v\n", ep, time.Since(st)) } else { - fmt.Printf("%s is unhealthy: failed to commit proposal: %v\n", ep, err) + errc <- fmt.Errorf("%s is unhealthy: failed to commit proposal: %v", ep, err) } }(cfg) } wg.Wait() + close(errc) + + errs := false + for err := range errc { + if err != nil { + errs = true + fmt.Fprintln(os.Stderr, err) + } + } + if errs { + ExitWithError(ExitError, fmt.Errorf("unhealthy cluster")) + } } type epStatus struct {