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 }