From 61ac2f7437f9fe72eef8cbfd9ef5710447a9c769 Mon Sep 17 00:00:00 2001 From: Salvatore Dario MINONNE Date: Mon, 15 Dec 2014 17:32:46 +0000 Subject: [PATCH] kubectl delete command: adding labelSelector Add a Visitor pattern on top of ResourcesFromArgs Allows ResourcesFromArgs to return an opaque list of items and have client commands react to them. Change request.go to return apiserver errors for arbitrary status codes to better respond to generic actions that don't make sense (kubectl delete operations foo) --- pkg/client/request.go | 17 +++- pkg/kubectl/cmd/delete.go | 32 ++++--- pkg/kubectl/cmd/resource.go | 167 +++++++++++++++++++++++++++++++++++- pkg/kubectl/resthelper.go | 4 + 4 files changed, 207 insertions(+), 13 deletions(-) diff --git a/pkg/client/request.go b/pkg/client/request.go index 1e16b98eeaf..de16849f75e 100644 --- a/pkg/client/request.go +++ b/pkg/client/request.go @@ -411,11 +411,26 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) ([]b switch { case resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent: if !isStatusResponse { - return nil, false, &UnexpectedStatusError{ + var err error = &UnexpectedStatusError{ Request: req, Response: resp, Body: string(body), } + // TODO: handle other error classes we know about + switch resp.StatusCode { + case http.StatusConflict: + if req.Method == "POST" { + // TODO: add Resource() and ResourceName() as Request methods so that we can set these + err = errors.NewAlreadyExists("", "") + } else { + err = errors.NewConflict("", "", err) + } + case http.StatusNotFound: + err = errors.NewNotFound("", "") + case http.StatusBadRequest: + err = errors.NewBadRequest(err.Error()) + } + return nil, false, err } return nil, false, errors.FromObject(&status) } diff --git a/pkg/kubectl/cmd/delete.go b/pkg/kubectl/cmd/delete.go index 4ee75a6d8cb..9d220d6eeac 100644 --- a/pkg/kubectl/cmd/delete.go +++ b/pkg/kubectl/cmd/delete.go @@ -20,15 +20,17 @@ import ( "fmt" "io" - "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl" + "github.com/golang/glog" "github.com/spf13/cobra" + + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl" ) func (f *Factory) NewCmdDelete(out io.Writer) *cobra.Command { cmd := &cobra.Command{ - Use: "delete ([-f filename] | ( ))", + Use: "delete ([-f filename] | ( [( | -l