github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/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  	"github.com/Cloud-Foundations/Dominator/proto/imageserver"
    15  )
    16  
    17  func getImageArchiveDataSubcommand(args []string,
    18  	logger log.DebugLogger) error {
    19  	imageClient, _ := getClients()
    20  	err := getImageArchiveDataAndWrite(imageClient, args[0], args[1])
    21  	if err != nil {
    22  		return fmt.Errorf("Error getting image: %s", err)
    23  	}
    24  	return nil
    25  }
    26  
    27  func getImageArchiveDataAndWrite(imageClient *srpc.Client, name,
    28  	outputFilename string) error {
    29  	request := imageserver.GetImageRequest{
    30  		ImageName:        name,
    31  		IgnoreFilesystem: true,
    32  		Timeout:          *timeout,
    33  	}
    34  	var reply imageserver.GetImageResponse
    35  	err := imageClient.RequestReply("ImageServer.GetImage", request, &reply)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	img := reply.Image
    40  	img.Filter = nil
    41  	img.Triggers = nil
    42  	var encoder srpc.Encoder
    43  	if outputFilename == "-" {
    44  		e := json.NewEncoder(os.Stdout)
    45  		e.SetIndent("", "    ")
    46  		encoder = e
    47  	} else {
    48  		file, err := fsutil.CreateRenamingWriter(outputFilename,
    49  			fsutil.PublicFilePerms)
    50  		if err != nil {
    51  			return err
    52  		}
    53  		defer file.Close()
    54  		writer := bufio.NewWriter(file)
    55  		defer writer.Flush()
    56  		if filepath.Ext(outputFilename) == ".json" {
    57  			e := json.NewEncoder(writer)
    58  			e.SetIndent("", "    ")
    59  			encoder = e
    60  		} else {
    61  			encoder = gob.NewEncoder(writer)
    62  		}
    63  	}
    64  	return encoder.Encode(img)
    65  }