github.com/Cloud-Foundations/Dominator@v0.3.4/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 filename = flag.String("filename", "", 18 "Name of file to write raw image data to") 19 imageUnpackerHostname = flag.String("imageUnpackerHostname", "localhost", 20 "Hostname of image-unpacker server") 21 imageUnpackerPortNum = flag.Uint("imageUnpackerPortNum", 22 constants.ImageUnpackerPortNumber, 23 "Port number of image-unpacker server") 24 25 unpackerSrpcClient *srpc.Client 26 ) 27 28 func printUsage() { 29 w := flag.CommandLine.Output() 30 fmt.Fprintln(w, "Usage: unpacker-tool [flags...] add-device [args...]") 31 fmt.Fprintln(w, "Common flags:") 32 flag.PrintDefaults() 33 fmt.Fprintln(w, "Commands:") 34 commands.PrintCommands(w, subcommands) 35 } 36 37 var subcommands = []commands.Command{ 38 {"add-device", "DeviceId command ...", 2, -1, addDeviceSubcommand}, 39 {"associate", "stream-name DeviceId", 2, 2, associateSubcommand}, 40 {"claim-device", "DeviceId DeviceName", 2, 2, claimDeviceSubcommand}, 41 {"export-image", "stream-name type destination", 3, 3, 42 exportImageSubcommand}, 43 {"forget-stream", "stream-name ", 1, 1, forgetStreamSubcommand}, 44 {"get-raw", "stream-name ", 1, 1, getRawSubcommand}, 45 {"get-status", "", 0, 0, getStatusSubcommand}, 46 {"get-device-for-stream", "stream-name", 1, 1, 47 getDeviceForStreamSubcommand}, 48 {"prepare-for-capture", "stream-name", 1, 1, prepareForCaptureSubcommand}, 49 {"prepare-for-copy", "stream-name", 1, 1, prepareForCopySubcommand}, 50 {"prepare-for-unpack", "stream-name", 1, 1, prepareForUnpackSubcommand}, 51 {"remove-device", "DeviceId", 1, 1, removeDeviceSubcommand}, 52 {"unpack-image", "stream-name image-leaf-name", 2, 2, 53 unpackImageSubcommand}, 54 } 55 56 func getClient() *srpc.Client { 57 return unpackerSrpcClient 58 } 59 60 func doMain() int { 61 if err := loadflags.LoadForCli("unpacker-tool"); err != nil { 62 fmt.Fprintln(os.Stderr, err) 63 return 1 64 } 65 flag.Usage = printUsage 66 flag.Parse() 67 if flag.NArg() < 1 { 68 printUsage() 69 return 2 70 } 71 logger := cmdlogger.New() 72 srpc.SetDefaultLogger(logger) 73 if err := setupclient.SetupTls(true); err != nil { 74 fmt.Fprintln(os.Stderr, err) 75 return 1 76 } 77 clientName := fmt.Sprintf("%s:%d", 78 *imageUnpackerHostname, *imageUnpackerPortNum) 79 client, err := srpc.DialHTTP("tcp", clientName, 0) 80 if err != nil { 81 fmt.Fprintf(os.Stderr, "Error dialing: %s\n", err) 82 return 1 83 } 84 unpackerSrpcClient = client 85 return commands.RunCommands(subcommands, printUsage, logger) 86 } 87 88 func main() { 89 os.Exit(doMain()) 90 }