mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
fix thirdparty API, now the config file of thirdpartyresource also need to group/version instead of version
This commit is contained in:
parent
a448b5e154
commit
f4ff0f7683
@ -37,3 +37,12 @@ func GetGroup(groupVersion string) string {
|
|||||||
}
|
}
|
||||||
return s[0]
|
return s[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGroupVersion returns the "group/version". It returns "version" is if group
|
||||||
|
// is empty. It returns "group/" if version is empty.
|
||||||
|
func GetGroupVersion(group, version string) string {
|
||||||
|
if len(group) == 0 {
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
return group + "/" + version
|
||||||
|
}
|
||||||
|
@ -36,6 +36,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
|
apiutil "k8s.io/kubernetes/pkg/api/util"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
expapi "k8s.io/kubernetes/pkg/apis/experimental"
|
expapi "k8s.io/kubernetes/pkg/apis/experimental"
|
||||||
"k8s.io/kubernetes/pkg/apiserver"
|
"k8s.io/kubernetes/pkg/apiserver"
|
||||||
@ -930,7 +931,7 @@ func (m *Master) InstallThirdPartyResource(rsrc *expapi.ThirdPartyResource) erro
|
|||||||
func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupVersion {
|
func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupVersion {
|
||||||
resourceStorage := thirdpartyresourcedataetcd.NewREST(m.thirdPartyStorage, group, kind)
|
resourceStorage := thirdpartyresourcedataetcd.NewREST(m.thirdPartyStorage, group, kind)
|
||||||
|
|
||||||
apiRoot := makeThirdPartyPath(group)
|
apiRoot := makeThirdPartyPath("")
|
||||||
|
|
||||||
storage := map[string]rest.Storage{
|
storage := map[string]rest.Storage{
|
||||||
strings.ToLower(kind) + "s": resourceStorage,
|
strings.ToLower(kind) + "s": resourceStorage,
|
||||||
@ -938,10 +939,10 @@ func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupV
|
|||||||
|
|
||||||
return &apiserver.APIGroupVersion{
|
return &apiserver.APIGroupVersion{
|
||||||
Root: apiRoot,
|
Root: apiRoot,
|
||||||
Version: version,
|
Version: apiutil.GetGroupVersion(group, version),
|
||||||
APIRequestInfoResolver: m.newAPIRequestInfoResolver(),
|
APIRequestInfoResolver: m.newAPIRequestInfoResolver(),
|
||||||
|
|
||||||
Creater: thirdpartyresourcedata.NewObjectCreator(version, api.Scheme),
|
Creater: thirdpartyresourcedata.NewObjectCreator(group, version, api.Scheme),
|
||||||
Convertor: api.Scheme,
|
Convertor: api.Scheme,
|
||||||
Typer: api.Scheme,
|
Typer: api.Scheme,
|
||||||
|
|
||||||
|
@ -681,7 +681,7 @@ func testInstallThirdPartyAPIPostForVersion(t *testing.T, version string) {
|
|||||||
},
|
},
|
||||||
TypeMeta: unversioned.TypeMeta{
|
TypeMeta: unversioned.TypeMeta{
|
||||||
Kind: "Foo",
|
Kind: "Foo",
|
||||||
APIVersion: version,
|
APIVersion: "company.com/" + version,
|
||||||
},
|
},
|
||||||
SomeField: "test field",
|
SomeField: "test field",
|
||||||
OtherField: 10,
|
OtherField: 10,
|
||||||
|
@ -30,10 +30,13 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const thirdpartyprefix = "/apis/"
|
const thirdpartyprefix = "/apis"
|
||||||
|
|
||||||
func makeThirdPartyPath(group string) string {
|
func makeThirdPartyPath(group string) string {
|
||||||
return thirdpartyprefix + group
|
if len(group) == 0 {
|
||||||
|
return thirdpartyprefix
|
||||||
|
}
|
||||||
|
return thirdpartyprefix + "/" + group
|
||||||
}
|
}
|
||||||
|
|
||||||
// resourceInterface is the interface for the parts of the master that know how to add/remove
|
// resourceInterface is the interface for the parts of the master that know how to add/remove
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
apiutil "k8s.io/kubernetes/pkg/api/util"
|
||||||
"k8s.io/kubernetes/pkg/apis/experimental"
|
"k8s.io/kubernetes/pkg/apis/experimental"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
@ -48,12 +49,12 @@ func (t *thirdPartyResourceDataMapper) GroupForResource(resource string) (string
|
|||||||
return t.mapper.GroupForResource(resource)
|
return t.mapper.GroupForResource(resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *thirdPartyResourceDataMapper) RESTMapping(kind string, versions ...string) (*meta.RESTMapping, error) {
|
func (t *thirdPartyResourceDataMapper) RESTMapping(kind string, groupVersions ...string) (*meta.RESTMapping, error) {
|
||||||
if len(versions) != 1 {
|
if len(groupVersions) != 1 {
|
||||||
return nil, fmt.Errorf("unexpected set of versions: %v", versions)
|
return nil, fmt.Errorf("unexpected set of groupVersions: %v", groupVersions)
|
||||||
}
|
}
|
||||||
if versions[0] != t.version {
|
if groupVersions[0] != apiutil.GetGroupVersion(t.group, t.version) {
|
||||||
return nil, fmt.Errorf("unknown version %s expected %s", versions[0], t.version)
|
return nil, fmt.Errorf("unknown version %s expected %s", groupVersions[0], apiutil.GetGroupVersion(t.group, t.version))
|
||||||
}
|
}
|
||||||
if kind != "ThirdPartyResourceData" {
|
if kind != "ThirdPartyResourceData" {
|
||||||
return nil, fmt.Errorf("unknown kind %s expected %s", kind, t.kind)
|
return nil, fmt.Errorf("unknown kind %s expected %s", kind, t.kind)
|
||||||
@ -266,28 +267,29 @@ func (t *thirdPartyResourceDataCodec) EncodeToStream(obj runtime.Object, stream
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewObjectCreator(version string, delegate runtime.ObjectCreater) runtime.ObjectCreater {
|
func NewObjectCreator(group, version string, delegate runtime.ObjectCreater) runtime.ObjectCreater {
|
||||||
return &thirdPartyResourceDataCreator{version, delegate}
|
return &thirdPartyResourceDataCreator{group, version, delegate}
|
||||||
}
|
}
|
||||||
|
|
||||||
type thirdPartyResourceDataCreator struct {
|
type thirdPartyResourceDataCreator struct {
|
||||||
|
group string
|
||||||
version string
|
version string
|
||||||
delegate runtime.ObjectCreater
|
delegate runtime.ObjectCreater
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *thirdPartyResourceDataCreator) New(version, kind string) (out runtime.Object, err error) {
|
func (t *thirdPartyResourceDataCreator) New(groupVersion, kind string) (out runtime.Object, err error) {
|
||||||
switch kind {
|
switch kind {
|
||||||
case "ThirdPartyResourceData":
|
case "ThirdPartyResourceData":
|
||||||
if t.version != version {
|
if apiutil.GetGroupVersion(t.group, t.version) != groupVersion {
|
||||||
return nil, fmt.Errorf("unknown version %s for kind %s", version, kind)
|
return nil, fmt.Errorf("unknown version %s for kind %s", groupVersion, kind)
|
||||||
}
|
}
|
||||||
return &experimental.ThirdPartyResourceData{}, nil
|
return &experimental.ThirdPartyResourceData{}, nil
|
||||||
case "ThirdPartyResourceDataList":
|
case "ThirdPartyResourceDataList":
|
||||||
if t.version != version {
|
if apiutil.GetGroupVersion(t.group, t.version) != groupVersion {
|
||||||
return nil, fmt.Errorf("unknown version %s for kind %s", version, kind)
|
return nil, fmt.Errorf("unknown version %s for kind %s", groupVersion, kind)
|
||||||
}
|
}
|
||||||
return &experimental.ThirdPartyResourceDataList{}, nil
|
return &experimental.ThirdPartyResourceDataList{}, nil
|
||||||
default:
|
default:
|
||||||
return t.delegate.New(version, kind)
|
return t.delegate.New(groupVersion, kind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ func TestCodec(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCreater(t *testing.T) {
|
func TestCreater(t *testing.T) {
|
||||||
creater := NewObjectCreator("creater version", api.Scheme)
|
creater := NewObjectCreator("creater group", "creater version", api.Scheme)
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
version string
|
version string
|
||||||
@ -147,7 +147,7 @@ func TestCreater(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "valid ThirdPartyResourceData creation",
|
name: "valid ThirdPartyResourceData creation",
|
||||||
version: "creater version",
|
version: "creater group/creater version",
|
||||||
kind: "ThirdPartyResourceData",
|
kind: "ThirdPartyResourceData",
|
||||||
expectedObj: &experimental.ThirdPartyResourceData{},
|
expectedObj: &experimental.ThirdPartyResourceData{},
|
||||||
expectErr: false,
|
expectErr: false,
|
||||||
|
Loading…
Reference in New Issue
Block a user