type APIGroupInfo … func (a *APIGroupInfo) destroyStorage() { … } type GenericAPIServer … type DelegationTarget … func (s *GenericAPIServer) UnprotectedHandler() http.Handler { … } func (s *GenericAPIServer) PostStartHooks() map[string]postStartHookEntry { … } func (s *GenericAPIServer) PreShutdownHooks() map[string]preShutdownHookEntry { … } func (s *GenericAPIServer) HealthzChecks() []healthz.HealthChecker { … } func (s *GenericAPIServer) ListedPaths() []string { … } func (s *GenericAPIServer) NextDelegate() DelegationTarget { … } // RegisterMuxAndDiscoveryCompleteSignal registers the given signal that will be used to determine if all known // HTTP paths have been registered. It is okay to call this method after instantiating the generic server but before running. func (s *GenericAPIServer) RegisterMuxAndDiscoveryCompleteSignal(signalName string, signal <-chan struct{ … } func (s *GenericAPIServer) MuxAndDiscoveryCompleteSignals() map[string]<-chan struct{ … } // RegisterDestroyFunc registers a function that will be called during Destroy(). // The function have to be idempotent and prepared to be called more than once. func (s *GenericAPIServer) RegisterDestroyFunc(destroyFn func()) { … } // Destroy cleans up all its and its delegation target resources on shutdown. // It starts with destroying its own resources and later proceeds with // its delegation target. func (s *GenericAPIServer) Destroy() { … } type emptyDelegate … func NewEmptyDelegate() DelegationTarget { … } // NewEmptyDelegateWithCustomHandler allows for registering a custom handler usually for special handling of 404 requests func NewEmptyDelegateWithCustomHandler(handler http.Handler) DelegationTarget { … } func (s emptyDelegate) UnprotectedHandler() http.Handler { … } func (s emptyDelegate) PostStartHooks() map[string]postStartHookEntry { … } func (s emptyDelegate) PreShutdownHooks() map[string]preShutdownHookEntry { … } func (s emptyDelegate) HealthzChecks() []healthz.HealthChecker { … } func (s emptyDelegate) ListedPaths() []string { … } func (s emptyDelegate) NextDelegate() DelegationTarget { … } func (s emptyDelegate) PrepareRun() preparedGenericAPIServer { … } func (s emptyDelegate) MuxAndDiscoveryCompleteSignals() map[string]<-chan struct{ … } func (s emptyDelegate) Destroy() { … } type preparedGenericAPIServer … // PrepareRun does post API installation setup steps. It calls recursively the same function of the delegates. func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer { … } // Run spawns the secure http server. It only returns if stopCh is closed // or the secure port cannot be listened on initially. // // Deprecated: use RunWithContext instead. Run will not get removed to avoid // breaking consumers, but should not be used in new code. func (s preparedGenericAPIServer) Run(stopCh <-chan struct{ … } // RunWithContext spawns the secure http server. It only returns if ctx is canceled // or the secure port cannot be listened on initially. // This is the diagram of what contexts/channels/signals are dependent on each other: // // | ctx // | | // | --------------------------------------------------------- // | | | // | ShutdownInitiated (shutdownInitiatedCh) | // | | | // | (ShutdownDelayDuration) (PreShutdownHooks) // | | | // | AfterShutdownDelayDuration (delayedStopCh) PreShutdownHooksStopped (preShutdownHooksHasStoppedCh) // | | | // | |-------------------------------------------------------| // | | // | | // | NotAcceptingNewRequest (notAcceptingNewRequestCh) // | | // | | // | |----------------------------------------------------------------------------------| // | | | | | // | [without [with | | // | ShutdownSendRetryAfter] ShutdownSendRetryAfter] | | // | | | | | // | | ---------------| | // | | | | // | | |----------------|-----------------------| | // | | | | | // | | (NonLongRunningRequestWaitGroup::Wait) (WatchRequestWaitGroup::Wait) | // | | | | | // | | |------------------|---------------------| | // | | | | // | | InFlightRequestsDrained (drainedCh) | // | | | | // | |-------------------|---------------------|----------------------------------------| // | | | // | stopHttpServerCtx (AuditBackend::Shutdown()) // | | // | listenerStoppedCh // | | // | HTTPServerStoppedListening (httpServerStoppedListeningCh) func (s preparedGenericAPIServer) RunWithContext(ctx context.Context) error { … } // NonBlockingRun spawns the secure http server. An error is // returned if the secure port cannot be listened on. // The returned channel is closed when the (asynchronous) termination is finished. // // Deprecated: use RunWithContext instead. Run will not get removed to avoid // breaking consumers, but should not be used in new code. func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{ … } // NonBlockingRunWithContext spawns the secure http server. An error is // returned if the secure port cannot be listened on. // The returned channel is closed when the (asynchronous) termination is finished. func (s preparedGenericAPIServer) NonBlockingRunWithContext(ctx context.Context, shutdownTimeout time.Duration) (<-chan struct{ … } // installAPIResources is a private method for installing the REST storage backing each api groupversionresource func (s *GenericAPIServer) installAPIResources(apiPrefix string, apiGroupInfo *APIGroupInfo, typeConverter managedfields.TypeConverter) error { … } // InstallLegacyAPIGroup exposes the given legacy api group in the API. // The <apiGroupInfo> passed into this function shouldn't be used elsewhere as the // underlying storage will be destroyed on this servers shutdown. func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo *APIGroupInfo) error { … } // InstallAPIGroups exposes given api groups in the API. // The <apiGroupInfos> passed into this function shouldn't be used elsewhere as the // underlying storage will be destroyed on this servers shutdown. func (s *GenericAPIServer) InstallAPIGroups(apiGroupInfos ...*APIGroupInfo) error { … } // registerStorageReadinessCheck registers the readiness checks for all underlying storages // for a given APIGroup. func (s *GenericAPIServer) registerStorageReadinessCheck(groupName string, apiGroupInfo *APIGroupInfo) { … } // InstallAPIGroup exposes the given api group in the API. // The <apiGroupInfo> passed into this function shouldn't be used elsewhere as the // underlying storage will be destroyed on this servers shutdown. func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error { … } func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion, apiPrefix string) (*genericapi.APIGroupVersion, error) { … } func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) *genericapi.APIGroupVersion { … } // NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values // exposed for easier composition from other packages func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo { … } // getOpenAPIModels is a private method for getting the OpenAPI models func (s *GenericAPIServer) getOpenAPIModels(apiPrefix string, apiGroupInfos ...*APIGroupInfo) (managedfields.TypeConverter, error) { … } // getResourceNamesForGroup is a private method for getting the canonical names for each resource to build in an api group func getResourceNamesForGroup(apiPrefix string, apiGroupInfo *APIGroupInfo, pathsToIgnore openapiutil.Trie) ([]string, error) { … }