mirror of https://github.com/k3s-io/k3s
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.pull/6/head
commit
3f6dd889f3
|
@ -2818,6 +2818,16 @@ runTests() {
|
|||
kube::test::get_object_assert rolebinding/sarole "{{range.subjects}}{{.name}}:{{end}}" 'sa-name:'
|
||||
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 #
|
||||
###########################
|
||||
|
|
|
@ -60,6 +60,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
|||
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
|
||||
type StatusREST struct {
|
||||
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
|
||||
|
|
|
@ -67,6 +67,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Approva
|
|||
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.
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -25,6 +25,7 @@ go_library(
|
|||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
||||
"//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"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/probe"
|
||||
httpprober "k8s.io/kubernetes/pkg/probe/http"
|
||||
|
@ -117,3 +118,11 @@ func (rs *REST) getComponentStatus(name string, server Server) *api.ComponentSta
|
|||
|
||||
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/apiserver/pkg/registry/generic",
|
||||
"//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/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/configmap"
|
||||
|
@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
|||
}
|
||||
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/apiserver/pkg/registry/generic",
|
||||
"//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/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/endpoint"
|
||||
|
@ -52,3 +53,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
|||
}
|
||||
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/apiserver/pkg/registry/generic",
|
||||
"//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/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/event"
|
||||
|
@ -65,3 +66,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter, ttl uint64) *REST {
|
|||
}
|
||||
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.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/apiserver/pkg/registry/generic",
|
||||
"//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/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/limitrange"
|
||||
|
@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
|||
}
|
||||
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)
|
||||
}
|
||||
|
||||
// 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 {
|
||||
return r.store.New()
|
||||
}
|
||||
|
|
|
@ -186,3 +186,11 @@ func TestDeleteNamespaceWithCompleteFinalizers(t *testing.T) {
|
|||
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) {
|
||||
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}
|
||||
}
|
||||
|
||||
// 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.
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -195,3 +195,11 @@ func TestUpdateStatus(t *testing.T) {
|
|||
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}
|
||||
}
|
||||
|
||||
// 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.
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -192,3 +192,11 @@ func TestUpdateStatus(t *testing.T) {
|
|||
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)
|
||||
}
|
||||
|
||||
// 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.
|
||||
type BindingREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -795,3 +795,11 @@ func TestEtcdUpdateStatus(t *testing.T) {
|
|||
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}
|
||||
}
|
||||
|
||||
// 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
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -327,3 +327,11 @@ func TestScaleUpdate(t *testing.T) {
|
|||
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}
|
||||
}
|
||||
|
||||
// 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.
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -202,3 +202,11 @@ func TestUpdateStatus(t *testing.T) {
|
|||
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}
|
||||
}
|
||||
|
||||
// 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.
|
||||
type StatusREST struct {
|
||||
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/apiserver/pkg/registry/generic",
|
||||
"//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/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/serviceaccount"
|
||||
|
@ -53,3 +54,11 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
|||
}
|
||||
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}
|
||||
}
|
||||
|
||||
// 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
|
||||
type StatusREST struct {
|
||||
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
|
||||
|
|
|
@ -87,6 +87,14 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Rollbac
|
|||
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
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -388,3 +388,11 @@ func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) {
|
|||
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}
|
||||
}
|
||||
|
||||
// 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
|
||||
type StatusREST struct {
|
||||
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
|
||||
|
|
|
@ -55,3 +55,8 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
|||
}
|
||||
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}
|
||||
}
|
||||
|
||||
// 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
|
||||
type StatusREST struct {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
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}
|
||||
}
|
||||
|
||||
// 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
|
||||
type StatusREST struct {
|
||||
store *genericregistry.Store
|
||||
|
|
|
@ -15,6 +15,7 @@ go_library(
|
|||
"etcd.go",
|
||||
"node.go",
|
||||
"service.go",
|
||||
"shortNamesProvider.go",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
|
@ -30,6 +31,7 @@ go_library(
|
|||
"//vendor:k8s.io/apimachinery/pkg/watch",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
"//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/storage/etcd",
|
||||
"//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
|
||||
|
|
|
@ -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/schema"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
|
||||
"k8s.io/apiserver/pkg/endpoints/metrics"
|
||||
"k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
|
||||
"github.com/emicklei/go-restful"
|
||||
|
@ -368,6 +368,12 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||
resourceKind = kind
|
||||
}
|
||||
|
||||
var shortNames []string
|
||||
shortNamesProvider, ok := storage.(rest.ShortNamesProvider)
|
||||
if ok {
|
||||
shortNames = shortNamesProvider.ShortNames()
|
||||
}
|
||||
|
||||
var apiResource metav1.APIResource
|
||||
// Get the list of actions for the given scope.
|
||||
switch scope.Name() {
|
||||
|
@ -796,6 +802,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||
apiResource.Verbs = append(apiResource.Verbs, kubeVerb)
|
||||
}
|
||||
sort.Strings(apiResource.Verbs)
|
||||
apiResource.ShortNames = shortNames
|
||||
|
||||
return &apiResource, nil
|
||||
}
|
||||
|
|
|
@ -65,6 +65,11 @@ type KindProvider interface {
|
|||
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.
|
||||
type Lister interface {
|
||||
// NewList returns an empty object that can be used with the List call.
|
||||
|
|
Loading…
Reference in New Issue