Merge pull request #17227 from deads2k/gv-apigv
Auto commit by PR queue bot
This commit is contained in:
		| @@ -56,6 +56,15 @@ func ParseGroupVersion(gv string) (GroupVersion, error) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func ParseGroupVersionOrDie(gv string) GroupVersion { | ||||||
|  | 	ret, err := ParseGroupVersion(gv) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return ret | ||||||
|  | } | ||||||
|  |  | ||||||
| // MarshalJSON implements the json.Marshaller interface. | // MarshalJSON implements the json.Marshaller interface. | ||||||
| func (gv GroupVersion) MarshalJSON() ([]byte, error) { | func (gv GroupVersion) MarshalJSON() ([]byte, error) { | ||||||
| 	s := gv.String() | 	s := gv.String() | ||||||
|   | |||||||
| @@ -95,7 +95,7 @@ func (a *APIInstaller) NewWebService() *restful.WebService { | |||||||
| 	// TODO: change to restful.MIME_JSON when we set content type in client | 	// TODO: change to restful.MIME_JSON when we set content type in client | ||||||
| 	ws.Consumes("*/*") | 	ws.Consumes("*/*") | ||||||
| 	ws.Produces(restful.MIME_JSON) | 	ws.Produces(restful.MIME_JSON) | ||||||
| 	ws.ApiVersion(a.group.Version) | 	ws.ApiVersion(a.group.GroupVersion.String()) | ||||||
|  |  | ||||||
| 	return ws | 	return ws | ||||||
| } | } | ||||||
| @@ -104,9 +104,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 	admit := a.group.Admit | 	admit := a.group.Admit | ||||||
| 	context := a.group.Context | 	context := a.group.Context | ||||||
|  |  | ||||||
| 	serverVersion := a.group.ServerVersion | 	serverGroupVersion := a.group.GroupVersion | ||||||
| 	if len(serverVersion) == 0 { | 	if a.group.ServerGroupVersion != nil { | ||||||
| 		serverVersion = a.group.Version | 		serverGroupVersion = *a.group.ServerGroupVersion | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	var resource, subresource string | 	var resource, subresource string | ||||||
| @@ -126,13 +126,13 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	versionedPtr, err := a.group.Creater.New(a.group.Version, kind) | 	versionedPtr, err := a.group.Creater.New(a.group.GroupVersion.String(), kind) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	versionedObject := indirectArbitraryPointer(versionedPtr) | 	versionedObject := indirectArbitraryPointer(versionedPtr) | ||||||
|  |  | ||||||
| 	mapping, err := a.group.Mapper.RESTMapping(kind, a.group.Version) | 	mapping, err := a.group.Mapper.RESTMapping(kind, a.group.GroupVersion.String()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -148,7 +148,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		parentMapping, err := a.group.Mapper.RESTMapping(parentKind, a.group.Version) | 		parentMapping, err := a.group.Mapper.RESTMapping(parentKind, a.group.GroupVersion.String()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| @@ -181,14 +181,14 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 	if isLister { | 	if isLister { | ||||||
| 		list := lister.NewList() | 		list := lister.NewList() | ||||||
| 		_, listKind, err := a.group.Typer.ObjectVersionAndKind(list) | 		_, listKind, err := a.group.Typer.ObjectVersionAndKind(list) | ||||||
| 		versionedListPtr, err := a.group.Creater.New(a.group.Version, listKind) | 		versionedListPtr, err := a.group.Creater.New(a.group.GroupVersion.String(), listKind) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		versionedList = indirectArbitraryPointer(versionedListPtr) | 		versionedList = indirectArbitraryPointer(versionedListPtr) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	versionedListOptions, err := a.group.Creater.New(serverVersion, "ListOptions") | 	versionedListOptions, err := a.group.Creater.New(serverGroupVersion.String(), "ListOptions") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -196,7 +196,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 	var versionedDeleterObject interface{} | 	var versionedDeleterObject interface{} | ||||||
| 	switch { | 	switch { | ||||||
| 	case isGracefulDeleter: | 	case isGracefulDeleter: | ||||||
| 		objectPtr, err := a.group.Creater.New(serverVersion, "DeleteOptions") | 		objectPtr, err := a.group.Creater.New(serverGroupVersion.String(), "DeleteOptions") | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| @@ -206,7 +206,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		gracefulDeleter = rest.GracefulDeleteAdapter{Deleter: deleter} | 		gracefulDeleter = rest.GracefulDeleteAdapter{Deleter: deleter} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	versionedStatusPtr, err := a.group.Creater.New(serverVersion, "Status") | 	versionedStatusPtr, err := a.group.Creater.New(serverGroupVersion.String(), "Status") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -224,7 +224,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		versionedGetOptions, err = a.group.Creater.New(serverVersion, getOptionsKind) | 		versionedGetOptions, err = a.group.Creater.New(serverGroupVersion.String(), getOptionsKind) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| @@ -245,7 +245,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
| 			versionedConnectOptions, err = a.group.Creater.New(serverVersion, connectOptionsKind) | 			versionedConnectOptions, err = a.group.Creater.New(serverGroupVersion.String(), connectOptionsKind) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -379,8 +379,8 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag | |||||||
| 		Creater:          a.group.Creater, | 		Creater:          a.group.Creater, | ||||||
| 		Convertor:        a.group.Convertor, | 		Convertor:        a.group.Convertor, | ||||||
| 		Codec:            mapping.Codec, | 		Codec:            mapping.Codec, | ||||||
| 		APIVersion:       a.group.Version, | 		APIVersion:       a.group.GroupVersion.String(), | ||||||
| 		ServerAPIVersion: serverVersion, | 		ServerAPIVersion: serverGroupVersion.String(), | ||||||
| 		Resource:         resource, | 		Resource:         resource, | ||||||
| 		Subresource:      subresource, | 		Subresource:      subresource, | ||||||
| 		Kind:             kind, | 		Kind:             kind, | ||||||
|   | |||||||
| @@ -79,9 +79,8 @@ type Mux interface { | |||||||
| type APIGroupVersion struct { | type APIGroupVersion struct { | ||||||
| 	Storage map[string]rest.Storage | 	Storage map[string]rest.Storage | ||||||
|  |  | ||||||
| 	Root string | 	Root         string | ||||||
| 	// TODO: caesarxuchao: Version actually contains "group/version", refactor it to avoid confusion. | 	GroupVersion unversioned.GroupVersion | ||||||
| 	Version string |  | ||||||
|  |  | ||||||
| 	// RequestInfoResolver is used to parse URLs for the legacy proxy handler.  Don't use this for anything else | 	// RequestInfoResolver is used to parse URLs for the legacy proxy handler.  Don't use this for anything else | ||||||
| 	// TODO: refactor proxy handler to use sub resources | 	// TODO: refactor proxy handler to use sub resources | ||||||
| @@ -91,9 +90,8 @@ type APIGroupVersion struct { | |||||||
| 	// schema like api.Status, api.DeleteOptions, and api.ListOptions. Other implementors may | 	// schema like api.Status, api.DeleteOptions, and api.ListOptions. Other implementors may | ||||||
| 	// define a version "v1beta1" but want to use the Kubernetes "v1" internal objects. If | 	// define a version "v1beta1" but want to use the Kubernetes "v1" internal objects. If | ||||||
| 	// empty, defaults to Version. | 	// empty, defaults to Version. | ||||||
| 	// TODO: caesarxuchao: ServerVersion actually contains "group/version", | 	// TODO this seems suspicious.  Is this actually just "unversioned" now? | ||||||
| 	// refactor it to avoid confusion. | 	ServerGroupVersion *unversioned.GroupVersion | ||||||
| 	ServerVersion string |  | ||||||
|  |  | ||||||
| 	Mapper meta.RESTMapper | 	Mapper meta.RESTMapper | ||||||
|  |  | ||||||
| @@ -126,8 +124,7 @@ func (g *APIGroupVersion) InstallREST(container *restful.Container) error { | |||||||
| 	installer := g.newInstaller() | 	installer := g.newInstaller() | ||||||
| 	ws := installer.NewWebService() | 	ws := installer.NewWebService() | ||||||
| 	apiResources, registrationErrors := installer.Install(ws) | 	apiResources, registrationErrors := installer.Install(ws) | ||||||
| 	// TODO: g.Version only contains "version" now, it will contain "group/version" in the near future. | 	AddSupportedResourcesWebService(ws, g.GroupVersion, apiResources) | ||||||
| 	AddSupportedResourcesWebService(ws, g.Version, apiResources) |  | ||||||
| 	container.Add(ws) | 	container.Add(ws) | ||||||
| 	return utilerrors.NewAggregate(registrationErrors) | 	return utilerrors.NewAggregate(registrationErrors) | ||||||
| } | } | ||||||
| @@ -151,14 +148,13 @@ func (g *APIGroupVersion) UpdateREST(container *restful.Container) error { | |||||||
| 		return apierrors.NewInternalError(fmt.Errorf("unable to find an existing webservice for prefix %s", installer.prefix)) | 		return apierrors.NewInternalError(fmt.Errorf("unable to find an existing webservice for prefix %s", installer.prefix)) | ||||||
| 	} | 	} | ||||||
| 	apiResources, registrationErrors := installer.Install(ws) | 	apiResources, registrationErrors := installer.Install(ws) | ||||||
| 	// TODO: g.Version only contains "version" now, it will contain "group/version" in the near future. | 	AddSupportedResourcesWebService(ws, g.GroupVersion, apiResources) | ||||||
| 	AddSupportedResourcesWebService(ws, g.Version, apiResources) |  | ||||||
| 	return utilerrors.NewAggregate(registrationErrors) | 	return utilerrors.NewAggregate(registrationErrors) | ||||||
| } | } | ||||||
|  |  | ||||||
| // newInstaller is a helper to create the installer.  Used by InstallREST and UpdateREST. | // newInstaller is a helper to create the installer.  Used by InstallREST and UpdateREST. | ||||||
| func (g *APIGroupVersion) newInstaller() *APIInstaller { | func (g *APIGroupVersion) newInstaller() *APIInstaller { | ||||||
| 	prefix := path.Join(g.Root, g.Version) | 	prefix := path.Join(g.Root, g.GroupVersion.Group, g.GroupVersion.Version) | ||||||
| 	installer := &APIInstaller{ | 	installer := &APIInstaller{ | ||||||
| 		group:             g, | 		group:             g, | ||||||
| 		info:              g.RequestInfoResolver, | 		info:              g.RequestInfoResolver, | ||||||
| @@ -287,7 +283,7 @@ func AddGroupWebService(container *restful.Container, path string, group unversi | |||||||
|  |  | ||||||
| // Adds a service to return the supported resources, E.g., a such web service | // Adds a service to return the supported resources, E.g., a such web service | ||||||
| // will be registered at /apis/extensions/v1. | // will be registered at /apis/extensions/v1. | ||||||
| func AddSupportedResourcesWebService(ws *restful.WebService, groupVersion string, apiResources []unversioned.APIResource) { | func AddSupportedResourcesWebService(ws *restful.WebService, groupVersion unversioned.GroupVersion, apiResources []unversioned.APIResource) { | ||||||
| 	resourceHandler := SupportedResourcesHandler(groupVersion, apiResources) | 	resourceHandler := SupportedResourcesHandler(groupVersion, apiResources) | ||||||
| 	ws.Route(ws.GET("/").To(resourceHandler). | 	ws.Route(ws.GET("/").To(resourceHandler). | ||||||
| 		Doc("get available resources"). | 		Doc("get available resources"). | ||||||
| @@ -328,10 +324,10 @@ func GroupHandler(group unversioned.APIGroup) restful.RouteFunction { | |||||||
| } | } | ||||||
|  |  | ||||||
| // SupportedResourcesHandler returns a handler which will list the provided resources as available. | // SupportedResourcesHandler returns a handler which will list the provided resources as available. | ||||||
| func SupportedResourcesHandler(groupVersion string, apiResources []unversioned.APIResource) restful.RouteFunction { | func SupportedResourcesHandler(groupVersion unversioned.GroupVersion, apiResources []unversioned.APIResource) restful.RouteFunction { | ||||||
| 	return func(req *restful.Request, resp *restful.Response) { | 	return func(req *restful.Request, resp *restful.Response) { | ||||||
| 		// TODO: use restful's Response methods | 		// TODO: use restful's Response methods | ||||||
| 		writeJSON(http.StatusOK, api.Codec, &unversioned.APIResourceList{GroupVersion: groupVersion, APIResources: apiResources}, resp.ResponseWriter, true) | 		writeJSON(http.StatusOK, api.Codec, &unversioned.APIResourceList{GroupVersion: groupVersion.String(), APIResources: apiResources}, resp.ResponseWriter, true) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -95,7 +95,7 @@ func TestProxy(t *testing.T) { | |||||||
| 			server           *httptest.Server | 			server           *httptest.Server | ||||||
| 			proxyTestPattern string | 			proxyTestPattern string | ||||||
| 		}{ | 		}{ | ||||||
| 			{namespaceServer, "/api/version2/proxy/namespaces/" + item.reqNamespace + "/foo/id" + item.path}, | 			{namespaceServer, "/" + prefix + "/" + newGroupVersion.Group + "/" + newGroupVersion.Version + "/proxy/namespaces/" + item.reqNamespace + "/foo/id" + item.path}, | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		for _, serverPattern := range serverPatterns { | 		for _, serverPattern := range serverPatterns { | ||||||
| @@ -212,7 +212,7 @@ func TestProxyUpgrade(t *testing.T) { | |||||||
| 		server := httptest.NewServer(namespaceHandler) | 		server := httptest.NewServer(namespaceHandler) | ||||||
| 		defer server.Close() | 		defer server.Close() | ||||||
|  |  | ||||||
| 		ws, err := websocket.Dial("ws://"+server.Listener.Addr().String()+"/api/version2/proxy/namespaces/myns/foo/123", "", "http://127.0.0.1/") | 		ws, err := websocket.Dial("ws://"+server.Listener.Addr().String()+"/"+prefix+"/"+newGroupVersion.Group+"/"+newGroupVersion.Version+"/proxy/namespaces/myns/foo/123", "", "http://127.0.0.1/") | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			t.Errorf("%s: websocket dial err: %s", k, err) | 			t.Errorf("%s: websocket dial err: %s", k, err) | ||||||
| 			continue | 			continue | ||||||
| @@ -276,7 +276,7 @@ func TestRedirectOnMissingTrailingSlash(t *testing.T) { | |||||||
| 		server := httptest.NewServer(handler) | 		server := httptest.NewServer(handler) | ||||||
| 		defer server.Close() | 		defer server.Close() | ||||||
|  |  | ||||||
| 		proxyTestPattern := "/api/version2/proxy/namespaces/ns/foo/id" + item.path | 		proxyTestPattern := "/" + prefix + "/" + newGroupVersion.Group + "/" + newGroupVersion.Version + "/proxy/namespaces/ns/foo/id" + item.path | ||||||
| 		req, err := http.NewRequest( | 		req, err := http.NewRequest( | ||||||
| 			"GET", | 			"GET", | ||||||
| 			server.URL+proxyTestPattern+"?"+item.query, | 			server.URL+proxyTestPattern+"?"+item.query, | ||||||
|   | |||||||
| @@ -62,7 +62,7 @@ func TestWatchWebsocket(t *testing.T) { | |||||||
|  |  | ||||||
| 	dest, _ := url.Parse(server.URL) | 	dest, _ := url.Parse(server.URL) | ||||||
| 	dest.Scheme = "ws" // Required by websocket, though the server never sees it. | 	dest.Scheme = "ws" // Required by websocket, though the server never sees it. | ||||||
| 	dest.Path = "/api/version/watch/simples" | 	dest.Path = "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/watch/simples" | ||||||
| 	dest.RawQuery = "" | 	dest.RawQuery = "" | ||||||
|  |  | ||||||
| 	ws, err := websocket.Dial(dest.String(), "", "http://localhost") | 	ws, err := websocket.Dial(dest.String(), "", "http://localhost") | ||||||
| @@ -114,7 +114,7 @@ func TestWatchHTTP(t *testing.T) { | |||||||
| 	client := http.Client{} | 	client := http.Client{} | ||||||
|  |  | ||||||
| 	dest, _ := url.Parse(server.URL) | 	dest, _ := url.Parse(server.URL) | ||||||
| 	dest.Path = "/api/version/watch/simples" | 	dest.Path = "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/watch/simples" | ||||||
| 	dest.RawQuery = "" | 	dest.RawQuery = "" | ||||||
|  |  | ||||||
| 	request, err := http.NewRequest("GET", dest.String(), nil) | 	request, err := http.NewRequest("GET", dest.String(), nil) | ||||||
| @@ -178,8 +178,8 @@ func TestWatchParamParsing(t *testing.T) { | |||||||
|  |  | ||||||
| 	dest, _ := url.Parse(server.URL) | 	dest, _ := url.Parse(server.URL) | ||||||
|  |  | ||||||
| 	rootPath := "/api/" + testVersion + "/watch/simples" | 	rootPath := "/" + prefix + "/" + testVersion + "/watch/simples" | ||||||
| 	namespacedPath := "/api/" + testVersion + "/watch/namespaces/other/simpleroots" | 	namespacedPath := "/" + prefix + "/" + testVersion + "/watch/namespaces/other/simpleroots" | ||||||
|  |  | ||||||
| 	table := []struct { | 	table := []struct { | ||||||
| 		path            string | 		path            string | ||||||
| @@ -286,7 +286,7 @@ func TestWatchProtocolSelection(t *testing.T) { | |||||||
| 	client := http.Client{} | 	client := http.Client{} | ||||||
|  |  | ||||||
| 	dest, _ := url.Parse(server.URL) | 	dest, _ := url.Parse(server.URL) | ||||||
| 	dest.Path = "/api/version/watch/simples" | 	dest.Path = "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/watch/simples" | ||||||
| 	dest.RawQuery = "" | 	dest.RawQuery = "" | ||||||
|  |  | ||||||
| 	table := []struct { | 	table := []struct { | ||||||
| @@ -358,7 +358,7 @@ func TestWatchHTTPTimeout(t *testing.T) { | |||||||
|  |  | ||||||
| 	// Setup a client | 	// Setup a client | ||||||
| 	dest, _ := url.Parse(s.URL) | 	dest, _ := url.Parse(s.URL) | ||||||
| 	dest.Path = "/api/" + newVersion + "/simple" | 	dest.Path = "/" + prefix + "/" + newVersion + "/simple" | ||||||
| 	dest.RawQuery = "watch=true" | 	dest.RawQuery = "watch=true" | ||||||
|  |  | ||||||
| 	req, _ := http.NewRequest("GET", dest.String(), nil) | 	req, _ := http.NewRequest("GET", dest.String(), nil) | ||||||
|   | |||||||
| @@ -670,8 +670,8 @@ func (m *Master) init(c *Config) { | |||||||
| 		} | 		} | ||||||
| 		expAPIVersions := []unversioned.GroupVersionForDiscovery{ | 		expAPIVersions := []unversioned.GroupVersionForDiscovery{ | ||||||
| 			{ | 			{ | ||||||
| 				GroupVersion: expVersion.Version, | 				GroupVersion: expVersion.GroupVersion.String(), | ||||||
| 				Version:      apiutil.GetVersion(expVersion.Version), | 				Version:      expVersion.GroupVersion.Version, | ||||||
| 			}, | 			}, | ||||||
| 		} | 		} | ||||||
| 		storageVersion, found := c.StorageVersions[g.Group] | 		storageVersion, found := c.StorageVersions[g.Group] | ||||||
| @@ -685,7 +685,7 @@ func (m *Master) init(c *Config) { | |||||||
| 		} | 		} | ||||||
| 		apiserver.AddGroupWebService(m.handlerContainer, c.APIGroupPrefix+"/"+latest.GroupOrDie("extensions").Group, group) | 		apiserver.AddGroupWebService(m.handlerContainer, c.APIGroupPrefix+"/"+latest.GroupOrDie("extensions").Group, group) | ||||||
| 		allGroups = append(allGroups, group) | 		allGroups = append(allGroups, group) | ||||||
| 		apiserver.InstallServiceErrorHandler(m.handlerContainer, m.newRequestInfoResolver(), []string{expVersion.Version}) | 		apiserver.InstallServiceErrorHandler(m.handlerContainer, m.newRequestInfoResolver(), []string{expVersion.GroupVersion.String()}) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// This should be done after all groups are registered | 	// This should be done after all groups are registered | ||||||
| @@ -896,7 +896,7 @@ func (m *Master) api_v1() *apiserver.APIGroupVersion { | |||||||
| 	} | 	} | ||||||
| 	version := m.defaultAPIGroupVersion() | 	version := m.defaultAPIGroupVersion() | ||||||
| 	version.Storage = storage | 	version.Storage = storage | ||||||
| 	version.Version = "v1" | 	version.GroupVersion = unversioned.GroupVersion{Version: "v1"} | ||||||
| 	version.Codec = v1.Codec | 	version.Codec = v1.Codec | ||||||
| 	return version | 	return version | ||||||
| } | } | ||||||
| @@ -1009,7 +1009,7 @@ func (m *Master) InstallThirdPartyResource(rsrc *expapi.ThirdPartyResource) erro | |||||||
| 	} | 	} | ||||||
| 	apiserver.AddGroupWebService(m.handlerContainer, path, apiGroup) | 	apiserver.AddGroupWebService(m.handlerContainer, path, apiGroup) | ||||||
| 	m.addThirdPartyResourceStorage(path, thirdparty.Storage[strings.ToLower(kind)+"s"].(*thirdpartyresourcedataetcd.REST)) | 	m.addThirdPartyResourceStorage(path, thirdparty.Storage[strings.ToLower(kind)+"s"].(*thirdpartyresourcedataetcd.REST)) | ||||||
| 	apiserver.InstallServiceErrorHandler(m.handlerContainer, m.newRequestInfoResolver(), []string{thirdparty.Version}) | 	apiserver.InstallServiceErrorHandler(m.handlerContainer, m.newRequestInfoResolver(), []string{thirdparty.GroupVersion.String()}) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1022,20 +1022,22 @@ func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupV | |||||||
| 		strings.ToLower(kind) + "s": resourceStorage, | 		strings.ToLower(kind) + "s": resourceStorage, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	serverGroupVersion := unversioned.ParseGroupVersionOrDie(latest.GroupOrDie("").GroupVersion) | ||||||
|  |  | ||||||
| 	return &apiserver.APIGroupVersion{ | 	return &apiserver.APIGroupVersion{ | ||||||
| 		Root:                apiRoot, | 		Root:                apiRoot, | ||||||
| 		Version:             apiutil.GetGroupVersion(group, version), | 		GroupVersion:        unversioned.GroupVersion{Group: group, Version: version}, | ||||||
| 		RequestInfoResolver: m.newRequestInfoResolver(), | 		RequestInfoResolver: m.newRequestInfoResolver(), | ||||||
|  |  | ||||||
| 		Creater:   thirdpartyresourcedata.NewObjectCreator(group, version, api.Scheme), | 		Creater:   thirdpartyresourcedata.NewObjectCreator(group, version, api.Scheme), | ||||||
| 		Convertor: api.Scheme, | 		Convertor: api.Scheme, | ||||||
| 		Typer:     api.Scheme, | 		Typer:     api.Scheme, | ||||||
|  |  | ||||||
| 		Mapper:        thirdpartyresourcedata.NewMapper(latest.GroupOrDie("extensions").RESTMapper, kind, version, group), | 		Mapper:             thirdpartyresourcedata.NewMapper(latest.GroupOrDie("extensions").RESTMapper, kind, version, group), | ||||||
| 		Codec:         thirdpartyresourcedata.NewCodec(latest.GroupOrDie("extensions").Codec, kind), | 		Codec:              thirdpartyresourcedata.NewCodec(latest.GroupOrDie("extensions").Codec, kind), | ||||||
| 		Linker:        latest.GroupOrDie("extensions").SelfLinker, | 		Linker:             latest.GroupOrDie("extensions").SelfLinker, | ||||||
| 		Storage:       storage, | 		Storage:            storage, | ||||||
| 		ServerVersion: latest.GroupOrDie("").GroupVersion, | 		ServerGroupVersion: &serverGroupVersion, | ||||||
|  |  | ||||||
| 		Context: m.requestContextMapper, | 		Context: m.requestContextMapper, | ||||||
|  |  | ||||||
| @@ -1110,6 +1112,7 @@ func (m *Master) experimental(c *Config) *apiserver.APIGroupVersion { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	extensionsGroup := latest.GroupOrDie("extensions") | 	extensionsGroup := latest.GroupOrDie("extensions") | ||||||
|  | 	serverGroupVersion := unversioned.ParseGroupVersionOrDie(latest.GroupOrDie("").GroupVersion) | ||||||
|  |  | ||||||
| 	return &apiserver.APIGroupVersion{ | 	return &apiserver.APIGroupVersion{ | ||||||
| 		Root:                m.apiGroupPrefix, | 		Root:                m.apiGroupPrefix, | ||||||
| @@ -1119,12 +1122,12 @@ func (m *Master) experimental(c *Config) *apiserver.APIGroupVersion { | |||||||
| 		Convertor: api.Scheme, | 		Convertor: api.Scheme, | ||||||
| 		Typer:     api.Scheme, | 		Typer:     api.Scheme, | ||||||
|  |  | ||||||
| 		Mapper:        extensionsGroup.RESTMapper, | 		Mapper:             extensionsGroup.RESTMapper, | ||||||
| 		Codec:         extensionsGroup.Codec, | 		Codec:              extensionsGroup.Codec, | ||||||
| 		Linker:        extensionsGroup.SelfLinker, | 		Linker:             extensionsGroup.SelfLinker, | ||||||
| 		Storage:       storage, | 		Storage:            storage, | ||||||
| 		Version:       extensionsGroup.GroupVersion, | 		GroupVersion:       unversioned.ParseGroupVersionOrDie(extensionsGroup.GroupVersion), | ||||||
| 		ServerVersion: latest.GroupOrDie("").GroupVersion, | 		ServerGroupVersion: &serverGroupVersion, | ||||||
|  |  | ||||||
| 		Admit:   m.admissionControl, | 		Admit:   m.admissionControl, | ||||||
| 		Context: m.requestContextMapper, | 		Context: m.requestContextMapper, | ||||||
|   | |||||||
| @@ -176,7 +176,7 @@ func TestFindExternalAddress(t *testing.T) { | |||||||
| func TestApi_v1(t *testing.T) { | func TestApi_v1(t *testing.T) { | ||||||
| 	master, _, assert := setUp(t) | 	master, _, assert := setUp(t) | ||||||
| 	version := master.api_v1() | 	version := master.api_v1() | ||||||
| 	assert.Equal("v1", version.Version, "Version was not v1: %s", version.Version) | 	assert.Equal(unversioned.GroupVersion{Version: "v1"}, version.GroupVersion, "Version was not v1: %s", version.GroupVersion) | ||||||
| 	assert.Equal(v1.Codec, version.Codec, "version.Codec was not for v1: %s", version.Codec) | 	assert.Equal(v1.Codec, version.Codec, "version.Codec was not for v1: %s", version.Codec) | ||||||
| 	for k, v := range master.storage { | 	for k, v := range master.storage { | ||||||
| 		assert.Contains(version.Storage, v, "Value %s not found (key: %s)", k, v) | 		assert.Contains(version.Storage, v, "Value %s not found (key: %s)", k, v) | ||||||
| @@ -323,12 +323,14 @@ func TestDefaultAPIGroupVersion(t *testing.T) { | |||||||
| func TestExpapi(t *testing.T) { | func TestExpapi(t *testing.T) { | ||||||
| 	master, config, assert := setUp(t) | 	master, config, assert := setUp(t) | ||||||
|  |  | ||||||
|  | 	extensionsGroupMeta := latest.GroupOrDie("extensions") | ||||||
|  |  | ||||||
| 	expAPIGroup := master.experimental(&config) | 	expAPIGroup := master.experimental(&config) | ||||||
| 	assert.Equal(expAPIGroup.Root, master.apiGroupPrefix) | 	assert.Equal(expAPIGroup.Root, master.apiGroupPrefix) | ||||||
| 	assert.Equal(expAPIGroup.Mapper, latest.GroupOrDie("extensions").RESTMapper) | 	assert.Equal(expAPIGroup.Mapper, extensionsGroupMeta.RESTMapper) | ||||||
| 	assert.Equal(expAPIGroup.Codec, latest.GroupOrDie("extensions").Codec) | 	assert.Equal(expAPIGroup.Codec, extensionsGroupMeta.Codec) | ||||||
| 	assert.Equal(expAPIGroup.Linker, latest.GroupOrDie("extensions").SelfLinker) | 	assert.Equal(expAPIGroup.Linker, extensionsGroupMeta.SelfLinker) | ||||||
| 	assert.Equal(expAPIGroup.Version, latest.GroupOrDie("extensions").GroupVersion) | 	assert.Equal(expAPIGroup.GroupVersion, unversioned.GroupVersion{Group: extensionsGroupMeta.Group, Version: extensionsGroupMeta.Version}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // TestGetNodeAddresses verifies that proper results are returned | // TestGetNodeAddresses verifies that proper results are returned | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 k8s-merge-robot
					k8s-merge-robot