mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	fix thirdparty API, now the config file of thirdpartyresource also need to group/version instead of version
This commit is contained in:
		@@ -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,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user