Add the ability to print objects that are parsed in, without sending them anywhere.

pull/6/head
Brendan Burns 2014-09-26 20:35:12 -07:00
parent de3799d605
commit 8f1643bc0c
1 changed files with 44 additions and 30 deletions

View File

@ -266,12 +266,48 @@ func checkStorage(storage string) bool {
return false return false
} }
func getPrinter() kubecfg.ResourcePrinter {
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 nil
}
} 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 nil
}
printer = &kubecfg.TemplatePrinter{
Template: tmpl,
}
default:
printer = humanReadablePrinter()
}
return printer
}
func executeAPIRequest(method string, c *client.Client) bool { func executeAPIRequest(method string, c *client.Client) bool {
storage, path, hasSuffix := storagePathFromArg(flag.Arg(1)) storage, path, hasSuffix := storagePathFromArg(flag.Arg(1))
validStorage := checkStorage(storage) validStorage := checkStorage(storage)
verb := "" verb := ""
setBody := false setBody := false
var version uint64 var version uint64
printer := getPrinter()
switch method { switch method {
case "get": case "get":
verb = "GET" verb = "GET"
@ -309,6 +345,14 @@ func executeAPIRequest(method string, c *client.Client) bool {
if !validStorage || !hasSuffix { if !validStorage || !hasSuffix {
glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage()) glog.Fatalf("usage: kubecfg [OPTIONS] %s <%s>/<id>", method, prettyWireStorage())
} }
case "print":
data := readConfig(storage, c.RESTClient.Codec)
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: default:
return false return false
} }
@ -345,36 +389,6 @@ func executeAPIRequest(method string, c *client.Client) bool {
return false 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 = humanReadablePrinter()
}
if err = printer.PrintObj(obj, os.Stdout); err != nil { if err = printer.PrintObj(obj, os.Stdout); err != nil {
body, _ := result.Raw() body, _ := result.Raw()
glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body)) glog.Fatalf("Failed to print: %v\nRaw received object:\n%#v\n\nBody received: %v", err, obj, string(body))