Skip to content

Commit 3a0f819

Browse files
authored
Trigger adc reconciliation if credentials is updated in ADC (#310)
Signed-off-by: Lubron Zhan <[email protected]>
1 parent b0e20b7 commit 3a0f819

7 files changed

+53
-42
lines changed

controllers/akodeploymentconfig/akodeploymentconfig_controller.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,12 @@ func (r *AKODeploymentConfigReconciler) secretToAKODeploymentConfig(c client.Cli
182182
}
183183

184184
var requests []ctrl.Request
185+
// enqueue if credentials or certificate of akoo is updated
185186
for _, akoDeploymentConfig := range akoDeploymentConfigs.Items {
186187
if akoDeploymentConfig.Spec.CertificateAuthorityRef.Name == secret.Name &&
187-
akoDeploymentConfig.Spec.CertificateAuthorityRef.Namespace == secret.Namespace {
188+
akoDeploymentConfig.Spec.CertificateAuthorityRef.Namespace == secret.Namespace ||
189+
akoDeploymentConfig.Spec.AdminCredentialRef.Name == secret.Name &&
190+
akoDeploymentConfig.Spec.AdminCredentialRef.Namespace == secret.Namespace {
188191
requests = append(requests, ctrl.Request{
189192
NamespacedName: types.NamespacedName{
190193
Namespace: akoDeploymentConfig.Namespace,

controllers/akodeploymentconfig/akodeploymentconfig_controller_intg_test.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako"
2727
ako_operator "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako-operator"
2828
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/test/builder"
29-
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/test/util"
3029
testutil "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/test/util"
3130
)
3231

@@ -352,7 +351,7 @@ func intgTestAkoDeploymentConfigController() {
352351
err := os.Setenv(ako_operator.IsControlPlaneHAProvider, "False")
353352
Expect(err).ShouldNot(HaveOccurred())
354353
})
355-
It("shouldn't wait AIS if controlplane and dataplane has the same CIDR", func() {
354+
It("shouldn't wait for AIS if controlplane and dataplane has the same CIDR", func() {
356355
akoDeploymentConfig.Spec.ControlPlaneNetwork.CIDR = akoDeploymentConfig.Spec.DataNetwork.CIDR
357356
createObjects(akoDeploymentConfig, cluster, controllerCredentials, controllerCA)
358357
aviInfraSettingName = akoDeploymentConfig.Name + "-ais"
@@ -369,7 +368,7 @@ func intgTestAkoDeploymentConfigController() {
369368
Expect(service.Annotations[akoov1alpha1.HAAVIInfraSettingAnnotationsKey]).To(BeEmpty())
370369

371370
})
372-
It("should wait AIS before adding annotation to service", func() {
371+
It("should wait for AIS before adding annotation to service", func() {
373372
createObjects(akoDeploymentConfig, cluster, controllerCredentials, controllerCA)
374373
aviInfraSettingName = akoDeploymentConfig.Name + "-ais"
375374
ensureRuntimeObjectMatchExpectation(client.ObjectKey{
@@ -756,7 +755,7 @@ func intgTestAkoDeploymentConfigController() {
756755
}, &akoov1alpha1.AKODeploymentConfig{}, true)
757756

758757
ensureRuntimeObjectMatchExpectation(client.ObjectKey{
759-
Name: util.CustomADCName,
758+
Name: testutil.CustomADCName,
760759
}, &akoov1alpha1.AKODeploymentConfig{}, true)
761760
})
762761

@@ -775,7 +774,7 @@ func intgTestAkoDeploymentConfigController() {
775774
ensureClusterAviLabelValueMatchExpectation(client.ObjectKey{
776775
Name: cluster.Name,
777776
Namespace: cluster.Namespace,
778-
}, akoov1alpha1.AviClusterLabel, util.CustomADCName, true)
777+
}, akoov1alpha1.AviClusterLabel, testutil.CustomADCName, true)
779778

780779
By("removing cluster's label")
781780
latestCluster := &clusterv1.Cluster{
@@ -814,7 +813,7 @@ func intgTestAkoDeploymentConfigController() {
814813
}, &akoov1alpha1.AKODeploymentConfig{}, true)
815814

816815
ensureRuntimeObjectMatchExpectation(client.ObjectKey{
817-
Name: util.CustomADCName,
816+
Name: testutil.CustomADCName,
818817
}, &akoov1alpha1.AKODeploymentConfig{}, true)
819818
})
820819

@@ -833,7 +832,7 @@ func intgTestAkoDeploymentConfigController() {
833832
ensureClusterAviLabelValueMatchExpectation(client.ObjectKey{
834833
Name: cluster.Name,
835834
Namespace: cluster.Namespace,
836-
}, akoov1alpha1.AviClusterLabel, util.CustomADCName, true)
835+
}, akoov1alpha1.AviClusterLabel, testutil.CustomADCName, true)
837836

838837
By("removing cluster's label")
839838
latestCluster := &clusterv1.Cluster{

controllers/akodeploymentconfig/cluster/cluster_controller.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,24 @@ import (
88
"fmt"
99
"time"
1010

11-
"k8s.io/client-go/kubernetes/scheme"
12-
1311
"github.com/go-logr/logr"
1412
"github.com/pkg/errors"
15-
akoov1alpha1 "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/api/v1alpha1"
1613
corev1 "k8s.io/api/core/v1"
17-
"sigs.k8s.io/controller-runtime/pkg/client/fake"
18-
ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
19-
20-
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako"
21-
akoo "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako-operator"
2214
apierrors "k8s.io/apimachinery/pkg/api/errors"
2315
"k8s.io/apimachinery/pkg/runtime"
16+
"k8s.io/client-go/kubernetes/scheme"
2417
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2518
"sigs.k8s.io/cluster-api/controllers/remote"
2619
"sigs.k8s.io/cluster-api/util/conditions"
2720
ctrl "sigs.k8s.io/controller-runtime"
2821
"sigs.k8s.io/controller-runtime/pkg/client"
22+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
23+
ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
24+
25+
akoov1alpha1 "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/api/v1alpha1"
26+
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako"
27+
akoo "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/ako-operator"
28+
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/utils"
2929
)
3030

3131
const (
@@ -122,7 +122,7 @@ func (r *ClusterReconciler) cleanup(
122122
// - secret is <cluster-name>-load-balancer-and-ingress-service-data-values
123123
secretName := r.akoAddonDataValueName()
124124
if akoo.IsClusterClassBasedCluster(obj) {
125-
secretName = r.akoAddonSecretNameForClusterClass(obj)
125+
secretName = utils.AKOAddonSecretNameForClusterClass(obj)
126126
}
127127
if err := remoteClient.Get(ctx, client.ObjectKey{
128128
Name: secretName,

controllers/akodeploymentconfig/cluster/cluster_controller_addon_secret.go

+6-18
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (r *ClusterReconciler) ReconcileAddonSecret(
8787
}
8888
secret := &corev1.Secret{}
8989
if err = r.Get(ctx, client.ObjectKey{
90-
Name: r.akoAddonSecretName(cluster),
90+
Name: utils.AKOAddonSecretName(cluster),
9191
Namespace: cluster.Namespace,
9292
}, secret); err != nil {
9393
if apierrors.IsNotFound(err) {
@@ -125,7 +125,7 @@ func (r *ClusterReconciler) ReconcileAddonSecretDelete(
125125

126126
secret := &corev1.Secret{}
127127
if err := r.Get(ctx, client.ObjectKey{
128-
Name: r.akoAddonSecretName(cluster),
128+
Name: utils.AKOAddonSecretName(cluster),
129129
Namespace: cluster.Namespace,
130130
}, secret); err != nil {
131131
if apierrors.IsNotFound(err) {
@@ -153,26 +153,14 @@ func (r *ClusterReconciler) ReconcileAddonSecretDelete(
153153
return res, nil
154154
}
155155

156-
func (r *ClusterReconciler) aviUserSecretName(cluster *clusterv1.Cluster) string {
157-
return cluster.Name + "-avi-credentials"
158-
}
159-
160-
func (r *ClusterReconciler) akoAddonSecretName(cluster *clusterv1.Cluster) string {
161-
return cluster.Name + "-load-balancer-and-ingress-service-addon"
162-
}
163-
164-
func (r *ClusterReconciler) akoAddonSecretNameForClusterClass(cluster *clusterv1.Cluster) string {
165-
return cluster.Name + "-load-balancer-and-ingress-service-data-values"
166-
}
167-
168156
func (r *ClusterReconciler) createAKOAddonSecret(cluster *clusterv1.Cluster, obj *akoov1alpha1.AKODeploymentConfig, aviUsersecret *corev1.Secret) (*corev1.Secret, error) {
169157
secretStringData, err := AkoAddonSecretDataYaml(cluster, obj, aviUsersecret)
170158
if err != nil {
171159
return nil, err
172160
}
173161
secret := &corev1.Secret{
174162
ObjectMeta: metav1.ObjectMeta{
175-
Name: r.akoAddonSecretName(cluster),
163+
Name: utils.AKOAddonSecretName(cluster),
176164
Namespace: cluster.Namespace,
177165
Annotations: map[string]string{
178166
akoov1alpha1.TKGAddonAnnotationKey: "networking/load-balancer-and-ingress-service",
@@ -223,7 +211,7 @@ func AkoAddonSecretDataYaml(cluster *clusterv1.Cluster, obj *akoov1alpha1.AKODep
223211
func (r *ClusterReconciler) getClusterAviUserSecret(cluster *clusterv1.Cluster, ctx context.Context) (*corev1.Secret, error) {
224212
secret := &corev1.Secret{}
225213
if err := r.Get(ctx, client.ObjectKey{
226-
Name: r.aviUserSecretName(cluster),
214+
Name: utils.AVIUserSecretName(cluster),
227215
Namespace: cluster.Namespace,
228216
}, secret); err != nil {
229217
return secret, err
@@ -264,7 +252,7 @@ func (r *ClusterReconciler) patchAkoPackageRefToClusterBootstrap(ctx context.Con
264252
expectedAKOClusterBootstrapPackage := &runv1alpha3.ClusterBootstrapPackage{
265253
RefName: akoPackageRefName,
266254
ValuesFrom: &runv1alpha3.ValuesFrom{
267-
SecretRef: r.akoAddonSecretName(cluster),
255+
SecretRef: utils.AKOAddonSecretName(cluster),
268256
},
269257
}
270258

@@ -390,7 +378,7 @@ func ValidateClusterIpFamily(cluster *clusterv1.Cluster, adc *akoov1alpha1.AKODe
390378
// When enable avi as control plane ha, backend server shouldn't use secondary ip type
391379
// TODO:(chenlin) Remove validation after AKO supports configurable ip pool
392380
if isVIPProvider && adcIpFamily == IPv6IpFamily && clusterIpFamily == DualStackIPv4Primary {
393-
return errors.New("When enabling avi as control plane HA, AKO with IP family V6 can not work together with ipv4 primary dual-stack cluster")
381+
return errors.New("when enabling avi as control plane HA, AKO with IP family V6 can not work together with ipv4 primary dual-stack cluster")
394382
}
395383
return nil
396384
}

controllers/akodeploymentconfig/user/user_controller.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ import (
88

99
"github.com/go-logr/logr"
1010
"github.com/pkg/errors"
11-
akoov1alpha1 "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/api/v1alpha1"
12-
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/aviclient"
13-
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/utils"
1411
"github.com/vmware/alb-sdk/go/models"
1512
corev1 "k8s.io/api/core/v1"
1613
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -22,6 +19,10 @@ import (
2219
"sigs.k8s.io/cluster-api/util/conditions"
2320
ctrl "sigs.k8s.io/controller-runtime"
2421
"sigs.k8s.io/controller-runtime/pkg/client"
22+
23+
akoov1alpha1 "github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/api/v1alpha1"
24+
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/aviclient"
25+
"github.com/vmware-tanzu/load-balancer-operator-for-kubernetes/pkg/utils"
2526
)
2627

2728
// AkoUserReconciler reconcile avi user related resources
@@ -431,12 +432,12 @@ func (r *AkoUserReconciler) deployManagementClusterSecret(
431432
Name: obj.Spec.AdminCredentialRef.Name,
432433
Namespace: obj.Spec.AdminCredentialRef.Namespace,
433434
}, adminCredential); err != nil {
434-
log.Error(err, "Failed to find referenced AdminCredential Secret")
435+
log.Error(err, "Failed to find referenced AdminCredential Secret", "secret namespace", obj.Spec.AdminCredentialRef.Namespace, "secret name", obj.Spec.AdminCredentialRef.Name)
435436
return err
436437
}
437438
secret := &corev1.Secret{
438439
ObjectMeta: metav1.ObjectMeta{
439-
Name: cluster.Name + "-avi-credentials",
440+
Name: utils.AVIUserSecretName(cluster),
440441
Namespace: cluster.Namespace,
441442
},
442443
Type: akoov1alpha1.AviClusterSecretType,
@@ -448,7 +449,7 @@ func (r *AkoUserReconciler) deployManagementClusterSecret(
448449
}
449450
err := r.Client.Create(ctx, secret)
450451
if apierrors.IsAlreadyExists(err) {
451-
log.Info("avi secret already exists, update avi-secret")
452+
log.Info("avi secret already exists, update avi-secret", "secret namespace", secret.Namespace, "secret name", secret.Name)
452453
return r.Client.Update(ctx, secret)
453454
}
454455
return err

pkg/haprovider/haprovider.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func (r *HAProvider) CreateOrUpdateHAService(ctx context.Context, cluster *clust
6767
Namespace: cluster.Namespace,
6868
}, service); err != nil {
6969
if apierrors.IsNotFound(err) {
70-
r.log.Info(serviceName + "service doesn't exist, start creating it...")
70+
r.log.Info(serviceName + " service doesn't exist, start creating it...")
7171
service, err = r.createService(ctx, cluster)
7272
if err != nil {
7373
return err

pkg/utils/get_objects.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2024 VMware, Inc.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package utils
5+
6+
import (
7+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
8+
)
9+
10+
func AVIUserSecretName(cluster *clusterv1.Cluster) string {
11+
return cluster.Name + "-avi-credentials"
12+
}
13+
14+
func AKOAddonSecretName(cluster *clusterv1.Cluster) string {
15+
return cluster.Name + "-load-balancer-and-ingress-service-addon"
16+
}
17+
18+
func AKOAddonSecretNameForClusterClass(cluster *clusterv1.Cluster) string {
19+
return cluster.Name + "-load-balancer-and-ingress-service-data-values"
20+
}

0 commit comments

Comments
 (0)