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  }