github.com/Cloud-Foundations/Dominator@v0.3.4/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], logger) 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, 28 logger log.DebugLogger) error { 29 imageExists, err := client.CheckImage(imageSClient, name) 30 if err != nil { 31 return errors.New("error checking for image existence: " + err.Error()) 32 } 33 if imageExists { 34 return errors.New("image exists") 35 } 36 newImage := new(image.Image) 37 if err := loadImageFiles(newImage, objectClient, filterFilename, 38 triggersFilename); err != nil { 39 return err 40 } 41 newImage.FileSystem, err = buildImage(imageSClient, newImage.Filter, 42 imageFilename, logger) 43 if err != nil { 44 return errors.New("error building image: " + err.Error()) 45 } 46 if err := spliceComputedFiles(newImage.FileSystem); err != nil { 47 return err 48 } 49 if err := copyMtimes(imageSClient, newImage, *copyMtimesFrom); err != nil { 50 return err 51 } 52 return addImage(imageSClient, name, newImage, logger) 53 } 54 55 func copyMtimes(imageSClient *srpc.Client, img *image.Image, 56 oldImageName string) error { 57 if oldImageName == "" { 58 return nil 59 } 60 fs := img.FileSystem 61 oldFs, err := getTypedFileSystem(oldImageName) 62 if err != nil { 63 return err 64 } 65 util.CopyMtimes(oldFs, fs) 66 return nil 67 }