github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/imagetool/addImagefile.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/Cloud-Foundations/Dominator/imageserver/client" 8 "github.com/Cloud-Foundations/Dominator/lib/filesystem/util" 9 "github.com/Cloud-Foundations/Dominator/lib/image" 10 "github.com/Cloud-Foundations/Dominator/lib/log" 11 objectclient "github.com/Cloud-Foundations/Dominator/lib/objectserver/client" 12 "github.com/Cloud-Foundations/Dominator/lib/srpc" 13 ) 14 15 func addImagefileSubcommand(args []string, logger log.DebugLogger) error { 16 imageSClient, objectClient := getClients() 17 err := addImagefile(imageSClient, objectClient, args[0], args[1], args[2], 18 args[3]) 19 if err != nil { 20 return fmt.Errorf("Error adding image: \"%s\": %s", args[0], err) 21 } 22 return nil 23 } 24 25 func addImagefile(imageSClient *srpc.Client, 26 objectClient *objectclient.ObjectClient, 27 name, imageFilename, filterFilename, triggersFilename string) error { 28 imageExists, err := client.CheckImage(imageSClient, name) 29 if err != nil { 30 return errors.New("error checking for image existence: " + err.Error()) 31 } 32 if imageExists { 33 return errors.New("image exists") 34 } 35 newImage := new(image.Image) 36 if err := loadImageFiles(newImage, objectClient, filterFilename, 37 triggersFilename); err != nil { 38 return err 39 } 40 newImage.FileSystem, err = buildImage(imageSClient, newImage.Filter, 41 imageFilename) 42 if err != nil { 43 return errors.New("error building image: " + err.Error()) 44 } 45 if err := spliceComputedFiles(newImage.FileSystem); err != nil { 46 return err 47 } 48 if err := copyMtimes(imageSClient, newImage, *copyMtimesFrom); err != nil { 49 return err 50 } 51 return addImage(imageSClient, name, newImage) 52 } 53 54 func copyMtimes(imageSClient *srpc.Client, img *image.Image, 55 oldImageName string) error { 56 if oldImageName == "" { 57 return nil 58 } 59 fs := img.FileSystem 60 oldFs, err := getFsOfImage(imageSClient, oldImageName) 61 if err != nil { 62 return err 63 } 64 util.CopyMtimes(oldFs, fs) 65 return nil 66 }