github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/subtool/getFile.go (about)

     1  package main
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  
     9  	"github.com/Cloud-Foundations/Dominator/lib/log"
    10  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
    11  	"github.com/Cloud-Foundations/Dominator/sub/client"
    12  )
    13  
    14  func getFileSubcommand(args []string, logger log.DebugLogger) error {
    15  	srpcClient := getSubClient(logger)
    16  	defer srpcClient.Close()
    17  	if err := getFile(srpcClient, args[0], args[1]); err != nil {
    18  		return fmt.Errorf("Error getting file: %s", err)
    19  	}
    20  	return nil
    21  }
    22  
    23  func getFile(srpcClient *srpc.Client, remoteFile, localFile string) error {
    24  	readerFunc := func(reader io.Reader, size uint64) error {
    25  		file, err := os.Create(localFile)
    26  		if err != nil {
    27  			return err
    28  		}
    29  		defer file.Close()
    30  		writer := bufio.NewWriter(file)
    31  		defer writer.Flush()
    32  		_, err = io.Copy(writer, &io.LimitedReader{R: reader, N: int64(size)})
    33  		return err
    34  	}
    35  	rfiles := make([]string, 1)
    36  	rfiles[0] = remoteFile
    37  	return client.GetFiles(srpcClient, rfiles, readerFunc)
    38  }