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  }