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 }