mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-08-23 22:26:49 +00:00
Move client/informer out from secretOption (#926)
Signed-off-by: Jian Qiu <jqiu@redhat.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user