diff --git a/internal/sample-apiserver/pkg/cmd/server/start.go b/internal/sample-apiserver/pkg/cmd/server/start.go index fc6a196..74d1a70 100644 --- a/internal/sample-apiserver/pkg/cmd/server/start.go +++ b/internal/sample-apiserver/pkg/cmd/server/start.go @@ -115,7 +115,11 @@ func (o *WardleServerOptions) Config() (*apiserver.Config, error) { return nil, fmt.Errorf("error creating self-signed certificates: %v", err) } - o.RecommendedOptions.Etcd.StorageConfig.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) + // change: allow etcd options to be nil + // TODO: this should be reverted after rebasing sample-apiserver onto https://github.com/kubernetes/kubernetes/pull/101106 + if o.RecommendedOptions.Etcd != nil { + o.RecommendedOptions.Etcd.StorageConfig.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) + } // change: apiserver-runtime // ExtraAdmissionInitializers set through ApplyServerOptionsFns by appending to ServerOptionsFns diff --git a/pkg/builder/builder_misc.go b/pkg/builder/builder_misc.go index 8f9d56d..51b0156 100644 --- a/pkg/builder/builder_misc.go +++ b/pkg/builder/builder_misc.go @@ -55,3 +55,11 @@ func (a *Server) ExposeLoopbackAuthorizer() *Server { return s }) } + +// WithoutEtcd removes etcd related settings from apiserver. +func (a *Server) WithoutEtcd() *Server { + return a.WithOptionsFns(func(o *ServerOptions) *ServerOptions { + o.RecommendedOptions.Etcd = nil + return o + }) +} diff --git a/pkg/experimental/storage/filepath/jsonfile.go b/pkg/experimental/storage/filepath/jsonfile.go index 86b94bd..a87a867 100644 --- a/pkg/experimental/storage/filepath/jsonfile.go +++ b/pkg/experimental/storage/filepath/jsonfile.go @@ -3,8 +3,11 @@ package filepath import ( "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/apiserver/pkg/server/storage" + "k8s.io/apiserver/pkg/storage/storagebackend" "sigs.k8s.io/apiserver-runtime/pkg/builder/resource" builderrest "sigs.k8s.io/apiserver-runtime/pkg/builder/rest" ) @@ -36,11 +39,17 @@ import ( func NewJSONFilepathStorageProvider(obj resource.Object, rootPath string) builderrest.ResourceHandlerProvider { return func(scheme *runtime.Scheme, getter generic.RESTOptionsGetter) (rest.Storage, error) { gr := obj.GetGroupVersionResource().GroupResource() - opt, err := getter.GetRESTOptions(gr) + codec, _, err := storage.NewStorageCodec(storage.StorageCodecConfig{ + StorageMediaType: runtime.ContentTypeJSON, + StorageSerializer: serializer.NewCodecFactory(scheme), + StorageVersion: scheme.PrioritizedVersionsForGroup(obj.GetGroupVersionResource().Group)[0], + MemoryVersion: scheme.PrioritizedVersionsForGroup(obj.GetGroupVersionResource().Group)[0], + Config: storagebackend.Config{}, // useless fields.. + }) if err != nil { return nil, err } - codec := opt.StorageConfig.Codec + return NewFilepathREST( gr, codec,