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 }