mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 04:33:26 +00:00
Relax to using namer instead of selflinker in API groupversion
This commit is contained in:
parent
c8ee055b73
commit
0ad588b27b
@ -843,7 +843,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
|
|
||||||
requestScopes[v.Name] = &handlers.RequestScope{
|
requestScopes[v.Name] = &handlers.RequestScope{
|
||||||
Namer: handlers.ContextBasedNaming{
|
Namer: handlers.ContextBasedNaming{
|
||||||
SelfLinker: meta.NewAccessor(),
|
Namer: meta.NewAccessor(),
|
||||||
ClusterScoped: clusterScoped,
|
ClusterScoped: clusterScoped,
|
||||||
SelfLinkPathPrefix: selfLinkPrefix,
|
SelfLinkPathPrefix: selfLinkPrefix,
|
||||||
},
|
},
|
||||||
@ -896,7 +896,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
scaleScope.Serializer = serializer.NewCodecFactory(scaleConverter.Scheme())
|
scaleScope.Serializer = serializer.NewCodecFactory(scaleConverter.Scheme())
|
||||||
scaleScope.Kind = autoscalingv1.SchemeGroupVersion.WithKind("Scale")
|
scaleScope.Kind = autoscalingv1.SchemeGroupVersion.WithKind("Scale")
|
||||||
scaleScope.Namer = handlers.ContextBasedNaming{
|
scaleScope.Namer = handlers.ContextBasedNaming{
|
||||||
SelfLinker: meta.NewAccessor(),
|
Namer: meta.NewAccessor(),
|
||||||
ClusterScoped: clusterScoped,
|
ClusterScoped: clusterScoped,
|
||||||
SelfLinkPathPrefix: selfLinkPrefix,
|
SelfLinkPathPrefix: selfLinkPrefix,
|
||||||
SelfLinkPathSuffix: "/scale",
|
SelfLinkPathSuffix: "/scale",
|
||||||
@ -921,7 +921,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
statusScope := *requestScopes[v.Name]
|
statusScope := *requestScopes[v.Name]
|
||||||
statusScope.Subresource = "status"
|
statusScope.Subresource = "status"
|
||||||
statusScope.Namer = handlers.ContextBasedNaming{
|
statusScope.Namer = handlers.ContextBasedNaming{
|
||||||
SelfLinker: meta.NewAccessor(),
|
Namer: meta.NewAccessor(),
|
||||||
ClusterScoped: clusterScoped,
|
ClusterScoped: clusterScoped,
|
||||||
SelfLinkPathPrefix: selfLinkPrefix,
|
SelfLinkPathPrefix: selfLinkPrefix,
|
||||||
SelfLinkPathSuffix: "/status",
|
SelfLinkPathSuffix: "/status",
|
||||||
|
@ -292,14 +292,6 @@ type Namer interface {
|
|||||||
Namespace(obj Object) (string, error)
|
Namespace(obj Object) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelfLinker provides methods for setting and retrieving the SelfLink field of an API object.
|
|
||||||
type SelfLinker interface {
|
|
||||||
SelfLink(obj Object) (string, error)
|
|
||||||
|
|
||||||
// Knowing Name or Namespace is sometimes necessary to use a SelfLinker.
|
|
||||||
Namer
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
|
// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
|
||||||
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
|
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
|
||||||
// serializers to set the kind, version, and group the object is represented as. An Object may choose
|
// serializers to set the kind, version, and group the object is represented as. An Object may choose
|
||||||
|
@ -298,51 +298,6 @@ func TestResourceVersionerOfAPI(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTypeMetaSelfLinker(t *testing.T) {
|
|
||||||
table := map[string]struct {
|
|
||||||
obj runtime.Object
|
|
||||||
expect string
|
|
||||||
try string
|
|
||||||
succeed bool
|
|
||||||
}{
|
|
||||||
"normal": {
|
|
||||||
obj: &MyAPIObject{TypeMeta: InternalTypeMeta{SelfLink: "foobar"}},
|
|
||||||
expect: "foobar",
|
|
||||||
try: "newbar",
|
|
||||||
succeed: true,
|
|
||||||
},
|
|
||||||
"fail": {
|
|
||||||
obj: &MyIncorrectlyMarkedAsAPIObject{},
|
|
||||||
succeed: false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
linker := runtime.SelfLinker(meta.NewAccessor())
|
|
||||||
for name, item := range table {
|
|
||||||
got, err := linker.SelfLink(item.obj)
|
|
||||||
if e, a := item.succeed, err == nil; e != a {
|
|
||||||
t.Errorf("%v: expected %v, got %v", name, e, a)
|
|
||||||
}
|
|
||||||
if e, a := item.expect, got; item.succeed && e != a {
|
|
||||||
t.Errorf("%v: expected %v, got %v", name, e, a)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = linker.SetSelfLink(item.obj, item.try)
|
|
||||||
if e, a := item.succeed, err == nil; e != a {
|
|
||||||
t.Errorf("%v: expected %v, got %v", name, e, a)
|
|
||||||
}
|
|
||||||
if item.succeed {
|
|
||||||
got, err := linker.SelfLink(item.obj)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("%v: expected no err, got %v", name, err)
|
|
||||||
}
|
|
||||||
if e, a := item.try, got; e != a {
|
|
||||||
t.Errorf("%v: expected %v, got %v", name, e, a)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type MyAPIObject2 struct {
|
type MyAPIObject2 struct {
|
||||||
metav1.TypeMeta
|
metav1.TypeMeta
|
||||||
metav1.ObjectMeta
|
metav1.ObjectMeta
|
||||||
|
@ -126,7 +126,7 @@ var newCodec = codecs.LegacyCodec(newGroupVersion)
|
|||||||
var parameterCodec = runtime.NewParameterCodec(scheme)
|
var parameterCodec = runtime.NewParameterCodec(scheme)
|
||||||
|
|
||||||
var accessor = meta.NewAccessor()
|
var accessor = meta.NewAccessor()
|
||||||
var selfLinker runtime.SelfLinker = accessor
|
var namer runtime.Namer = accessor
|
||||||
var admissionControl admission.Interface
|
var admissionControl admission.Interface
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -232,8 +232,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
||||||
Defaulter: scheme,
|
Defaulter: scheme,
|
||||||
Typer: scheme,
|
Typer: scheme,
|
||||||
// TODO(wojtek-t): Switch to Namer.
|
Namer: namer,
|
||||||
Linker: selfLinker,
|
|
||||||
RootScopedKinds: sets.NewString("SimpleRoot"),
|
RootScopedKinds: sets.NewString("SimpleRoot"),
|
||||||
|
|
||||||
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
||||||
@ -3280,7 +3279,7 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
||||||
Defaulter: scheme,
|
Defaulter: scheme,
|
||||||
Typer: scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Namer: namer,
|
||||||
RootScopedKinds: sets.NewString("SimpleRoot"),
|
RootScopedKinds: sets.NewString("SimpleRoot"),
|
||||||
|
|
||||||
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
||||||
@ -3313,7 +3312,7 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
||||||
Defaulter: scheme,
|
Defaulter: scheme,
|
||||||
Typer: scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Namer: namer,
|
||||||
|
|
||||||
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
||||||
|
|
||||||
@ -4100,7 +4099,7 @@ func TestXGSubresource(t *testing.T) {
|
|||||||
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
|
||||||
Defaulter: scheme,
|
Defaulter: scheme,
|
||||||
Typer: scheme,
|
Typer: scheme,
|
||||||
Linker: selfLinker,
|
Namer: namer,
|
||||||
|
|
||||||
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
EquivalentResourceRegistry: runtime.NewEquivalentResourceRegistry(),
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ type APIGroupVersion struct {
|
|||||||
Convertor runtime.ObjectConvertor
|
Convertor runtime.ObjectConvertor
|
||||||
ConvertabilityChecker ConvertabilityChecker
|
ConvertabilityChecker ConvertabilityChecker
|
||||||
Defaulter runtime.ObjectDefaulter
|
Defaulter runtime.ObjectDefaulter
|
||||||
Linker runtime.SelfLinker
|
Namer runtime.Namer
|
||||||
UnsafeConvertor runtime.ObjectConvertor
|
UnsafeConvertor runtime.ObjectConvertor
|
||||||
TypeConverter fieldmanager.TypeConverter
|
TypeConverter fieldmanager.TypeConverter
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ type ScopeNamer interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ContextBasedNaming struct {
|
type ContextBasedNaming struct {
|
||||||
SelfLinker runtime.SelfLinker
|
Namer runtime.Namer
|
||||||
ClusterScoped bool
|
ClusterScoped bool
|
||||||
|
|
||||||
SelfLinkPathPrefix string
|
SelfLinkPathPrefix string
|
||||||
@ -70,14 +70,14 @@ func (n ContextBasedNaming) Name(req *http.Request) (namespace, name string, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n ContextBasedNaming) ObjectName(obj runtime.Object) (namespace, name string, err error) {
|
func (n ContextBasedNaming) ObjectName(obj runtime.Object) (namespace, name string, err error) {
|
||||||
name, err = n.SelfLinker.Name(obj)
|
name, err = n.Namer.Name(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
return "", "", errEmptyName
|
return "", "", errEmptyName
|
||||||
}
|
}
|
||||||
namespace, err = n.SelfLinker.Namespace(obj)
|
namespace, err = n.Namer.Namespace(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
apiResource.Namespaced = false
|
apiResource.Namespaced = false
|
||||||
apiResource.Kind = resourceKind
|
apiResource.Kind = resourceKind
|
||||||
namer := handlers.ContextBasedNaming{
|
namer := handlers.ContextBasedNaming{
|
||||||
SelfLinker: a.group.Linker,
|
Namer: a.group.Namer,
|
||||||
ClusterScoped: true,
|
ClusterScoped: true,
|
||||||
SelfLinkPathPrefix: gpath.Join(a.prefix, resource) + "/",
|
SelfLinkPathPrefix: gpath.Join(a.prefix, resource) + "/",
|
||||||
SelfLinkPathSuffix: suffix,
|
SelfLinkPathSuffix: suffix,
|
||||||
@ -477,7 +477,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
apiResource.Namespaced = true
|
apiResource.Namespaced = true
|
||||||
apiResource.Kind = resourceKind
|
apiResource.Kind = resourceKind
|
||||||
namer := handlers.ContextBasedNaming{
|
namer := handlers.ContextBasedNaming{
|
||||||
SelfLinker: a.group.Linker,
|
Namer: a.group.Namer,
|
||||||
ClusterScoped: false,
|
ClusterScoped: false,
|
||||||
SelfLinkPathPrefix: gpath.Join(a.prefix, namespaceParamName) + "/",
|
SelfLinkPathPrefix: gpath.Join(a.prefix, namespaceParamName) + "/",
|
||||||
SelfLinkPathSuffix: itemPathSuffix,
|
SelfLinkPathSuffix: itemPathSuffix,
|
||||||
|
@ -676,7 +676,7 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
|
|||||||
UnsafeConvertor: runtime.UnsafeObjectConvertor(apiGroupInfo.Scheme),
|
UnsafeConvertor: runtime.UnsafeObjectConvertor(apiGroupInfo.Scheme),
|
||||||
Defaulter: apiGroupInfo.Scheme,
|
Defaulter: apiGroupInfo.Scheme,
|
||||||
Typer: apiGroupInfo.Scheme,
|
Typer: apiGroupInfo.Scheme,
|
||||||
Linker: runtime.SelfLinker(meta.NewAccessor()),
|
Namer: runtime.Namer(meta.NewAccessor()),
|
||||||
|
|
||||||
EquivalentResourceRegistry: s.EquivalentResourceRegistry,
|
EquivalentResourceRegistry: s.EquivalentResourceRegistry,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user