Skip to content

Commit a0f3015

Browse files
authored
Refactor APIServer TLS setup into common function (#3751)
Consolidates duplicated APIServer TLS configuration setup code from OLM and Catalog operators into a single SetupAPIServerTLSConfig function. Assisted-By: Claude Signed-off-by: Todd Short <todd.short@me.com>
1 parent 2efd52d commit a0f3015

File tree

3 files changed

+55
-52
lines changed

3 files changed

+55
-52
lines changed

cmd/catalog/main.go

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1111
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
1212

13-
configclientset "github.com/openshift/client-go/config/clientset/versioned"
1413
configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
1514
"github.com/sirupsen/logrus"
1615
k8sscheme "k8s.io/client-go/kubernetes/scheme"
@@ -21,7 +20,6 @@ import (
2120
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog"
2221
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalogtemplate"
2322
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver"
24-
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig"
2523
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
2624
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus"
2725
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/server"
@@ -77,34 +75,9 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error {
7775
}
7876

7977
// Setup APIServer TLS configuration for HTTPS servers
80-
discovery := opClient.KubernetesInterface().Discovery()
81-
openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(discovery)
78+
apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config)
8279
if err != nil {
83-
return fmt.Errorf("error checking for OpenShift config API support: %w", err)
84-
}
85-
86-
apiServerTLSQuerier := apiserver.NoopQuerier()
87-
var apiServerFactory interface{ Start(<-chan struct{}) }
88-
if openshiftConfigAPIExists {
89-
logger.Info("OpenShift APIServer API available - setting up watch for APIServer TLS configuration")
90-
91-
versionedConfigClient, err := configclientset.NewForConfig(config)
92-
if err != nil {
93-
return fmt.Errorf("error configuring openshift config client: %w", err)
94-
}
95-
96-
apiServerInformer, apiServerSyncer, querier, factory, err := apiserver.NewSyncer(logger, versionedConfigClient)
97-
if err != nil {
98-
return fmt.Errorf("error initializing APIServer TLS syncer: %w", err)
99-
}
100-
101-
logger.Info("APIServer TLS configuration will be applied to HTTPS servers")
102-
apiServerTLSQuerier = querier
103-
104-
// Register event handlers for APIServer resource changes
105-
apiserver.RegisterEventHandlers(apiServerInformer, apiServerSyncer)
106-
107-
apiServerFactory = factory
80+
return fmt.Errorf("error setting up APIServer TLS configuration: %w", err)
10881
}
10982

11083
// Setup metrics/health server with TLS configuration

cmd/olm/main.go

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/openshift"
2525
"github.com/operator-framework/operator-lifecycle-manager/pkg/feature"
2626
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver"
27-
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig"
2827
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
2928
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus"
3029
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer"
@@ -156,30 +155,11 @@ func main() {
156155
}
157156

158157
// Setup APIServer TLS configuration for HTTPS servers
159-
discovery := opClient.KubernetesInterface().Discovery()
160-
openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(discovery)
158+
apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config)
161159
if err != nil {
162-
logger.WithError(err).Fatal("error checking for OpenShift config API support")
163-
}
164-
165-
apiServerTLSQuerier := apiserver.NoopQuerier()
166-
var apiServerFactory interface{ Start(<-chan struct{}) }
167-
if openshiftConfigAPIExists {
168-
logger.Info("OpenShift APIServer API available - setting up watch for APIServer TLS configuration")
169-
170-
apiServerInformer, apiServerSyncer, querier, factory, err := apiserver.NewSyncer(logger, versionedConfigClient)
171-
if err != nil {
172-
logger.WithError(err).Fatal("error initializing APIServer TLS syncer")
173-
}
174-
175-
logger.Info("APIServer TLS configuration will be applied to HTTPS servers")
176-
apiServerTLSQuerier = querier
177-
178-
// Register event handlers for APIServer resource changes
179-
apiserver.RegisterEventHandlers(apiServerInformer, apiServerSyncer)
180-
181-
apiServerFactory = factory
160+
logger.WithError(err).Fatal("error setting up APIServer TLS configuration")
182161
}
162+
openshiftConfigAPIExists := apiServerFactory != nil
183163

184164
// Setup metrics/health server with TLS configuration
185165
listenAndServe, err := server.GetListenAndServeFunc(

pkg/lib/apiserver/syncer.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import (
1111
apiconfigv1 "github.com/openshift/api/config/v1"
1212
configv1client "github.com/openshift/client-go/config/clientset/versioned"
1313
configv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1"
14+
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig"
1415
"github.com/sirupsen/logrus"
16+
"k8s.io/client-go/kubernetes"
17+
"k8s.io/client-go/rest"
1518
"k8s.io/client-go/tools/cache"
1619
)
1720

@@ -58,6 +61,53 @@ func RegisterEventHandlers(informer configv1.APIServerInformer, syncer *Syncer)
5861
})
5962
}
6063

64+
// SetupAPIServerTLSConfig sets up the APIServer TLS configuration for HTTPS servers.
65+
// It checks if OpenShift config API is available and if so, creates the necessary
66+
// syncer and informer infrastructure to watch for cluster-wide TLS configuration changes.
67+
//
68+
// Returns:
69+
// - querier: A Querier that can be used to get TLS configuration (NoopQuerier if OpenShift API not available)
70+
// - factory: A SharedInformerFactory that must be started after operators are ready (nil if OpenShift API not available)
71+
// - error: Any error encountered during setup
72+
func SetupAPIServerTLSConfig(logger *logrus.Logger, config *rest.Config) (Querier, interface{ Start(<-chan struct{}) }, error) {
73+
// Create Kubernetes client for discovery
74+
clientset, err := kubernetes.NewForConfig(config)
75+
if err != nil {
76+
return nil, nil, fmt.Errorf("error creating kubernetes client: %w", err)
77+
}
78+
79+
// Check if OpenShift config API is available
80+
openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(clientset.Discovery())
81+
if err != nil {
82+
return nil, nil, fmt.Errorf("error checking for OpenShift config API support: %w", err)
83+
}
84+
85+
if !openshiftConfigAPIExists {
86+
return NoopQuerier(), nil, nil
87+
}
88+
89+
logger.Info("OpenShift APIServer API available - setting up watch for APIServer TLS configuration")
90+
91+
// Create versioned config client
92+
versionedConfigClient, err := configv1client.NewForConfig(config)
93+
if err != nil {
94+
return nil, nil, fmt.Errorf("error configuring openshift config client: %w", err)
95+
}
96+
97+
// Create syncer and informer
98+
apiServerInformer, apiServerSyncer, apiServerQuerier, apiServerFactory, err := NewSyncer(logger, versionedConfigClient)
99+
if err != nil {
100+
return nil, nil, fmt.Errorf("error initializing APIServer TLS syncer: %w", err)
101+
}
102+
103+
logger.Info("APIServer TLS configuration will be applied to HTTPS servers")
104+
105+
// Register event handlers for APIServer resource changes
106+
RegisterEventHandlers(apiServerInformer, apiServerSyncer)
107+
108+
return apiServerQuerier, apiServerFactory, nil
109+
}
110+
61111
// Syncer deals with watching APIServer type(s) on the cluster and let the caller
62112
// query for cluster scoped APIServer TLS configuration.
63113
type Syncer struct {

0 commit comments

Comments
 (0)