// Attempts to execute a replicationController request func executeControllerRequest(method string, auth *kube_client.AuthInfo) bool { parseController := func() string { if len(flag.Args()) != 2 { log.Fatal("usage: cloudcfg [OPTIONS] stop|rm|rollingupdate <controller>") } return flag.Arg(1) } var err error switch method { case "stop": err = cloudcfg.StopController(parseController(), kube_client.Client{Host: *httpServer, Auth: auth}) case "rm": err = cloudcfg.DeleteController(parseController(), kube_client.Client{Host: *httpServer, Auth: auth}) case "rollingupdate": client := &kube_client.Client{ Host: *httpServer, Auth: auth, } err = cloudcfg.Update(parseController(), client, *updatePeriod) case "run": if len(flag.Args()) != 4 { log.Fatal("usage: cloudcfg [OPTIONS] run <image> <replicas> <controller>") } image := flag.Arg(1) replicas, err := strconv.Atoi(flag.Arg(2)) name := flag.Arg(3) if err != nil { log.Fatalf("Error parsing replicas: %#v", err) } err = cloudcfg.RunController(image, name, replicas, kube_client.Client{Host: *httpServer, Auth: auth}, *portSpec, *servicePort) case "resize": args := flag.Args() if len(args) < 3 { log.Fatal("usage: cloudcfg resize <controller> <replicas>") } name := args[1] replicas, err := strconv.Atoi(args[2]) if err != nil { log.Fatalf("Error parsing replicas: %#v", err) } err = cloudcfg.ResizeController(name, replicas, kube_client.Client{Host: *httpServer, Auth: auth}) default: return false } if err != nil { log.Fatalf("Error: %#v", err) } return true }
// CloudCfg command line tool. func main() { flag.Parse() // Scan the arguments list if *versionFlag { fmt.Println("Version:", APP_VERSION) os.Exit(0) } if len(flag.Args()) < 2 { usage() } method := flag.Arg(0) secure := true parsedUrl, err := url.Parse(*httpServer) if err != nil { log.Fatalf("Unable to parse %v as a URL\n", err) } if parsedUrl.Scheme != "" && parsedUrl.Scheme != "https" { secure = false } storage := strings.Trim(flag.Arg(1), "/") url := *httpServer + path.Join("/api/v1beta1", storage) var request *http.Request var printer cloudcfg.ResourcePrinter if *json { printer = &cloudcfg.IdentityPrinter{} } else if *yaml { printer = &cloudcfg.YAMLPrinter{} } else { printer = &cloudcfg.HumanReadablePrinter{} } var auth *kube_client.AuthInfo if secure { auth, err = cloudcfg.LoadAuthInfo(*authConfig) if err != nil { log.Fatalf("Error loading auth: %#v", err) } } switch method { case "get", "list": if len(*labelQuery) > 0 && method == "list" { url = url + "?labels=" + *labelQuery } request, err = http.NewRequest("GET", url, nil) case "delete": request, err = http.NewRequest("DELETE", url, nil) case "create": request, err = cloudcfg.RequestWithBodyData(readConfig(storage), url, "POST") case "update": request, err = cloudcfg.RequestWithBodyData(readConfig(storage), url, "PUT") case "rollingupdate": client := &kube_client.Client{ Host: *httpServer, Auth: auth, } cloudcfg.Update(flag.Arg(1), client, *updatePeriod) case "run": args := flag.Args() if len(args) < 4 { log.Fatal("usage: cloudcfg -h <host> run <image> <replicas> <name>") } image := args[1] replicas, err := strconv.Atoi(args[2]) name := args[3] if err != nil { log.Fatalf("Error parsing replicas: %#v", err) } err = cloudcfg.RunController(image, name, replicas, kube_client.Client{Host: *httpServer, Auth: auth}, *portSpec, *servicePort) if err != nil { log.Fatalf("Error: %#v", err) } return case "stop": err = cloudcfg.StopController(flag.Arg(1), kube_client.Client{Host: *httpServer, Auth: auth}) if err != nil { log.Fatalf("Error: %#v", err) } return case "rm": err = cloudcfg.DeleteController(flag.Arg(1), kube_client.Client{Host: *httpServer, Auth: auth}) if err != nil { log.Fatalf("Error: %#v", err) } return default: log.Fatalf("Unknown command: %s", method) } if err != nil { log.Fatalf("Error: %#v", err) } body, err := cloudcfg.DoRequest(request, auth) if err != nil { log.Fatalf("Error: %#v", err) } err = printer.Print(body, os.Stdout) if err != nil { log.Fatalf("Failed to print: %#v\nRaw received text:\n%v\n", err, string(body)) } fmt.Print("\n") }
// CloudCfg command line tool. func main() { flag.Parse() // Scan the arguments list if *versionFlag { fmt.Println("Version:", APP_VERSION) os.Exit(0) } if len(flag.Args()) < 2 { usage() } method := flag.Arg(0) url := *httpServer + "/api/v1beta1" + flag.Arg(1) var request *http.Request var err error var printer cloudcfg.ResourcePrinter if *json { printer = &cloudcfg.IdentityPrinter{} } else if *yaml { printer = &cloudcfg.YAMLPrinter{} } else { printer = &cloudcfg.HumanReadablePrinter{} } auth, err := cloudcfg.LoadAuthInfo(*authConfig) if err != nil { log.Fatalf("Error loading auth: %#v", err) } if method == "get" || method == "list" { if len(*labelQuery) > 0 && method == "list" { url = url + "?labels=" + *labelQuery } request, err = http.NewRequest("GET", url, nil) } else if method == "delete" { request, err = http.NewRequest("DELETE", url, nil) } else if method == "create" { request, err = cloudcfg.RequestWithBody(*config, url, "POST") } else if method == "update" { request, err = cloudcfg.RequestWithBody(*config, url, "PUT") } else if method == "rollingupdate" { client := &kube_client.Client{ Host: *httpServer, Auth: &auth, } cloudcfg.Update(flag.Arg(1), client, *updatePeriod) } else if method == "run" { args := flag.Args() if len(args) < 4 { log.Fatal("usage: cloudcfg -h <host> run <image> <replicas> <name>") } image := args[1] replicas, err := strconv.Atoi(args[2]) name := args[3] if err != nil { log.Fatalf("Error parsing replicas: %#v", err) } err = cloudcfg.RunController(image, name, replicas, kube_client.Client{Host: *httpServer, Auth: &auth}, *portSpec, *servicePort) if err != nil { log.Fatalf("Error: %#v", err) } return } else if method == "stop" { err = cloudcfg.StopController(flag.Arg(1), kube_client.Client{Host: *httpServer, Auth: &auth}) if err != nil { log.Fatalf("Error: %#v", err) } return } else if method == "rm" { err = cloudcfg.DeleteController(flag.Arg(1), kube_client.Client{Host: *httpServer, Auth: &auth}) if err != nil { log.Fatalf("Error: %#v", err) } return } else { log.Fatalf("Unknown command: %s", method) } if err != nil { log.Fatalf("Error: %#v", err) } var body string body, err = cloudcfg.DoRequest(request, auth.User, auth.Password) if err != nil { log.Fatalf("Error: %#v", err) } err = printer.Print(body, os.Stdout) if err != nil { log.Fatalf("Failed to print: %#v", err) } fmt.Print("\n") }