func criteriaFromArgs(args []string) (*skynet.Criteria, []string) { flagset := flag.NewFlagSet("deploy", flag.ExitOnError) services := flagset.String("services", "", "services") regions := flagset.String("regions", "", "regions") instances := flagset.String("instances", "", "instances") hosts := flagset.String("hosts", "", "hosts") registered := flagset.String("registered", "", "registered") flagsetArgs, args := config.SplitFlagsetFromArgs(flagset, args) err := flagset.Parse(flagsetArgs) if err != nil { log.Fatal(err) } regionCriteria := make([]string, 0, 0) if len(*regions) > 0 { regionCriteria = strings.Split(*regions, ",") } hostCriteria := make([]string, 0, 0) if len(*hosts) > 0 { hostCriteria = strings.Split(*hosts, ",") } instanceCriteria := make([]string, 0, 0) if len(*instances) > 0 { instanceCriteria = strings.Split(*instances, ",") } var reg *bool if *registered == "true" { *reg = true } else if *registered == "false" { *reg = false } return &skynet.Criteria{ Regions: regionCriteria, Hosts: hostCriteria, Instances: instanceCriteria, Registered: reg, Services: serviceCriteriaFromCsv(*services), }, args }
func main() { log.SetLogLevel(log.ERROR) var args []string criteria, args := criteriaFromArgs(os.Args[1:]) if len(args) == 0 { CommandLineHelp() return } switch args[0] { case "help", "h": CommandLineHelp() case "build", "b": flagset := flag.NewFlagSet("build", flag.ExitOnError) configFile := flagset.String("build", "./build.cfg", "build config file") flagsetArgs, _ := config.SplitFlagsetFromArgs(flagset, args) err := flagset.Parse(flagsetArgs) if err != nil { log.Fatal(err) return } Build(*configFile) case "deploy", "d": flagset := flag.NewFlagSet("deploy", flag.ExitOnError) configFile := flagset.String("build", "./build.cfg", "build config file") flagsetArgs, _ := config.SplitFlagsetFromArgs(flagset, args) err := flagset.Parse(flagsetArgs) if err != nil { log.Fatal(err) return } Deploy(*configFile, criteria) case "hosts": ListHosts(criteria) case "regions": ListRegions(criteria) case "services": ListServices(criteria) case "versions": ListVersions(criteria) case "instances": ListInstances(criteria) case "start": Start(criteria, args[1:]) case "stop": Stop(criteria) case "restart": Restart(criteria) case "register": Register(criteria) case "unregister": Unregister(criteria) case "log": SetLogLevel(criteria, args[1]) case "daemon": if len(args) >= 2 { switch args[1] { case "log": if len(args) >= 3 { SetDaemonLogLevel(criteria, args[2]) } else { fmt.Println("Must supply a log level") } case "stop": StopDaemon(criteria) } } else { fmt.Println("Supported subcommands for daemon are log, and stop") } case "cli": InteractiveShell() default: fmt.Println("Unknown Command: ", args[0]) CommandLineHelp() } }