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  }