Initial functionality to pull a docker image when booting an environment
This commit is contained in:
		
							parent
							
								
									52ca0667ca
								
							
						
					
					
						commit
						4a68eabd1b
					
				| 
						 | 
				
			
			@ -490,6 +490,32 @@ func (d *DockerEnvironment) DisableResourcePolling() error {
 | 
			
		|||
	return errors.WithStack(err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Pulls the image from Docker.
 | 
			
		||||
//
 | 
			
		||||
// @todo handle authorization & local images
 | 
			
		||||
func (d *DockerEnvironment) ensureImageExists(c *client.Client) error {
 | 
			
		||||
	out, err := c.ImagePull(context.Background(), d.Server.Container.Image, types.ImagePullOptions{All: false})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer out.Close()
 | 
			
		||||
 | 
			
		||||
	zap.S().Debugw("pulling docker image... this could take a bit of time", zap.String("image", d.Server.Container.Image))
 | 
			
		||||
 | 
			
		||||
	// I'm not sure what the best approach here is, but this will block execution until the image
 | 
			
		||||
	// is done being pulled, which is what we need.
 | 
			
		||||
	scanner := bufio.NewScanner(out)
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		continue
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := scanner.Err(); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Creates a new container for the server using all of the data that is currently
 | 
			
		||||
// available for it. If the container already exists it will be returned.
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -515,6 +541,11 @@ func (d *DockerEnvironment) Create() error {
 | 
			
		|||
		return errors.WithStack(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Try to pull the requested image before creating the container.
 | 
			
		||||
	if err := d.ensureImageExists(cli); err != nil {
 | 
			
		||||
		return errors.WithStack(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	conf := &container.Config{
 | 
			
		||||
		Hostname:     "container",
 | 
			
		||||
		User:         strconv.Itoa(d.User),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user