github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/unpacker-tool/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 8 "github.com/Cloud-Foundations/Dominator/lib/constants" 9 "github.com/Cloud-Foundations/Dominator/lib/flags/commands" 10 "github.com/Cloud-Foundations/Dominator/lib/flags/loadflags" 11 "github.com/Cloud-Foundations/Dominator/lib/log/cmdlogger" 12 "github.com/Cloud-Foundations/Dominator/lib/srpc" 13 "github.com/Cloud-Foundations/Dominator/lib/srpc/setupclient" 14 ) 15 16 var ( 17 imageUnpackerHostname = flag.String("imageUnpackerHostname", "localhost", 18 "Hostname of image-unpacker server") 19 imageUnpackerPortNum = flag.Uint("imageUnpackerPortNum", 20 constants.ImageUnpackerPortNumber, 21 "Port number of image-unpacker server") 22 23 unpackerSrpcClient *srpc.Client 24 ) 25 26 func printUsage() { 27 w := flag.CommandLine.Output() 28 fmt.Fprintln(w, "Usage: unpacker-tool [flags...] add-device [args...]") 29 fmt.Fprintln(w, "Common flags:") 30 flag.PrintDefaults() 31 fmt.Fprintln(w, "Commands:") 32 commands.PrintCommands(w, subcommands) 33 } 34 35 var subcommands = []commands.Command{ 36 {"add-device", "DeviceId command ...", 2, -1, addDeviceSubcommand}, 37 {"associate", "stream-name DeviceId", 2, 2, associateSubcommand}, 38 {"export-image", "stream-name type destination", 3, 3, 39 exportImageSubcommand}, 40 {"get-status", "", 0, 0, getStatusSubcommand}, 41 {"get-device-for-stream", "stream-name", 1, 1, 42 getDeviceForStreamSubcommand}, 43 {"prepare-for-capture", "stream-name", 1, 1, prepareForCaptureSubcommand}, 44 {"prepare-for-copy", "stream-name", 1, 1, prepareForCopySubcommand}, 45 {"prepare-for-unpack", "stream-name", 1, 1, prepareForUnpackSubcommand}, 46 {"remove-device", "DeviceId", 1, 1, removeDeviceSubcommand}, 47 {"unpack-image", "stream-name image-leaf-name", 2, 2, 48 unpackImageSubcommand}, 49 } 50 51 func getClient() *srpc.Client { 52 return unpackerSrpcClient 53 } 54 55 func doMain() int { 56 if err := loadflags.LoadForCli("unpacker-tool"); err != nil { 57 fmt.Fprintln(os.Stderr, err) 58 return 1 59 } 60 flag.Usage = printUsage 61 flag.Parse() 62 if flag.NArg() < 1 { 63 printUsage() 64 return 2 65 } 66 logger := cmdlogger.New() 67 if err := setupclient.SetupTls(true); err != nil { 68 fmt.Fprintln(os.Stderr, err) 69 return 1 70 } 71 clientName := fmt.Sprintf("%s:%d", 72 *imageUnpackerHostname, *imageUnpackerPortNum) 73 client, err := srpc.DialHTTP("tcp", clientName, 0) 74 if err != nil { 75 fmt.Fprintf(os.Stderr, "Error dialing\t%s\n", err) 76 return 1 77 } 78 unpackerSrpcClient = client 79 return commands.RunCommands(subcommands, printUsage, logger) 80 } 81 82 func main() { 83 os.Exit(doMain()) 84 }