github.com/Cloud-Foundations/Dominator@v0.3.4/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], logger) 18 if err != nil { 19 return fmt.Errorf("error adding image: \"%s\": %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, 27 logger log.DebugLogger) 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 img, err := getTypedImage(oldImageName) 41 if err != nil { 42 return err 43 } 44 if err := spliceComputedFiles(img.FileSystem); err != nil { 45 return err 46 } 47 fs, err := applyDeleteFilter(img.FileSystem, img.Filter) 48 if err != nil { 49 return err 50 } 51 fs = fs.Filter(newImage.Filter) 52 newImage.FileSystem = fs 53 return addImage(imageSClient, name, newImage, logger) 54 }