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 }