forked from toolshed/abra
		
	docs: better timeout error
This commit is contained in:
		| @ -163,7 +163,7 @@ recipes. | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { | 		if err := stack.RunDeploy(cl, deployOpts, compose, app.Type); err != nil { | ||||||
| 			logrus.Fatal(err) | 			logrus.Fatal(err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | |||||||
| @ -164,7 +164,7 @@ recipes. | |||||||
| 			logrus.Fatal(err) | 			logrus.Fatal(err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { | 		if err := stack.RunDeploy(cl, deployOpts, compose, app.Type); err != nil { | ||||||
| 			logrus.Fatal(err) | 			logrus.Fatal(err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | |||||||
| @ -126,7 +126,7 @@ func DeployAction(c *cli.Context) error { | |||||||
| 		logrus.Fatal(err) | 		logrus.Fatal(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { | 	if err := stack.RunDeploy(cl, deployOpts, compose, app.Env["TYPE"]); err != nil { | ||||||
| 		logrus.Fatal(err) | 		logrus.Fatal(err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | |||||||
| @ -158,7 +158,7 @@ func pruneServices(ctx context.Context, cl *dockerclient.Client, namespace conve | |||||||
| } | } | ||||||
|  |  | ||||||
| // RunDeploy is the swarm implementation of docker stack deploy | // RunDeploy is the swarm implementation of docker stack deploy | ||||||
| func RunDeploy(cl *dockerclient.Client, opts Deploy, cfg *composetypes.Config) error { | func RunDeploy(cl *dockerclient.Client, opts Deploy, cfg *composetypes.Config, recipeName string) error { | ||||||
| 	ctx := context.Background() | 	ctx := context.Background() | ||||||
|  |  | ||||||
| 	if err := validateResolveImageFlag(&opts); err != nil { | 	if err := validateResolveImageFlag(&opts); err != nil { | ||||||
| @ -170,7 +170,7 @@ func RunDeploy(cl *dockerclient.Client, opts Deploy, cfg *composetypes.Config) e | |||||||
| 		opts.ResolveImage = ResolveImageNever | 		opts.ResolveImage = ResolveImageNever | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return deployCompose(ctx, cl, opts, cfg) | 	return deployCompose(ctx, cl, opts, cfg, recipeName) | ||||||
| } | } | ||||||
|  |  | ||||||
| // validateResolveImageFlag validates the opts.resolveImage command line option | // validateResolveImageFlag validates the opts.resolveImage command line option | ||||||
| @ -183,7 +183,7 @@ func validateResolveImageFlag(opts *Deploy) error { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func deployCompose(ctx context.Context, cl *dockerclient.Client, opts Deploy, config *composetypes.Config) error { | func deployCompose(ctx context.Context, cl *dockerclient.Client, opts Deploy, config *composetypes.Config, recipeName string) error { | ||||||
| 	namespace := convert.NewNamespace(opts.Namespace) | 	namespace := convert.NewNamespace(opts.Namespace) | ||||||
|  |  | ||||||
| 	if opts.Prune { | 	if opts.Prune { | ||||||
| @ -224,7 +224,7 @@ func deployCompose(ctx context.Context, cl *dockerclient.Client, opts Deploy, co | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return deployServices(ctx, cl, services, namespace, opts.SendRegistryAuth, opts.ResolveImage) | 	return deployServices(ctx, cl, services, namespace, opts.SendRegistryAuth, opts.ResolveImage, recipeName) | ||||||
| } | } | ||||||
|  |  | ||||||
| func getServicesDeclaredNetworks(serviceConfigs []composetypes.ServiceConfig) map[string]struct{} { | func getServicesDeclaredNetworks(serviceConfigs []composetypes.ServiceConfig) map[string]struct{} { | ||||||
| @ -339,7 +339,8 @@ func deployServices( | |||||||
| 	services map[string]swarm.ServiceSpec, | 	services map[string]swarm.ServiceSpec, | ||||||
| 	namespace convert.Namespace, | 	namespace convert.Namespace, | ||||||
| 	sendAuth bool, | 	sendAuth bool, | ||||||
| 	resolveImage string) error { | 	resolveImage string, | ||||||
|  | 	recipeName string) error { | ||||||
| 	existingServices, err := GetStackServices(ctx, cl, namespace.Name()) | 	existingServices, err := GetStackServices(ctx, cl, namespace.Name()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| @ -443,9 +444,9 @@ func deployServices( | |||||||
| 	ch := make(chan error, len(serviceIDs)) | 	ch := make(chan error, len(serviceIDs)) | ||||||
| 	for serviceID, serviceName := range serviceIDs { | 	for serviceID, serviceName := range serviceIDs { | ||||||
| 		logrus.Debugf("waiting on %s to converge", serviceName) | 		logrus.Debugf("waiting on %s to converge", serviceName) | ||||||
| 		go func(s string) { | 		go func(sID, sName, rName string) { | ||||||
| 			ch <- waitOnService(ctx, cl, s) | 			ch <- waitOnService(ctx, cl, sID, sName, rName) | ||||||
| 		}(serviceID) | 		}(serviceID, serviceName, recipeName) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, serviceID := range serviceIDs { | 	for _, serviceID := range serviceIDs { | ||||||
| @ -475,7 +476,7 @@ func getStackConfigs(ctx context.Context, dockerclient client.APIClient, namespa | |||||||
|  |  | ||||||
| // https://github.com/docker/cli/blob/master/cli/command/service/helpers.go | // https://github.com/docker/cli/blob/master/cli/command/service/helpers.go | ||||||
| // https://github.com/docker/cli/blob/master/cli/command/service/progress/progress.go | // https://github.com/docker/cli/blob/master/cli/command/service/progress/progress.go | ||||||
| func waitOnService(ctx context.Context, cl *dockerclient.Client, serviceID string) error { | func waitOnService(ctx context.Context, cl *dockerclient.Client, serviceID, serviceName, recipeName string) error { | ||||||
| 	errChan := make(chan error, 1) | 	errChan := make(chan error, 1) | ||||||
| 	pipeReader, pipeWriter := io.Pipe() | 	pipeReader, pipeWriter := io.Pipe() | ||||||
|  |  | ||||||
| @ -491,6 +492,21 @@ func waitOnService(ctx context.Context, cl *dockerclient.Client, serviceID strin | |||||||
| 	case err := <-errChan: | 	case err := <-errChan: | ||||||
| 		return err | 		return err | ||||||
| 	case <-time.After(timeout): | 	case <-time.After(timeout): | ||||||
| 		return fmt.Errorf("%s has still not converged (%s second timeout)?", serviceID, timeout) | 		return fmt.Errorf(fmt.Sprintf(` | ||||||
|  | %s has still not converged (%s second timeout reached) | ||||||
|  |  | ||||||
|  | This does not necessarily mean your deployment has failed, it may just be that | ||||||
|  | the app is taking longer to deploy based on your server resources or network | ||||||
|  | latency. Please run the following the inspect the logs of your deployed app: | ||||||
|  |  | ||||||
|  |     abra app logs %s | ||||||
|  |  | ||||||
|  | If a service is failing to even start (run "abra app ps %s" to see what | ||||||
|  | services are running) there could be a few things. The follow command will | ||||||
|  | try to smoke those out for you: | ||||||
|  |  | ||||||
|  |     abra app errors %s | ||||||
|  |  | ||||||
|  | `, recipeName, timeout, recipeName, recipeName, recipeName)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user