From 6203a6f3c55b0676fd0b485e0c58fd688dbe04a8 Mon Sep 17 00:00:00 2001 From: Stephanie Hingtgen Date: Fri, 19 Sep 2025 08:58:36 -0600 Subject: [PATCH] Provisioning: Allow non-loopback config (#111353) --- pkg/registry/apis/provisioning/register.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/registry/apis/provisioning/register.go b/pkg/registry/apis/provisioning/register.go index cd353ba5ccd..c0fdc90ca34 100644 --- a/pkg/registry/apis/provisioning/register.go +++ b/pkg/registry/apis/provisioning/register.go @@ -22,6 +22,7 @@ import ( "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" genericapiserver "k8s.io/apiserver/pkg/server" + clientrest "k8s.io/client-go/rest" "k8s.io/kube-openapi/pkg/common" "k8s.io/kube-openapi/pkg/spec3" "k8s.io/kube-openapi/pkg/validation/spec" @@ -114,6 +115,8 @@ type APIBuilder struct { // Extras provides additional functionality to the API. extras []Extra extraWorkers []jobs.Worker + + restConfigGetter func(context.Context) (*clientrest.Config, error) } // NewAPIBuilder creates an API builder. @@ -134,6 +137,7 @@ func NewAPIBuilder( extraWorkers []jobs.Worker, jobHistoryConfig *JobHistoryConfig, allowedTargets []provisioning.SyncTargetType, + restConfigGetter func(context.Context) (*clientrest.Config, error), allowImageRendering bool, newStandaloneClientFactoryFunc func(loopbackConfigProvider apiserver.RestConfigProvider) resources.ClientFactory, // optional, only used for standalone apiserver ) *APIBuilder { @@ -163,6 +167,7 @@ func NewAPIBuilder( jobHistoryConfig: jobHistoryConfig, extraWorkers: extraWorkers, allowedTargets: allowedTargets, + restConfigGetter: restConfigGetter, allowImageRendering: allowImageRendering, } @@ -247,6 +252,7 @@ func RegisterAPIService( extraWorkers, createJobHistoryConfigFromSettings(cfg), allowedTargets, + nil, // will use loopback instead cfg.ProvisioningAllowImageRendering, nil, ) @@ -678,7 +684,17 @@ func (b *APIBuilder) verifyAgainstExistingRepositories(cfg *provisioning.Reposit func (b *APIBuilder) GetPostStartHooks() (map[string]genericapiserver.PostStartHookFunc, error) { postStartHooks := map[string]genericapiserver.PostStartHookFunc{ "grafana-provisioning": func(postStartHookCtx genericapiserver.PostStartHookContext) error { - c, err := clientset.NewForConfig(postStartHookCtx.LoopbackClientConfig) + var config *clientrest.Config + var err error + if b.restConfigGetter == nil { + config = postStartHookCtx.LoopbackClientConfig + } else { + config, err = b.restConfigGetter(postStartHookCtx.Context) + if err != nil { + return err + } + } + c, err := clientset.NewForConfig(config) if err != nil { return err }