diff --git a/pkg/upstream/stack/stack.go b/pkg/upstream/stack/stack.go index 61ee93cf..d7772161 100644 --- a/pkg/upstream/stack/stack.go +++ b/pkg/upstream/stack/stack.go @@ -5,7 +5,8 @@ import ( "fmt" "io" "io/ioutil" - "strings" + "os" + "os/signal" "time" "coopcloud.tech/abra/pkg/upstream/convert" @@ -414,7 +415,7 @@ func deployServices( return nil } - logrus.Infof("waiting for services to converge: %s", strings.Join(serviceNames, ", ")) + logrus.Infof("Starting to poll for deployment status for: %s", appName) ch := make(chan error, len(serviceIDs)) for serviceID, serviceName := range serviceIDs { logrus.Debugf("waiting on %s to converge", serviceName) @@ -431,7 +432,7 @@ func deployServices( logrus.Debugf("assuming %s converged successfully", serviceID) } - logrus.Info("services converged 👌") + logrus.Infof("Successfully deployed %s", appName) return nil } @@ -454,6 +455,10 @@ func WaitOnService(ctx context.Context, cl *dockerClient.Client, serviceID, appN errChan := make(chan error, 1) pipeReader, pipeWriter := io.Pipe() + sigintChannel := make(chan os.Signal, 1) + signal.Notify(sigintChannel, os.Interrupt) + defer signal.Stop(sigintChannel) + go func() { errChan <- progress.ServiceProgress(ctx, cl, serviceID, pipeWriter) }() @@ -465,6 +470,14 @@ func WaitOnService(ctx context.Context, cl *dockerClient.Client, serviceID, appN select { case err := <-errChan: return err + case <-sigintChannel: + return fmt.Errorf(fmt.Sprintf(` +Cancelling polling for %s, deployment is still continuing. + +If you want to stop the deployment try: + abra app undeploy %s + +`, appName, appName)) case <-time.After(timeout): return fmt.Errorf(fmt.Sprintf(` %s has not converged (%s second timeout reached). @@ -481,7 +494,7 @@ And inspect the logs with: abra app logs %s -If a service is failing to even start, try smoke out the error with: +If a service is failing to even start, try to smoke out the error with: abra app errors --watch %s