mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-06 02:34:03 +00:00
Merge pull request #45823 from deads2k/tpr-13-selflink
Automatic merge from submit-queue (batch tested with PRs 43696, 45823) Handle self links on customresources Fixes https://github.com/kubernetes/kubernetes/issues/45776 I started from https://github.com/kubernetes/kubernetes/pull/45777 and wrote the code to make it work properly. @sdminonne ptal
This commit is contained in:
commit
278b1e56c2
@ -20,6 +20,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"path"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@ -257,14 +258,23 @@ func (r *customResourceDefinitionHandler) getServingInfoFor(customResourceDefini
|
|||||||
parameterScheme.AddGeneratedDeepCopyFuncs(metav1.GetGeneratedDeepCopyFuncs()...)
|
parameterScheme.AddGeneratedDeepCopyFuncs(metav1.GetGeneratedDeepCopyFuncs()...)
|
||||||
parameterCodec := runtime.NewParameterCodec(parameterScheme)
|
parameterCodec := runtime.NewParameterCodec(parameterScheme)
|
||||||
|
|
||||||
|
selfLinkPrefix := ""
|
||||||
|
switch customResourceDefinition.Spec.Scope {
|
||||||
|
case apiextensions.ClusterScoped:
|
||||||
|
selfLinkPrefix = "/" + path.Join("apis", customResourceDefinition.Spec.Group, customResourceDefinition.Spec.Version) + "/"
|
||||||
|
case apiextensions.NamespaceScoped:
|
||||||
|
selfLinkPrefix = "/" + path.Join("apis", customResourceDefinition.Spec.Group, customResourceDefinition.Spec.Version, "namespaces") + "/"
|
||||||
|
}
|
||||||
|
|
||||||
requestScope := handlers.RequestScope{
|
requestScope := handlers.RequestScope{
|
||||||
Namer: handlers.ContextBasedNaming{
|
Namer: handlers.ContextBasedNaming{
|
||||||
GetContext: func(req *http.Request) apirequest.Context {
|
GetContext: func(req *http.Request) apirequest.Context {
|
||||||
ret, _ := r.requestContextMapper.Get(req)
|
ret, _ := r.requestContextMapper.Get(req)
|
||||||
return ret
|
return ret
|
||||||
},
|
},
|
||||||
SelfLinker: meta.NewAccessor(),
|
SelfLinker: meta.NewAccessor(),
|
||||||
ClusterScoped: customResourceDefinition.Spec.Scope == apiextensions.ClusterScoped,
|
ClusterScoped: customResourceDefinition.Spec.Scope == apiextensions.ClusterScoped,
|
||||||
|
SelfLinkPathPrefix: selfLinkPrefix,
|
||||||
},
|
},
|
||||||
ContextFunc: func(req *http.Request) apirequest.Context {
|
ContextFunc: func(req *http.Request) apirequest.Context {
|
||||||
ret, _ := r.requestContextMapper.Get(req)
|
ret, _ := r.requestContextMapper.Get(req)
|
||||||
|
@ -167,3 +167,36 @@ func TestSimpleCRUD(t *testing.T) {
|
|||||||
t.Errorf("missing watch event")
|
t.Errorf("missing watch event")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSelfLink(t *testing.T) {
|
||||||
|
stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServer()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer close(stopCh)
|
||||||
|
|
||||||
|
noxuDefinition := testserver.NewNoxuCustomResourceDefinition()
|
||||||
|
noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ns := "not-the-default"
|
||||||
|
noxuNamespacedResourceClient := noxuVersionClient.Resource(&metav1.APIResource{
|
||||||
|
Name: noxuDefinition.Spec.Names.Plural,
|
||||||
|
Namespaced: true,
|
||||||
|
}, ns)
|
||||||
|
|
||||||
|
noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo")
|
||||||
|
createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if e, a := "/apis/mygroup.example.com/v1alpha1/namespaces/not-the-default/noxus/foo", createdNoxuInstance.GetSelfLink(); e != a {
|
||||||
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO add test for cluster scoped self-link when its available
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user