Move client/informer out from secretOption (#926)

Signed-off-by: Jian Qiu <jqiu@redhat.com>
This commit is contained in:
Jian Qiu
2025-04-01 03:07:53 +00:00
committed by GitHub
parent 485d6ea2db
commit 17d862d423
5 changed files with 38 additions and 29 deletions
-4
View File
@@ -8,7 +8,6 @@ import (
"github.com/openshift/library-go/pkg/operator/events"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/client-go/tools/cache"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
@@ -44,9 +43,6 @@ type SecretOption struct {
HubKubeconfigFile string
HubKubeconfigDir string
ManagementSecretInformer cache.SharedIndexInformer
ManagementCoreClient corev1client.CoreV1Interface
// subject of the agent, only used for addon
Subject *pkix.Name
// csr signer for the addon
@@ -14,6 +14,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/clientcmd"
)
@@ -28,6 +29,8 @@ type secretController struct {
statusUpdater StatusUpdateFunc
additionalSecretData map[string][]byte
secretToSave *corev1.Secret
managementCoreClient corev1client.CoreV1Interface
}
// NewSecretController return an instance of secretController
@@ -35,6 +38,8 @@ func NewSecretController(
secretOption SecretOption,
driver RegisterDriver,
statusUpdater StatusUpdateFunc,
managementCoreClient corev1client.CoreV1Interface,
managementSecretInformer cache.SharedIndexInformer,
recorder events.Recorder,
controllerName string,
) factory.Controller {
@@ -72,6 +77,7 @@ func NewSecretController(
controllerName: controllerName,
statusUpdater: statusUpdater,
additionalSecretData: additionalSecretData,
managementCoreClient: managementCoreClient,
}
f := factory.New().
@@ -87,7 +93,7 @@ func NewSecretController(
return true
}
return false
}, secretOption.ManagementSecretInformer)
}, managementSecretInformer)
driverInformer, driverFilter := driver.InformerHandler()
if driverInformer != nil && driverFilter != nil {
@@ -105,7 +111,7 @@ func NewSecretController(
func (c *secretController) sync(ctx context.Context, syncCtx factory.SyncContext) error {
// get secret containing client certificate
secret, err := c.ManagementCoreClient.Secrets(c.SecretNamespace).Get(ctx, c.SecretName, metav1.GetOptions{})
secret, err := c.managementCoreClient.Secrets(c.SecretNamespace).Get(ctx, c.SecretName, metav1.GetOptions{})
switch {
case apierrors.IsNotFound(err):
secret = &corev1.Secret{
@@ -146,7 +152,7 @@ func (c *secretController) sync(ctx context.Context, syncCtx factory.SyncContext
}
// save the changes into secret
if err := saveSecret(c.ManagementCoreClient, c.SecretNamespace, c.secretToSave); err != nil {
if err := saveSecret(c.managementCoreClient, c.SecretNamespace, c.secretToSave); err != nil {
return err
}
syncCtx.Recorder().Eventf("SecretSave", "Secret %s/%s for %s is updated",
@@ -149,12 +149,13 @@ func TestSync(t *testing.T) {
t.Run(c.name, func(t *testing.T) {
syncCtx := testingcommon.NewFakeSyncContext(t, "test")
kubeClient := kubefake.NewClientset(c.secrets...)
c.option.ManagementCoreClient = kubeClient.CoreV1()
informerFactory := informers.NewSharedInformerFactory(kubeClient, 10*time.Minute)
c.option.ManagementSecretInformer = informerFactory.Core().V1().Secrets().Informer()
updater := &fakeStatusUpdater{}
ctrl := NewSecretController(
c.option, c.driver, updater.update, syncCtx.Recorder(), "test")
c.option, c.driver, updater.update,
kubeClient.CoreV1(),
informerFactory.Core().V1().Secrets().Informer(),
syncCtx.Recorder(), "test")
err := ctrl.Sync(context.Background(), syncCtx)
if err != nil {
t.Fatal(err)
@@ -192,13 +192,11 @@ func (c *addOnRegistrationController) startRegistration(ctx context.Context, con
kubeClient, 10*time.Minute, informers.WithNamespace(config.InstallationNamespace))
secretOption := register.SecretOption{
SecretNamespace: config.InstallationNamespace,
SecretName: config.secretName,
ManagementCoreClient: kubeClient.CoreV1(),
ManagementSecretInformer: kubeInformerFactory.Core().V1().Secrets().Informer(),
Subject: config.x509Subject(c.clusterName, c.agentName),
Signer: config.registration.SignerName,
ClusterName: c.clusterName,
SecretNamespace: config.InstallationNamespace,
SecretName: config.secretName,
Subject: config.x509Subject(c.clusterName, c.agentName),
Signer: config.registration.SignerName,
ClusterName: c.clusterName,
}
if config.registration.SignerName == certificatesv1.KubeAPIServerClientSignerName {
@@ -207,7 +205,11 @@ func (c *addOnRegistrationController) startRegistration(ctx context.Context, con
driver := c.addonDriver.Fork(config.addOnName, secretOption)
controllerName := fmt.Sprintf("ClientCertController@addon:%s:signer:%s", config.addOnName, config.registration.SignerName)
statusUpdater := c.generateStatusUpdate(c.clusterName, config.addOnName)
secretController := register.NewSecretController(secretOption, driver, statusUpdater, c.recorder, controllerName)
secretController := register.NewSecretController(
secretOption, driver, statusUpdater,
kubeClient.CoreV1(),
kubeInformerFactory.Core().V1().Secrets().Informer(),
c.recorder, controllerName)
go kubeInformerFactory.Start(ctx.Done())
go secretController.Run(ctx, 1)
+15 -11
View File
@@ -207,15 +207,13 @@ func (o *SpokeAgentConfig) RunSpokeAgentWithSpokeInformers(ctx context.Context,
// build up the secretOption
secretOption := register.SecretOption{
SecretNamespace: o.agentOptions.ComponentNamespace,
SecretName: o.registrationOption.HubKubeconfigSecret,
ClusterName: o.agentOptions.SpokeClusterName,
AgentName: o.agentOptions.AgentID,
ManagementSecretInformer: namespacedManagementKubeInformerFactory.Core().V1().Secrets().Informer(),
ManagementCoreClient: managementKubeClient.CoreV1(),
HubKubeconfigFile: o.agentOptions.HubKubeconfigFile,
HubKubeconfigDir: o.agentOptions.HubKubeconfigDir,
BootStrapKubeConfigFile: o.currentBootstrapKubeConfig,
SecretNamespace: o.agentOptions.ComponentNamespace,
SecretName: o.registrationOption.HubKubeconfigSecret,
ClusterName: o.agentOptions.SpokeClusterName,
AgentName: o.agentOptions.AgentID,
HubKubeconfigFile: o.agentOptions.HubKubeconfigFile,
HubKubeconfigDir: o.agentOptions.HubKubeconfigDir,
BootStrapKubeConfigFile: o.currentBootstrapKubeConfig,
}
// initiate registration driver
@@ -281,7 +279,10 @@ func (o *SpokeAgentConfig) RunSpokeAgentWithSpokeInformers(ctx context.Context,
controllerName := fmt.Sprintf("BootstrapController@cluster:%s", o.agentOptions.SpokeClusterName)
secretController := register.NewSecretController(
secretOption, o.driver, register.GenerateBootstrapStatusUpdater(), recorder, controllerName)
secretOption, o.driver, register.GenerateBootstrapStatusUpdater(),
managementKubeClient.CoreV1(),
namespacedManagementKubeInformerFactory.Core().V1().Secrets().Informer(),
recorder, controllerName)
go bootstrapClients.ClusterInformer.Informer().Run(bootstrapCtx.Done())
if driverInformer != nil {
@@ -327,7 +328,10 @@ func (o *SpokeAgentConfig) RunSpokeAgentWithSpokeInformers(ctx context.Context,
secretOption, o.driver, register.GenerateStatusUpdater(
hubClient.ClusterClient,
hubClient.ClusterInformer.Lister(),
o.agentOptions.SpokeClusterName), recorder, controllerName)
o.agentOptions.SpokeClusterName),
managementKubeClient.CoreV1(),
namespacedManagementKubeInformerFactory.Core().V1().Secrets().Informer(),
recorder, controllerName)
// create ManagedClusterLeaseController to keep the spoke cluster heartbeat
managedClusterLeaseController := lease.NewManagedClusterLeaseController(