Merge pull request #119272 from deads2k/resources
add list of served versions to storage version Kubernetes-commit: 47aeec63a839703e962ebd97e26edbc86fe6d99c
This commit is contained in:
commit
eb9d761704
4
go.mod
4
go.mod
|
|
@ -41,7 +41,7 @@ require (
|
|||
google.golang.org/protobuf v1.30.0
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||
gopkg.in/square/go-jose.v2 v2.6.0
|
||||
k8s.io/api v0.0.0-20230714211711-ad80a67756b3
|
||||
k8s.io/api v0.0.0-20230714211713-ac1defa44e72
|
||||
k8s.io/apimachinery v0.0.0-20230714211010-7924d2c22746
|
||||
k8s.io/client-go v0.0.0-20230714212436-f19b40cda940
|
||||
k8s.io/component-base v0.0.0-20230714213649-faf645bcb8bf
|
||||
|
|
@ -125,7 +125,7 @@ require (
|
|||
)
|
||||
|
||||
replace (
|
||||
k8s.io/api => k8s.io/api v0.0.0-20230714211711-ad80a67756b3
|
||||
k8s.io/api => k8s.io/api v0.0.0-20230714211713-ac1defa44e72
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230714211010-7924d2c22746
|
||||
k8s.io/client-go => k8s.io/client-go v0.0.0-20230714212436-f19b40cda940
|
||||
k8s.io/component-base => k8s.io/component-base v0.0.0-20230714213649-faf645bcb8bf
|
||||
|
|
|
|||
4
go.sum
4
go.sum
|
|
@ -668,8 +668,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
k8s.io/api v0.0.0-20230714211711-ad80a67756b3 h1:BYYNW3dD/VvN4RVd609SyL/SxiMhZcbA7Ofur6IyFxQ=
|
||||
k8s.io/api v0.0.0-20230714211711-ad80a67756b3/go.mod h1:nHelHGU5nRmkT223Jbg1sZZjj9DvhsKLsEekrET50A4=
|
||||
k8s.io/api v0.0.0-20230714211713-ac1defa44e72 h1:VuW3Hv7ZC0+Mf7MwYisaDUAczwTtd0Q+puDnQMCIXYo=
|
||||
k8s.io/api v0.0.0-20230714211713-ac1defa44e72/go.mod h1:nHelHGU5nRmkT223Jbg1sZZjj9DvhsKLsEekrET50A4=
|
||||
k8s.io/apimachinery v0.0.0-20230714211010-7924d2c22746 h1:ZRR1OH9l7t2q4sW0wB74g7ZDDSAWvAuO/jAcSHt7FVk=
|
||||
k8s.io/apimachinery v0.0.0-20230714211010-7924d2c22746/go.mod h1:82hjKsW08vcDFh8wS9BtEee9UTcm0IlvyBnJ/zawF6E=
|
||||
k8s.io/client-go v0.0.0-20230714212436-f19b40cda940 h1:EUg/9w1/iqWVzXNXjS2UvB02elWNuW4gTPG3cFlhIEo=
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@ type APIGroupVersion struct {
|
|||
// GroupVersion is the external group version
|
||||
GroupVersion schema.GroupVersion
|
||||
|
||||
// AllServedVersionsByResource is indexed by resource and maps to a list of versions that resource exists in.
|
||||
// This was created so that StorageVersion for APIs can include a list of all version that are served for each
|
||||
// GroupResource tuple.
|
||||
AllServedVersionsByResource map[string][]string
|
||||
|
||||
// OptionsExternalVersion controls the Kubernetes APIVersion used for common objects in the apiserver
|
||||
// schema like api.Status, api.DeleteOptions, and metav1.ListOptions. Other implementors may
|
||||
// define a version "v1beta1" but want to use the Kubernetes "v1" internal objects. If
|
||||
|
|
|
|||
|
|
@ -600,6 +600,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||
if a.group.ConvertabilityChecker != nil {
|
||||
decodableVersions = a.group.ConvertabilityChecker.VersionsForGroupKind(fqKindToRegister.GroupKind())
|
||||
}
|
||||
|
||||
resourceInfo = &storageversion.ResourceInfo{
|
||||
GroupResource: schema.GroupResource{
|
||||
Group: a.group.GroupVersion.Group,
|
||||
|
|
@ -612,6 +613,8 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||
EquivalentResourceMapper: a.group.EquivalentResourceRegistry,
|
||||
|
||||
DirectlyDecodableVersions: decodableVersions,
|
||||
|
||||
ServedVersions: a.group.AllServedVersionsByResource[path],
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -911,9 +911,22 @@ func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
|
|||
}
|
||||
|
||||
func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) *genericapi.APIGroupVersion {
|
||||
|
||||
allServedVersionsByResource := map[string][]string{}
|
||||
for version, resourcesInVersion := range apiGroupInfo.VersionedResourcesStorageMap {
|
||||
for resource := range resourcesInVersion {
|
||||
if len(groupVersion.Group) == 0 {
|
||||
allServedVersionsByResource[resource] = append(allServedVersionsByResource[resource], version)
|
||||
} else {
|
||||
allServedVersionsByResource[resource] = append(allServedVersionsByResource[resource], fmt.Sprintf("%s/%s", groupVersion.Group, version))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &genericapi.APIGroupVersion{
|
||||
GroupVersion: groupVersion,
|
||||
MetaGroupVersion: apiGroupInfo.MetaGroupVersion,
|
||||
GroupVersion: groupVersion,
|
||||
AllServedVersionsByResource: allServedVersionsByResource,
|
||||
MetaGroupVersion: apiGroupInfo.MetaGroupVersion,
|
||||
|
||||
ParameterCodec: apiGroupInfo.ParameterCodec,
|
||||
Serializer: apiGroupInfo.NegotiatedSerializer,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
_ "k8s.io/component-base/metrics/prometheus/workqueue" // for workqueue metric registration
|
||||
|
|
@ -45,6 +44,10 @@ type ResourceInfo struct {
|
|||
// DirectlyDecodableVersions is a list of versions that the converter for REST storage knows how to convert. This
|
||||
// contains items like apiextensions.k8s.io/v1beta1 even if we don't serve that version.
|
||||
DirectlyDecodableVersions []schema.GroupVersion
|
||||
|
||||
// ServedVersions holds a list of all versions of GroupResource that are served. Note that a server may be able to
|
||||
// decode a particular version, but still not serve it.
|
||||
ServedVersions []string
|
||||
}
|
||||
|
||||
// Manager records the resources whose StorageVersions need updates, and provides a method to update those StorageVersions.
|
||||
|
|
@ -52,7 +55,7 @@ type Manager interface {
|
|||
// AddResourceInfo records resources whose StorageVersions need updates
|
||||
AddResourceInfo(resources ...*ResourceInfo)
|
||||
// UpdateStorageVersions tries to update the StorageVersions of the recorded resources
|
||||
UpdateStorageVersions(kubeAPIServerClientConfig *rest.Config, apiserverID string, apiResourceConfigSource serverstorage.APIResourceConfigSource)
|
||||
UpdateStorageVersions(kubeAPIServerClientConfig *rest.Config, apiserverID string)
|
||||
// PendingUpdate returns true if the StorageVersion of the given resource is still pending update.
|
||||
PendingUpdate(gr schema.GroupResource) bool
|
||||
// LastUpdateError returns the last error hit when updating the storage version of the given resource.
|
||||
|
|
@ -112,7 +115,7 @@ func (s *defaultManager) addPendingManagedStatusLocked(r *ResourceInfo) {
|
|||
}
|
||||
|
||||
// UpdateStorageVersions tries to update the StorageVersions of the recorded resources
|
||||
func (s *defaultManager) UpdateStorageVersions(kubeAPIServerClientConfig *rest.Config, serverID string, apiResourceConfigSource serverstorage.APIResourceConfigSource) {
|
||||
func (s *defaultManager) UpdateStorageVersions(kubeAPIServerClientConfig *rest.Config, serverID string) {
|
||||
clientset, err := kubernetes.NewForConfig(kubeAPIServerClientConfig)
|
||||
if err != nil {
|
||||
utilruntime.HandleError(fmt.Errorf("failed to get clientset: %v", err))
|
||||
|
|
@ -145,12 +148,8 @@ func (s *defaultManager) UpdateStorageVersions(kubeAPIServerClientConfig *rest.C
|
|||
gr.Group = "core"
|
||||
}
|
||||
|
||||
servedVersions := []string{}
|
||||
for _, dv := range decodableVersions {
|
||||
if apiResourceConfigSource.ResourceEnabled(gr.WithVersion(dv)) {
|
||||
servedVersions = append(servedVersions, dv)
|
||||
}
|
||||
}
|
||||
servedVersions := r.ServedVersions
|
||||
|
||||
if err := updateStorageVersionFor(sc, serverID, gr, r.EncodingVersion, decodableVersions, servedVersions); err != nil {
|
||||
utilruntime.HandleError(fmt.Errorf("failed to update storage version for %v: %v", r.GroupResource, err))
|
||||
s.recordStatusFailure(&r, err)
|
||||
|
|
|
|||
Loading…
Reference in New Issue