Skip to content

Commit 79ad051

Browse files
Sebastian FlorekSebastian Florek
authored andcommitted
Merge pull request #756 from bryk/fix-verber
Fix generic delete: make it work with extension resources
2 parents 64afff1 + c50817f commit 79ad051

File tree

4 files changed

+43
-21
lines changed

4 files changed

+43
-21
lines changed

src/app/backend/handler/apihandler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func FormatResponseLog(resp *restful.Response, req *restful.Request) string {
8585
func CreateHttpApiHandler(client *client.Client, heapsterClient HeapsterClient,
8686
clientConfig clientcmd.ClientConfig) http.Handler {
8787

88-
verber := common.NewResourceVerber(client.RESTClient)
88+
verber := common.NewResourceVerber(client.RESTClient, client.ExtensionsClient.RESTClient)
8989
apiHandler := ApiHandler{client, heapsterClient, clientConfig, verber}
9090
wsContainer := restful.NewContainer()
9191

@@ -194,8 +194,8 @@ func CreateHttpApiHandler(client *client.Client, heapsterClient HeapsterClient,
194194
Writes(pod.PodList{}))
195195
podsWs.Route(
196196
podsWs.GET("/{namespace}/{pod}").
197-
To(apiHandler.handleGetPodDetail).
198-
Writes(pod.PodDetail{}))
197+
To(apiHandler.handleGetPodDetail).
198+
Writes(pod.PodDetail{}))
199199
wsContainer.Add(podsWs)
200200

201201
deploymentsWs := new(restful.WebService)

src/app/backend/resource/common/types.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,19 @@ const (
100100
// Mapping from resource kind to K8s apiserver API path. This is mostly pluralization, because
101101
// K8s apiserver uses plural paths and this project singular.
102102
// Must be kept in sync with the list of supported kinds.
103-
var kindToAPIPathMapping = map[string]string{
104-
ResourceKindService: "services",
105-
ResourceKindPod: "pods",
106-
ResourceKindEvent: "events",
107-
ResourceKindReplicationController: "replicationcontrollers",
108-
ResourceKindDeployment: "deployments",
109-
ResourceKindReplicaSet: "replicasets",
110-
ResourceKindDaemonSet: "daemonsets",
103+
var kindToAPIMapping = map[string]struct {
104+
// K8s resource name
105+
Resource string
106+
// Whether extensions client should be used. True for extensions client, false for normal.
107+
Extension bool
108+
}{
109+
ResourceKindService: {"services", false},
110+
ResourceKindPod: {"pods", false},
111+
ResourceKindEvent: {"events", false},
112+
ResourceKindReplicationController: {"replicationcontrollers", false},
113+
ResourceKindDeployment: {"deployments", true},
114+
ResourceKindReplicaSet: {"replicasets", true},
115+
ResourceKindDaemonSet: {"daemonsets", false},
111116
}
112117

113118
// IsSelectorMatching returns true when an object with the given

src/app/backend/resource/common/verber.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package common
1616

1717
import (
18-
"errors"
1918
"fmt"
2019

2120
"k8s.io/kubernetes/pkg/client/restclient"
@@ -24,29 +23,38 @@ import (
2423
// ResourceVerber is a struct responsible for doing common verb operations on resources, like
2524
// DELETE, PUT, UPDATE.
2625
type ResourceVerber struct {
27-
client RESTClient
26+
client RESTClient
27+
extensionsClient RESTClient
2828
}
2929

30+
// RESTClient is an interface for REST operations used in this file.
3031
type RESTClient interface {
3132
Delete() *restclient.Request
3233
}
3334

3435
// NewResourceVerber creates a new resource verber that uses the given client for performing
3536
// operations.
36-
func NewResourceVerber(client RESTClient) ResourceVerber {
37-
return ResourceVerber{client}
37+
func NewResourceVerber(client RESTClient, extensionsClient RESTClient) ResourceVerber {
38+
return ResourceVerber{client, extensionsClient}
3839
}
3940

4041
// Delete deletes the resource of the given kind in the given namespace with the given name.
4142
func (verber *ResourceVerber) Delete(kind string, namespace string, name string) error {
42-
apiPath, ok := kindToAPIPathMapping[kind]
43+
resourceSpec, ok := kindToAPIMapping[kind]
4344
if !ok {
44-
return errors.New(fmt.Sprintf("Unknown resource kind: %s", kind))
45+
return fmt.Errorf("Unknown resource kind: %s", kind)
4546
}
4647

47-
return verber.client.Delete().
48+
var client RESTClient
49+
if resourceSpec.Extension {
50+
client = verber.extensionsClient
51+
} else {
52+
client = verber.client
53+
}
54+
55+
return client.Delete().
4856
Namespace(namespace).
49-
Resource(apiPath).
57+
Resource(resourceSpec.Resource).
5058
Name(name).
5159
Do().
5260
Error()

src/test/backend/resource/common/verber_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,20 @@ func (c *FakeRESTClient) Delete() *restclient.Request {
2626
}), "DELETE", nil, "/api/v1", restclient.ContentConfig{}, nil, nil)
2727
}
2828

29-
func TestDeleteShouldPropagateErrors(t *testing.T) {
30-
verber := ResourceVerber{client: &FakeRESTClient{err: errors.New("err")}}
29+
func TestDeleteShouldPropagateErrorsAndChoseClient(t *testing.T) {
30+
verber := ResourceVerber{
31+
client: &FakeRESTClient{err: errors.New("err")},
32+
extensionsClient: &FakeRESTClient{err: errors.New("err from extensions")},
33+
}
3134

3235
err := verber.Delete("replicaset", "bar", "baz")
3336

37+
if !reflect.DeepEqual(err, errors.New("err from extensions")) {
38+
t.Fatalf("Expected error on verber delete but got %#v", err)
39+
}
40+
41+
err = verber.Delete("service", "bar", "baz")
42+
3443
if !reflect.DeepEqual(err, errors.New("err")) {
3544
t.Fatalf("Expected error on verber delete but got %#v", err)
3645
}

0 commit comments

Comments
 (0)