Merge pull request #40985 from p0lyn0mial/add_shortnames_to_discovery_api
Automatic merge from submit-queue (batch tested with PRs 40980, 40985) added short names for resources which are exposed during discovery **What this PR does / why we need it**: The changes add short names for resources. The short names will be delivered to kubectl during discovery.
This commit is contained in:
		| @@ -2818,6 +2818,16 @@ runTests() { | |||||||
|     kube::test::get_object_assert rolebinding/sarole "{{range.subjects}}{{.name}}:{{end}}" 'sa-name:' |     kube::test::get_object_assert rolebinding/sarole "{{range.subjects}}{{.name}}:{{end}}" 'sa-name:' | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|  |   ######################### | ||||||
|  |   # Assert short name     # | ||||||
|  |   ######################### | ||||||
|  |  | ||||||
|  |   kube::log::status "Testing propagation of short names for resources" | ||||||
|  |   output_message=$(kubectl get --raw=/api/v1) | ||||||
|  |  | ||||||
|  |   ## test if a short name is exported during discovery | ||||||
|  |   kube::test::if_has_string "${output_message}" '{"name":"configmaps","namespaced":true,"kind":"ConfigMap","verbs":\["create","delete","deletecollection","get","list","patch","update","watch"\],"shortNames":\["cm"\]}' | ||||||
|  |  | ||||||
|   ########################### |   ########################### | ||||||
|   # POD creation / deletion # |   # POD creation / deletion # | ||||||
|   ########################### |   ########################### | ||||||
|   | |||||||
| @@ -60,6 +60,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"hpa"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a daemonset | // StatusREST implements the REST endpoint for changing the status of a daemonset | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -140,4 +140,12 @@ func TestWatch(t *testing.T) { | |||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"hpa"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|  |  | ||||||
| // TODO TestUpdateStatus | // TODO TestUpdateStatus | ||||||
|   | |||||||
| @@ -67,6 +67,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Approva | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore}, &ApprovalREST{store: &approvalStore} | 	return &REST{store}, &StatusREST{store: &statusStore}, &ApprovalREST{store: &approvalStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"csr"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a CSR. | // StatusREST implements the REST endpoint for changing the status of a CSR. | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/util/net", |         "//vendor:k8s.io/apimachinery/pkg/util/net", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/endpoints/request", |         "//vendor:k8s.io/apiserver/pkg/endpoints/request", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ import ( | |||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	genericapirequest "k8s.io/apiserver/pkg/endpoints/request" | 	genericapirequest "k8s.io/apiserver/pkg/endpoints/request" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/probe" | 	"k8s.io/kubernetes/pkg/probe" | ||||||
| 	httpprober "k8s.io/kubernetes/pkg/probe/http" | 	httpprober "k8s.io/kubernetes/pkg/probe/http" | ||||||
| @@ -117,3 +118,11 @@ func (rs *REST) getComponentStatus(name string, server Server) *api.ComponentSta | |||||||
|  |  | ||||||
| 	return retVal | 	return retVal | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"cs"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic", |         "//vendor:k8s.io/apiserver/pkg/registry/generic", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apiserver/pkg/registry/generic" | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
| 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/core/configmap" | 	"k8s.io/kubernetes/pkg/registry/core/configmap" | ||||||
| @@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"cm"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -159,3 +159,11 @@ func TestWatch(t *testing.T) { | |||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"cm"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic", |         "//vendor:k8s.io/apiserver/pkg/registry/generic", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apiserver/pkg/registry/generic" | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
| 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/core/endpoint" | 	"k8s.io/kubernetes/pkg/registry/core/endpoint" | ||||||
| @@ -52,3 +53,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"ep"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -34,6 +34,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic", |         "//vendor:k8s.io/apiserver/pkg/registry/generic", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apiserver/pkg/registry/generic" | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
| 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/core/event" | 	"k8s.io/kubernetes/pkg/registry/core/event" | ||||||
| @@ -65,3 +66,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter, ttl uint64) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"ev"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -99,3 +99,11 @@ func TestDelete(t *testing.T) { | |||||||
| 	test := registrytest.New(t, storage.Store) | 	test := registrytest.New(t, storage.Store) | ||||||
| 	test.TestDelete(validNewEvent(test.TestNamespace())) | 	test.TestDelete(validNewEvent(test.TestNamespace())) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"ev"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -37,6 +37,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic", |         "//vendor:k8s.io/apiserver/pkg/registry/generic", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apiserver/pkg/registry/generic" | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
| 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/core/limitrange" | 	"k8s.io/kubernetes/pkg/registry/core/limitrange" | ||||||
| @@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"limits"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -157,3 +157,11 @@ func TestWatch(t *testing.T) { | |||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"limits"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -173,6 +173,14 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav | |||||||
| 	return r.Store.Delete(ctx, name, options) | 	return r.Store.Delete(ctx, name, options) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"ns"} | ||||||
|  | } | ||||||
|  |  | ||||||
| func (r *StatusREST) New() runtime.Object { | func (r *StatusREST) New() runtime.Object { | ||||||
| 	return r.store.New() | 	return r.store.New() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -186,3 +186,11 @@ func TestDeleteNamespaceWithCompleteFinalizers(t *testing.T) { | |||||||
| 		t.Errorf("unexpected error: %v", err) | 		t.Errorf("unexpected error: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"ns"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -140,3 +140,8 @@ var _ = rest.Redirector(&REST{}) | |||||||
| func (r *REST) ResourceLocation(ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { | func (r *REST) ResourceLocation(ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { | ||||||
| 	return node.ResourceLocation(r, r.connection, r.proxyTransport, ctx, id) | 	return node.ResourceLocation(r, r.connection, r.proxyTransport, ctx, id) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"no"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -150,3 +150,11 @@ func TestWatch(t *testing.T) { | |||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"no"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -61,6 +61,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"pv"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a persistentvolume. | // StatusREST implements the REST endpoint for changing the status of a persistentvolume. | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -195,3 +195,11 @@ func TestUpdateStatus(t *testing.T) { | |||||||
| 		t.Errorf("unexpected object: %s", diff.ObjectDiff(pvIn.Status, pvOut.Status)) | 		t.Errorf("unexpected object: %s", diff.ObjectDiff(pvIn.Status, pvOut.Status)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"pv"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -61,6 +61,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"pvc"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a persistentvolumeclaim. | // StatusREST implements the REST endpoint for changing the status of a persistentvolumeclaim. | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -192,3 +192,11 @@ func TestUpdateStatus(t *testing.T) { | |||||||
| 		t.Errorf("unexpected object: %s", diff.ObjectDiff(pvc.Status, pvcOut.Status)) | 		t.Errorf("unexpected object: %s", diff.ObjectDiff(pvc.Status, pvcOut.Status)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"pvc"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -105,6 +105,14 @@ func (r *REST) ResourceLocation(ctx genericapirequest.Context, name string) (*ur | |||||||
| 	return pod.ResourceLocation(r, r.proxyTransport, ctx, name) | 	return pod.ResourceLocation(r, r.proxyTransport, ctx, name) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"po"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // BindingREST implements the REST endpoint for binding pods to nodes when etcd is in use. | // BindingREST implements the REST endpoint for binding pods to nodes when etcd is in use. | ||||||
| type BindingREST struct { | type BindingREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -795,3 +795,11 @@ func TestEtcdUpdateStatus(t *testing.T) { | |||||||
| 		t.Errorf("objects differ: %v", diff.ObjectDiff(podOut, expected)) | 		t.Errorf("objects differ: %v", diff.ObjectDiff(podOut, expected)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"po"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -86,6 +86,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"rc"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a replication controller | // StatusREST implements the REST endpoint for changing the status of a replication controller | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -327,3 +327,11 @@ func TestScaleUpdate(t *testing.T) { | |||||||
| 		t.Fatalf("unexpected error, expecting an update conflict but got %v", err) | 		t.Fatalf("unexpected error, expecting an update conflict but got %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Controller.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"rc"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage.Controller, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -61,6 +61,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"quota"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a resourcequota. | // StatusREST implements the REST endpoint for changing the status of a resourcequota. | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -202,3 +202,11 @@ func TestUpdateStatus(t *testing.T) { | |||||||
| 		t.Errorf("unexpected object: %s", diff.ObjectDiff(resourcequotaIn, rqOut)) | 		t.Errorf("unexpected object: %s", diff.ObjectDiff(resourcequotaIn, rqOut)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"quota"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -60,6 +60,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"svc"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a service. | // StatusREST implements the REST endpoint for changing the status of a service. | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -167,3 +167,11 @@ func TestWatch(t *testing.T) { | |||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"svc"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime", |         "//vendor:k8s.io/apimachinery/pkg/runtime", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic", |         "//vendor:k8s.io/apiserver/pkg/registry/generic", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apiserver/pkg/registry/generic" | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
| 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | 	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/cachesize" | 	"k8s.io/kubernetes/pkg/registry/cachesize" | ||||||
| 	"k8s.io/kubernetes/pkg/registry/core/serviceaccount" | 	"k8s.io/kubernetes/pkg/registry/core/serviceaccount" | ||||||
| @@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"sa"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -133,3 +133,11 @@ func TestWatch(t *testing.T) { | |||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"sa"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -62,6 +62,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"ds"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a daemonset | // StatusREST implements the REST endpoint for changing the status of a daemonset | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -181,4 +181,12 @@ func TestWatch(t *testing.T) { | |||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"ds"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|  |  | ||||||
| // TODO TestUpdateStatus | // TODO TestUpdateStatus | ||||||
|   | |||||||
| @@ -87,6 +87,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Rollbac | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore}, &RollbackREST{store: store} | 	return &REST{store}, &StatusREST{store: &statusStore}, &RollbackREST{store: store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"deploy"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a deployment | // StatusREST implements the REST endpoint for changing the status of a deployment | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -388,3 +388,11 @@ func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) { | |||||||
| 		t.Fatalf("Unexpected error: %v", err) | 		t.Fatalf("Unexpected error: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Deployment.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"deploy"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage.Deployment, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -61,6 +61,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"ing"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of an ingress | // StatusREST implements the REST endpoint for changing the status of an ingress | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -224,4 +224,12 @@ func TestWatch(t *testing.T) { | |||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, _, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.Store.DestroyFunc() | ||||||
|  | 	expected := []string{"ing"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage, expected) | ||||||
|  | } | ||||||
|  |  | ||||||
| // TODO TestUpdateStatus | // TODO TestUpdateStatus | ||||||
|   | |||||||
| @@ -55,3 +55,8 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { | |||||||
| 	} | 	} | ||||||
| 	return &REST{store} | 	return &REST{store} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"psp"} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -85,6 +85,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Implement ShortNamesProvider | ||||||
|  | var _ rest.ShortNamesProvider = &REST{} | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"rs"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of a ReplicaSet | // StatusREST implements the REST endpoint for changing the status of a ReplicaSet | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -368,3 +368,11 @@ func TestStatusUpdate(t *testing.T) { | |||||||
| 		t.Errorf("we expected .status.replicas to be updated to %d but it was %v", defaultReplicas, rs.Status.Replicas) | 		t.Errorf("we expected .status.replicas to be updated to %d but it was %v", defaultReplicas, rs.Status.Replicas) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestShortNames(t *testing.T) { | ||||||
|  | 	storage, server := newStorage(t) | ||||||
|  | 	defer server.Terminate(t) | ||||||
|  | 	defer storage.ReplicaSet.DestroyFunc() | ||||||
|  | 	expected := []string{"rs"} | ||||||
|  | 	registrytest.AssertShortNames(t, storage.ReplicaSet, expected) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -61,6 +61,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { | |||||||
| 	return &REST{store}, &StatusREST{store: &statusStore} | 	return &REST{store}, &StatusREST{store: &statusStore} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. | ||||||
|  | func (r *REST) ShortNames() []string { | ||||||
|  | 	return []string{"pdb"} | ||||||
|  | } | ||||||
|  |  | ||||||
| // StatusREST implements the REST endpoint for changing the status of an podDisruptionBudget | // StatusREST implements the REST endpoint for changing the status of an podDisruptionBudget | ||||||
| type StatusREST struct { | type StatusREST struct { | ||||||
| 	store *genericregistry.Store | 	store *genericregistry.Store | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ go_library( | |||||||
|         "etcd.go", |         "etcd.go", | ||||||
|         "node.go", |         "node.go", | ||||||
|         "service.go", |         "service.go", | ||||||
|  |         "shortNamesProvider.go", | ||||||
|     ], |     ], | ||||||
|     tags = ["automanaged"], |     tags = ["automanaged"], | ||||||
|     deps = [ |     deps = [ | ||||||
| @@ -30,6 +31,7 @@ go_library( | |||||||
|         "//vendor:k8s.io/apimachinery/pkg/watch", |         "//vendor:k8s.io/apimachinery/pkg/watch", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/endpoints/request", |         "//vendor:k8s.io/apiserver/pkg/endpoints/request", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", |         "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", | ||||||
|  |         "//vendor:k8s.io/apiserver/pkg/registry/rest", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/registry/rest/resttest", |         "//vendor:k8s.io/apiserver/pkg/registry/rest/resttest", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/storage/etcd", |         "//vendor:k8s.io/apiserver/pkg/storage/etcd", | ||||||
|         "//vendor:k8s.io/apiserver/pkg/storage/etcd/testing", |         "//vendor:k8s.io/apiserver/pkg/storage/etcd/testing", | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								pkg/registry/registrytest/shortNamesProvider.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								pkg/registry/registrytest/shortNamesProvider.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2014 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package registrytest | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"reflect" | ||||||
|  | 	"testing" | ||||||
|  |  | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func AssertShortNames(t *testing.T, storage rest.ShortNamesProvider, expected []string) { | ||||||
|  | 	actual := storage.ShortNames() | ||||||
|  | 	ok := reflect.DeepEqual(actual, expected) | ||||||
|  | 	if !ok { | ||||||
|  | 		t.Errorf("short names not equal. expected = %v actual = %v", expected, actual) | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -35,10 +35,10 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | 	"k8s.io/apiserver/pkg/endpoints/handlers" | ||||||
| 	"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" | 	"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" | ||||||
| 	"k8s.io/apiserver/pkg/endpoints/metrics" | 	"k8s.io/apiserver/pkg/endpoints/metrics" | ||||||
| 	"k8s.io/apiserver/pkg/endpoints/request" | 	"k8s.io/apiserver/pkg/endpoints/request" | ||||||
| 	"k8s.io/apiserver/pkg/endpoints/handlers" |  | ||||||
| 	"k8s.io/apiserver/pkg/registry/rest" | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
|  |  | ||||||
| 	"github.com/emicklei/go-restful" | 	"github.com/emicklei/go-restful" | ||||||
| @@ -368,6 +368,12 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		resourceKind = kind | 		resourceKind = kind | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	var shortNames []string | ||||||
|  | 	shortNamesProvider, ok := storage.(rest.ShortNamesProvider) | ||||||
|  | 	if ok { | ||||||
|  | 		shortNames = shortNamesProvider.ShortNames() | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	var apiResource metav1.APIResource | 	var apiResource metav1.APIResource | ||||||
| 	// Get the list of actions for the given scope. | 	// Get the list of actions for the given scope. | ||||||
| 	switch scope.Name() { | 	switch scope.Name() { | ||||||
| @@ -796,6 +802,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		apiResource.Verbs = append(apiResource.Verbs, kubeVerb) | 		apiResource.Verbs = append(apiResource.Verbs, kubeVerb) | ||||||
| 	} | 	} | ||||||
| 	sort.Strings(apiResource.Verbs) | 	sort.Strings(apiResource.Verbs) | ||||||
|  | 	apiResource.ShortNames = shortNames | ||||||
|  |  | ||||||
| 	return &apiResource, nil | 	return &apiResource, nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -65,6 +65,11 @@ type KindProvider interface { | |||||||
| 	Kind() string | 	Kind() string | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ShortNamesProvider is an interface for RESTful storage services. Delivers a list of short names for a resource. The list is used by kubectl to have short names representation of resources. | ||||||
|  | type ShortNamesProvider interface { | ||||||
|  | 	ShortNames() []string | ||||||
|  | } | ||||||
|  |  | ||||||
| // Lister is an object that can retrieve resources that match the provided field and label criteria. | // Lister is an object that can retrieve resources that match the provided field and label criteria. | ||||||
| type Lister interface { | type Lister interface { | ||||||
| 	// NewList returns an empty object that can be used with the List call. | 	// NewList returns an empty object that can be used with the List call. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue