diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f7624834e6..99ca1ec315a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Changed - All the modules in [`pkg/sdk`](https://github.com/operator-framework/operator-sdk/tree/master/pkg/sdk) have been combined into a single package. `action`, `handler`, `informer` `types` and `query` pkgs have been consolidated into `pkg/sdk`. [#242](https://github.com/operator-framework/operator-sdk/pull/242) +- The SDK exposes the Kubernetes clientset via `k8sclient.GetKubeClient()` #295 ### Removed diff --git a/pkg/k8sclient/client.go b/pkg/k8sclient/client.go index 0a9d39480e5..3175dab9707 100644 --- a/pkg/k8sclient/client.go +++ b/pkg/k8sclient/client.go @@ -36,11 +36,13 @@ import ( var ( restMapper *discovery.DeferredDiscoveryRESTMapper clientPool dynamic.ClientPool + kubeClient kubernetes.Interface + kubeConfig *rest.Config ) // init initializes the restMapper and clientPool needed to create a resource client dynamically func init() { - kubeClient, kubeConfig := mustNewKubeClientAndConfig() + kubeClient, kubeConfig = mustNewKubeClientAndConfig() cachedDiscoveryClient := cached.NewMemCacheClient(kubeClient.Discovery()) restMapper = discovery.NewDeferredDiscoveryRESTMapper(cachedDiscoveryClient, meta.InterfacesForUnstructured) restMapper.Reset() @@ -74,6 +76,11 @@ func GetResourceClient(apiVersion, kind, namespace string) (dynamic.ResourceInte return resourceClient, pluralName, nil } +// GetKubeClient returns the kubernetes client used to create the dynamic client +func GetKubeClient() kubernetes.Interface { + return kubeClient +} + // apiResource consults the REST mapper to translate an tuple to a metav1.APIResource struct. func apiResource(gvk schema.GroupVersionKind, restMapper *discovery.DeferredDiscoveryRESTMapper) (*metav1.APIResource, error) { mapping, err := restMapper.RESTMapping(gvk.GroupKind(), gvk.Version)