github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/imagebuilder/builder/getLatestImage.go (about)

     1  package builder
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"time"
     7  
     8  	imageclient "github.com/Cloud-Foundations/Dominator/imageserver/client"
     9  	"github.com/Cloud-Foundations/Dominator/lib/format"
    10  	"github.com/Cloud-Foundations/Dominator/lib/image"
    11  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
    12  )
    13  
    14  func getLatestImage(client *srpc.Client, imageStream string,
    15  	buildLog io.Writer) (string, *image.Image, error) {
    16  	imageName, err := imageclient.FindLatestImage(client, imageStream, false)
    17  	if err != nil {
    18  		return "", nil, err
    19  	}
    20  	if imageName == "" {
    21  		return "", nil, nil
    22  	}
    23  	if img, err := getImage(client, imageName, buildLog); err != nil {
    24  		return "", nil, err
    25  	} else {
    26  		return imageName, img, nil
    27  	}
    28  }
    29  
    30  func getImage(client *srpc.Client, imageName string, buildLog io.Writer) (
    31  	*image.Image, error) {
    32  	startTime := time.Now()
    33  	if img, err := imageclient.GetImage(client, imageName); err != nil {
    34  		return nil, err
    35  	} else {
    36  		startRebuildTime := time.Now()
    37  		img.FileSystem.RebuildInodePointers()
    38  		finishedTime := time.Now()
    39  		fmt.Fprintf(buildLog, "Downloaded %s in %s, rebuilt pointers in %s\n",
    40  			imageName,
    41  			format.Duration(startRebuildTime.Sub(startTime)),
    42  			format.Duration(finishedTime.Sub(startRebuildTime)))
    43  		return img, nil
    44  	}
    45  }