github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/imagetool/addImageimage.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/image" 9 "github.com/Cloud-Foundations/Dominator/lib/log" 10 objectclient "github.com/Cloud-Foundations/Dominator/lib/objectserver/client" 11 "github.com/Cloud-Foundations/Dominator/lib/srpc" 12 ) 13 14 func addImageimageSubcommand(args []string, logger log.DebugLogger) error { 15 imageSClient, objectClient := getClients() 16 err := addImageimage(imageSClient, objectClient, args[0], args[1], args[2], 17 args[3]) 18 if err != nil { 19 return fmt.Errorf("Error adding image: \"%s\"\t%s", args[0], err) 20 } 21 return nil 22 } 23 24 func addImageimage(imageSClient *srpc.Client, 25 objectClient *objectclient.ObjectClient, 26 name, oldImageName, filterFilename, triggersFilename string) error { 27 imageExists, err := client.CheckImage(imageSClient, name) 28 if err != nil { 29 return errors.New("error checking for image existence: " + err.Error()) 30 } 31 if imageExists { 32 return errors.New("image exists") 33 } 34 newImage := new(image.Image) 35 if err := loadImageFiles(newImage, objectClient, filterFilename, 36 triggersFilename); err != nil { 37 return err 38 } 39 fs, err := getFsOfImage(imageSClient, oldImageName) 40 if err != nil { 41 return err 42 } 43 if err := spliceComputedFiles(fs); err != nil { 44 return err 45 } 46 if fs, err = applyDeleteFilter(fs); err != nil { 47 return err 48 } 49 fs = fs.Filter(newImage.Filter) 50 newImage.FileSystem = fs 51 return addImage(imageSClient, name, newImage) 52 }