github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/getImageArchiveData.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "encoding/gob" 6 "encoding/json" 7 "fmt" 8 "os" 9 "path/filepath" 10 11 "github.com/Cloud-Foundations/Dominator/lib/fsutil" 12 "github.com/Cloud-Foundations/Dominator/lib/log" 13 "github.com/Cloud-Foundations/Dominator/lib/srpc" 14 ) 15 16 func getImageArchiveDataSubcommand(args []string, 17 logger log.DebugLogger) error { 18 err := getImageArchiveDataAndWrite(args[0], args[1]) 19 if err != nil { 20 return fmt.Errorf("error getting image: %s", err) 21 } 22 return nil 23 } 24 25 func getImageArchiveDataAndWrite(name, outputFilename string) error { 26 img, err := getTypedImageMetadata(name) 27 if err != nil { 28 return err 29 } 30 img.Filter = nil 31 img.Triggers = nil 32 var encoder srpc.Encoder 33 if outputFilename == "-" { 34 e := json.NewEncoder(os.Stdout) 35 e.SetIndent("", " ") 36 encoder = e 37 } else { 38 file, err := fsutil.CreateRenamingWriter(outputFilename, 39 fsutil.PublicFilePerms) 40 if err != nil { 41 return err 42 } 43 defer file.Close() 44 writer := bufio.NewWriter(file) 45 defer writer.Flush() 46 if filepath.Ext(outputFilename) == ".json" { 47 e := json.NewEncoder(writer) 48 e.SetIndent("", " ") 49 encoder = e 50 } else { 51 encoder = gob.NewEncoder(writer) 52 } 53 } 54 return encoder.Encode(img) 55 }