github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/domtool/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/flagutil"
    12  	"github.com/Cloud-Foundations/Dominator/lib/log/cmdlogger"
    13  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
    14  	"github.com/Cloud-Foundations/Dominator/lib/srpc/setupclient"
    15  	"github.com/Cloud-Foundations/Dominator/lib/tags"
    16  )
    17  
    18  var (
    19  	cpuPercent = flag.Uint("cpuPercent", 0,
    20  		"CPU speed as percentage of capacity (default 50)")
    21  	networkSpeedPercent = flag.Uint("networkSpeedPercent",
    22  		constants.DefaultNetworkSpeedPercent,
    23  		"Network speed as percentage of capacity")
    24  	scanExcludeList  flagutil.StringList = constants.ScanExcludeList
    25  	scanSpeedPercent                     = flag.Uint("scanSpeedPercent",
    26  		constants.DefaultScanSpeedPercent,
    27  		"Scan speed as percentage of capacity")
    28  	domHostname = flag.String("domHostname", "localhost",
    29  		"Hostname of dominator")
    30  	domPortNum = flag.Uint("domPortNum", constants.DominatorPortNumber,
    31  		"Port number of dominator")
    32  	locationsToMatch flagutil.StringList
    33  	statusesToMatch  flagutil.StringList
    34  	subsList         = flag.String("subsList", "",
    35  		"Name of file containing list of subs")
    36  	tagsToMatch tags.MatchTags
    37  
    38  	dominatorSrpcClient *srpc.Client
    39  )
    40  
    41  func init() {
    42  	flag.Var(&locationsToMatch, "locationsToMatch",
    43  		"Sub locations to match when listing")
    44  	flag.Var(&scanExcludeList, "scanExcludeList",
    45  		"Comma separated list of patterns to exclude from scanning")
    46  	flag.Var(&statusesToMatch, "statusesToMatch",
    47  		"Sub statuses to match when listing")
    48  	flag.Var(&tagsToMatch, "tagsToMatch", "Tags to match when listing")
    49  }
    50  
    51  func printUsage() {
    52  	w := flag.CommandLine.Output()
    53  	fmt.Fprintln(w, "Usage: domtool [flags...] command")
    54  	fmt.Fprintln(w, "Common flags:")
    55  	flag.PrintDefaults()
    56  	fmt.Fprintln(w, "Commands:")
    57  	commands.PrintCommands(w, subcommands)
    58  }
    59  
    60  var subcommands = []commands.Command{
    61  	{"clear-safety-shutoff", "sub", 1, 1, clearSafetyShutoffSubcommand},
    62  	{"configure-subs", "", 0, 0, configureSubsSubcommand},
    63  	{"disable-updates", "reason", 1, 1, disableUpdatesSubcommand},
    64  	{"enable-updates", "reason", 1, 1, enableUpdatesSubcommand},
    65  	{"force-disruptive-update", "sub", 1, 1, forceDisruptiveUpdateSubcommand},
    66  	{"get-default-image", "", 0, 0, getDefaultImageSubcommand},
    67  	{"get-info-for-subs", "", 0, 0, getInfoForSubsSubcommand},
    68  	{"get-subs-configuration", "", 0, 0, getSubsConfigurationSubcommand},
    69  	{"list-subs", "", 0, 0, listSubsSubcommand},
    70  	{"set-default-image", "", 1, 1, setDefaultImageSubcommand},
    71  }
    72  
    73  func getClient() *srpc.Client {
    74  	return dominatorSrpcClient
    75  }
    76  
    77  func doMain() int {
    78  	if err := loadflags.LoadForCli("domtool"); err != nil {
    79  		fmt.Fprintln(os.Stderr, err)
    80  		return 1
    81  	}
    82  	flag.Usage = printUsage
    83  	flag.Parse()
    84  	if flag.NArg() < 1 {
    85  		printUsage()
    86  		return 2
    87  	}
    88  	logger := cmdlogger.New()
    89  	srpc.SetDefaultLogger(logger)
    90  	if err := setupclient.SetupTls(true); err != nil {
    91  		fmt.Fprintln(os.Stderr, err)
    92  		return 1
    93  	}
    94  	clientName := fmt.Sprintf("%s:%d", *domHostname, *domPortNum)
    95  	client, err := srpc.DialHTTP("tcp", clientName, 0)
    96  	if err != nil {
    97  		fmt.Fprintf(os.Stderr, "Error dialing: %s\n", err)
    98  		os.Exit(1)
    99  	}
   100  	dominatorSrpcClient = client
   101  	return commands.RunCommands(subcommands, printUsage, logger)
   102  }
   103  
   104  func main() {
   105  	os.Exit(doMain())
   106  }