github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/imagetool/getImage.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/Cloud-Foundations/Dominator/lib/filesystem" 7 "github.com/Cloud-Foundations/Dominator/lib/filesystem/util" 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 "github.com/Cloud-Foundations/Dominator/lib/log/nulllogger" 10 "github.com/Cloud-Foundations/Dominator/lib/objectserver" 11 objectclient "github.com/Cloud-Foundations/Dominator/lib/objectserver/client" 12 ) 13 14 func getImageSubcommand(args []string, logger log.DebugLogger) error { 15 _, objectClient := getClients() 16 if err := getImageAndWrite(objectClient, args[0], args[1]); err != nil { 17 return fmt.Errorf("Error getting image: %s", err) 18 } 19 return nil 20 } 21 22 func getImageAndWrite(objectClient *objectclient.ObjectClient, name, 23 dirname string) error { 24 fs, objectsGetter, err := getImageForUnpack(objectClient, name) 25 if err != nil { 26 return err 27 } 28 err = util.Unpack(fs, objectsGetter, dirname, nulllogger.New()) 29 if err != nil { 30 return err 31 } 32 return util.WriteImageName(dirname, name) 33 } 34 35 func getImageForUnpack(objectClient *objectclient.ObjectClient, name string) ( 36 *filesystem.FileSystem, objectserver.ObjectsGetter, error) { 37 fs, err := getTypedImage(name) 38 if err != nil { 39 return nil, nil, err 40 } 41 if *computedFilesRoot == "" { 42 return fs, objectClient, nil 43 } 44 objectsGetter, err := util.ReplaceComputedFiles(fs, 45 &util.ComputedFilesData{RootDirectory: *computedFilesRoot}, 46 objectClient) 47 if err != nil { 48 return nil, nil, err 49 } 50 return fs, objectsGetter, nil 51 }