// Attempts to execute an API request func executeAPIRequest(method string, s *kube_client.Client) bool { parseStorage := func() string { if len(flag.Args()) != 2 { glog.Fatal("usage: kubecfg [OPTIONS] get|list|create|update|delete <url>") } return strings.Trim(flag.Arg(1), "/") } verb := "" switch method { case "get", "list": verb = "GET" case "delete": verb = "DELETE" case "create": verb = "POST" case "update": verb = "PUT" default: return false } r := s.Verb(verb). Path(parseStorage()). ParseSelector(*selector) if method == "create" || method == "update" { r.Body(readConfig(parseStorage())) } result := r.Do() obj, err := result.Get() if err != nil { glog.Fatalf("Got request error: %v\n", err) return false } var printer kubecfg.ResourcePrinter if *json { printer = &kubecfg.IdentityPrinter{} } else if *yaml { printer = &kubecfg.YAMLPrinter{} } else { printer = &kubecfg.HumanReadablePrinter{} } if err = printer.PrintObj(obj, os.Stdout); err != nil { body, _ := result.Raw() glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body)) } fmt.Print("\n") return true }
func executeAPIRequest(method string, s *kube_client.Client) bool { storage, path, hasSuffix := storagePathFromArg(flag.Arg(1)) validStorage := checkStorage(storage) verb := "" setBody := false var version uint64 switch method { case "get": verb = "GET" if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>[/<id>]", method, prettyWireStorage()) } case "list": verb = "GET" if !validStorage || hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>", method, prettyWireStorage()) } case "delete": verb = "DELETE" if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage()) } case "create": verb = "POST" setBody = true if !validStorage || hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>", method, prettyWireStorage()) } case "update": obj, err := s.Verb("GET").Path(path).Do().Get() if err != nil { glog.Fatalf("error obtaining resource version for update: %v", err) } jsonBase, err := api.FindJSONBase(obj) if err != nil { glog.Fatalf("error finding json base for update: %v", err) } version = jsonBase.ResourceVersion() verb = "PUT" setBody = true if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage()) } default: return false } r := s.Verb(verb). Path(path). ParseSelectorParam("labels", *selector) if setBody { if version != 0 { data := readConfig(storage) obj, err := api.Decode(data) if err != nil { glog.Fatalf("error setting resource version: %v", err) } jsonBase, err := api.FindJSONBase(obj) if err != nil { glog.Fatalf("error setting resource version: %v", err) } jsonBase.SetResourceVersion(version) data, err = api.Encode(obj) if err != nil { glog.Fatalf("error setting resource version: %v", err) } r.Body(data) } else { r.Body(readConfig(storage)) } } result := r.Do() obj, err := result.Get() if err != nil { glog.Fatalf("Got request error: %v\n", err) return false } var printer kubecfg.ResourcePrinter switch { case *json: printer = &kubecfg.IdentityPrinter{} case *yaml: printer = &kubecfg.YAMLPrinter{} case len(*templateFile) > 0 || len(*templateStr) > 0: var data []byte if len(*templateFile) > 0 { var err error data, err = ioutil.ReadFile(*templateFile) if err != nil { glog.Fatalf("Error reading template %s, %v\n", *templateFile, err) return false } } else { data = []byte(*templateStr) } tmpl, err := template.New("output").Parse(string(data)) if err != nil { glog.Fatalf("Error parsing template %s, %v\n", string(data), err) return false } printer = &kubecfg.TemplatePrinter{ Template: tmpl, } default: printer = &kubecfg.HumanReadablePrinter{} } if err = printer.PrintObj(obj, os.Stdout); err != nil { body, _ := result.Raw() glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body)) } fmt.Print("\n") return true }
func executeAPIRequest(ctx api.Context, method string, c *client.Client) bool { storage, path, hasSuffix := storagePathFromArg(flag.Arg(1)) validStorage := checkStorage(storage) verb := "" setBody := false var version string printer := getPrinter() switch method { case "get": verb = "GET" if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>[/<id>]", method, prettyWireStorage()) } case "list": verb = "GET" if !validStorage || hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>", method, prettyWireStorage()) } case "delete": verb = "DELETE" if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage()) } case "create": verb = "POST" setBody = true if !validStorage || hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>", method, prettyWireStorage()) } case "update": obj, err := c.Verb("GET").Namespace(api.Namespace(ctx)).Suffix(path).Do().Get() if err != nil { glog.Fatalf("error obtaining resource version for update: %v", err) } meta, err := meta.Accessor(obj) if err != nil { glog.Fatalf("error finding json base for update: %v", err) } version = meta.ResourceVersion() verb = "PUT" setBody = true if !validStorage || !hasSuffix { glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage()) } case "print": data := readConfig(storage, c) obj, err := latest.Codec.Decode(data) if err != nil { glog.Fatalf("error setting resource version: %v", err) } printer.PrintObj(obj, os.Stdout) return true default: return false } r := c.Verb(verb).Namespace(api.Namespace(ctx)).Suffix(path) if len(*selector) > 0 { r.ParseSelectorParam("labels", *selector) } if len(*fieldSelector) > 0 { r.ParseSelectorParam("fields", *fieldSelector) } if setBody { if len(version) > 0 { data := readConfig(storage, c) obj, err := latest.Codec.Decode(data) if err != nil { glog.Fatalf("error setting resource version: %v", err) } jsonBase, err := meta.Accessor(obj) if err != nil { glog.Fatalf("error setting resource version: %v", err) } jsonBase.SetResourceVersion(version) data, err = c.RESTClient.Codec.Encode(obj) if err != nil { glog.Fatalf("error setting resource version: %v", err) } r.Body(data) } else { r.Body(readConfig(storage, c)) } } result := r.Do() obj, err := result.Get() if err != nil { glog.Fatalf("Got request error: %v\n", err) return false } if err = printer.PrintObj(obj, os.Stdout); err != nil { body, _ := result.Raw() glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body)) } fmt.Print("\n") return true }
// Attempts to execute an API request func executeAPIRequest(method string, s *kube_client.Client) bool { parseStorage := func() string { if len(flag.Args()) != 2 { glog.Fatal("usage: kubecfg [OPTIONS] get|list|create|update|delete <url>") } return strings.Trim(flag.Arg(1), "/") } verb := "" switch method { case "get", "list": verb = "GET" case "delete": verb = "DELETE" case "create": verb = "POST" case "update": verb = "PUT" default: return false } r := s.Verb(verb). Path(parseStorage()). ParseSelector(*selector) if method == "create" || method == "update" { r.Body(readConfig(parseStorage())) } result := r.Do() obj, err := result.Get() if err != nil { glog.Fatalf("Got request error: %v\n", err) return false } var printer kubecfg.ResourcePrinter switch { case *json: printer = &kubecfg.IdentityPrinter{} case *yaml: printer = &kubecfg.YAMLPrinter{} case len(*templateFile) > 0 || len(*templateStr) > 0: var data []byte if len(*templateFile) > 0 { var err error data, err = ioutil.ReadFile(*templateFile) if err != nil { glog.Fatalf("Error reading template %s, %v\n", *templateFile, err) return false } } else { data = []byte(*templateStr) } tmpl, err := template.New("output").Parse(string(data)) if err != nil { glog.Fatalf("Error parsing template %s, %v\n", string(data), err) return false } printer = &kubecfg.TemplatePrinter{ Template: tmpl, } default: printer = &kubecfg.HumanReadablePrinter{} } if err = printer.PrintObj(obj, os.Stdout); err != nil { body, _ := result.Raw() glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body)) } fmt.Print("\n") return true }