github.com/Cloud-Foundations/Dominator@v0.3.4/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  	"github.com/Cloud-Foundations/Dominator/lib/tags"
    13  	image_proto "github.com/Cloud-Foundations/Dominator/proto/imageserver"
    14  )
    15  
    16  func getLatestImage(client srpc.ClientI, imageStream, buildCommitId string,
    17  	tagsToMatch tags.MatchTags,
    18  	buildLog io.Writer) (string, *image.Image, error) {
    19  	imageName, err := imageclient.FindLatestImageReq(client,
    20  		image_proto.FindLatestImageRequest{
    21  			BuildCommitId: buildCommitId,
    22  			DirectoryName: imageStream,
    23  			TagsToMatch:   tagsToMatch,
    24  		})
    25  	if err != nil {
    26  		return "", nil, err
    27  	}
    28  	if imageName == "" {
    29  		return "", nil, nil
    30  	}
    31  	if img, err := getImage(client, imageName, buildLog); err != nil {
    32  		return "", nil, err
    33  	} else {
    34  		return imageName, img, nil
    35  	}
    36  }
    37  
    38  func getImage(client srpc.ClientI, imageName string, buildLog io.Writer) (
    39  	*image.Image, error) {
    40  	startTime := time.Now()
    41  	if img, err := imageclient.GetImage(client, imageName); err != nil {
    42  		return nil, err
    43  	} else {
    44  		startRebuildTime := time.Now()
    45  		img.FileSystem.RebuildInodePointers()
    46  		finishedTime := time.Now()
    47  		fmt.Fprintf(buildLog, "Downloaded %s in %s, rebuilt pointers in %s\n",
    48  			imageName,
    49  			format.Duration(startRebuildTime.Sub(startTime)),
    50  			format.Duration(finishedTime.Sub(startRebuildTime)))
    51  		return img, nil
    52  	}
    53  }