diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 4b8ee8e7c5..89c01846bb 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -112,6 +112,7 @@ type Options struct { // NewClient is the func that creates the client to be used by the manager. // If not set this will create the default DelegatingClient that will // use the cache for reads and the client for writes. + // NOTE: The default client will not cache Unstructured. NewClient NewClientFunc // ClientDisableCacheFor tells the client that, if any cache is used, to bypass it @@ -255,16 +256,28 @@ func setOptionsDefaults(options Options) Options { // NewClientFunc allows a user to define how to create a client. type NewClientFunc func(cache cache.Cache, config *rest.Config, options client.Options, uncachedObjects ...client.Object) (client.Client, error) -// DefaultNewClient creates the default caching client. +// DefaultNewClient creates the default caching client, that will not cache Unstructured. func DefaultNewClient(cache cache.Cache, config *rest.Config, options client.Options, uncachedObjects ...client.Object) (client.Client, error) { + return newClient(cache, config, options, false, uncachedObjects) +} + +// CacheUnstructuredNewClient creates a caching client that will cache Unstructured. +func CacheUnstructuredNewClient(cache cache.Cache, config *rest.Config, options client.Options, uncachedObjects ...client.Object) (client.Client, error) { + return newClient(cache, config, options, true, uncachedObjects) +} + +var _ NewClientFunc = CacheUnstructuredNewClient + +func newClient(cache cache.Cache, config *rest.Config, options client.Options, cacheUnstructured bool, uncachedObjects []client.Object) (client.Client, error) { c, err := client.New(config, options) if err != nil { return nil, err } return client.NewDelegatingClient(client.NewDelegatingClientInput{ - CacheReader: cache, - Client: c, - UncachedObjects: uncachedObjects, + CacheReader: cache, + Client: c, + UncachedObjects: uncachedObjects, + CacheUnstructured: cacheUnstructured, }) }