Skip to content

Commit 8556023

Browse files
authored
Merge pull request #1560 from gianlucam76/drift
(bug) check for ResourceSummary in managed cluster
2 parents 958f9a5 + 18c3542 commit 8556023

File tree

2 files changed

+112
-79
lines changed

2 files changed

+112
-79
lines changed

controllers/drift_detection_upgrade.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3333
"sigs.k8s.io/controller-runtime/pkg/client"
3434

35+
"github.com/projectsveltos/addon-controller/controllers/clustercache"
3536
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
3637
"github.com/projectsveltos/libsveltos/lib/clusterproxy"
3738
logs "github.com/projectsveltos/libsveltos/lib/logsettings"
@@ -257,8 +258,16 @@ func skipUpgrading(ctx context.Context, c client.Client, cluster client.Object,
257258
return true, nil
258259
}
259260

261+
cacheMgr := clustercache.GetManager()
262+
managedClient, err := cacheMgr.GetKubernetesClient(ctx, c, cluster.GetNamespace(), cluster.GetName(),
263+
"", "", clusterproxy.GetClusterType(clusterRef), logger)
264+
if err != nil {
265+
logger.V(logs.LogInfo).Error(err, "failed to get managed client")
266+
return true, err
267+
}
268+
260269
// Verify if ResourceSummary CRD is present. Th
261-
resourceCRDPresent, err := isResourceSummaryCRDPresent(ctx, c, logger)
270+
resourceCRDPresent, err := isResourceSummaryCRDPresent(ctx, managedClient, logger)
262271
if err != nil {
263272
return true, err
264273
}

controllers/drift_detection_upgrade_test.go

Lines changed: 102 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -23,172 +23,196 @@ import (
2323
. "github.com/onsi/ginkgo/v2"
2424
. "github.com/onsi/gomega"
2525

26+
corev1 "k8s.io/api/core/v1"
2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728
"k8s.io/klog/v2/textlogger"
2829
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
29-
"sigs.k8s.io/controller-runtime/pkg/client"
30-
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3130

3231
"github.com/projectsveltos/addon-controller/controllers"
3332
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
34-
libsveltoscrd "github.com/projectsveltos/libsveltos/lib/crd"
35-
"github.com/projectsveltos/libsveltos/lib/k8s_utils"
3633
)
3734

3835
var _ = Describe("Drift Detection Upgrade", func() {
36+
sveltosKubeconfigPostfix := "-sveltos" + kubeconfigPostfix
3937
var logger logr.Logger
4038

4139
BeforeEach(func() {
42-
logger = textlogger.NewLogger(textlogger.NewConfig())
40+
logger = textlogger.NewLogger(textlogger.NewConfig(textlogger.Verbosity(0)))
4341
})
4442

4543
It("skipUpgrading skips clusters which are paused or not ready", func() {
4644
paused := true
45+
namespace := randomString()
4746
sveltosClusterPaused := &libsveltosv1beta1.SveltosCluster{
4847
ObjectMeta: metav1.ObjectMeta{
4948
Name: randomString(),
50-
Namespace: randomString(),
49+
Namespace: namespace,
5150
},
5251
Spec: libsveltosv1beta1.SveltosClusterSpec{
5352
Paused: paused,
5453
},
5554
}
56-
Expect(addTypeInformationToObject(scheme, sveltosClusterPaused)).To(Succeed())
5755

5856
sveltosClusterNotReady := &libsveltosv1beta1.SveltosCluster{
5957
ObjectMeta: metav1.ObjectMeta{
6058
Name: randomString(),
61-
Namespace: randomString(),
59+
Namespace: namespace,
6260
},
6361
Spec: libsveltosv1beta1.SveltosClusterSpec{
6462
Paused: false,
6563
},
66-
Status: libsveltosv1beta1.SveltosClusterStatus{
67-
Ready: false,
68-
},
6964
}
70-
Expect(addTypeInformationToObject(scheme, sveltosClusterNotReady)).To(Succeed())
7165

7266
sveltosClusterReadyAndNotPaused := &libsveltosv1beta1.SveltosCluster{
7367
ObjectMeta: metav1.ObjectMeta{
7468
Name: randomString(),
75-
Namespace: randomString(),
69+
Namespace: namespace,
7670
},
7771
Spec: libsveltosv1beta1.SveltosClusterSpec{
7872
Paused: false,
7973
},
80-
Status: libsveltosv1beta1.SveltosClusterStatus{
81-
Ready: true,
82-
},
8374
}
84-
Expect(addTypeInformationToObject(scheme, sveltosClusterReadyAndNotPaused)).To(Succeed())
8575

8676
capiClusterPaused := &clusterv1.Cluster{
8777
ObjectMeta: metav1.ObjectMeta{
8878
Name: randomString(),
89-
Namespace: randomString(),
79+
Namespace: namespace,
9080
},
9181
Spec: clusterv1.ClusterSpec{
9282
Paused: &paused,
9383
},
9484
}
95-
Expect(addTypeInformationToObject(scheme, capiClusterPaused)).To(Succeed())
9685

9786
initialized := true
9887
capiClusterNotPaused := &clusterv1.Cluster{
9988
ObjectMeta: metav1.ObjectMeta{
10089
Name: randomString(),
101-
Namespace: randomString(),
90+
Namespace: namespace,
10291
},
10392
Spec: clusterv1.ClusterSpec{},
104-
Status: clusterv1.ClusterStatus{
105-
Initialization: clusterv1.ClusterInitializationStatus{
106-
ControlPlaneInitialized: &initialized,
107-
},
93+
}
94+
95+
ns := &corev1.Namespace{
96+
ObjectMeta: metav1.ObjectMeta{
97+
Name: namespace,
10898
},
10999
}
110-
Expect(addTypeInformationToObject(scheme, capiClusterNotPaused)).To(Succeed())
111100

112-
resourceSummaryCRD, err := k8s_utils.GetUnstructured(libsveltoscrd.GetResourceSummaryCRDYAML())
113-
Expect(err).To(BeNil())
101+
Expect(testEnv.Create(context.TODO(), ns)).To(Succeed())
102+
Expect(waitForObject(context.TODO(), testEnv, ns)).To(Succeed())
103+
104+
Expect(testEnv.Create(context.TODO(), sveltosClusterReadyAndNotPaused)).To(Succeed())
105+
Expect(waitForObject(context.TODO(), testEnv, sveltosClusterReadyAndNotPaused)).To(Succeed())
114106

115-
initObjects := []client.Object{
116-
sveltosClusterPaused,
117-
sveltosClusterNotReady,
118-
sveltosClusterReadyAndNotPaused,
119-
capiClusterPaused,
120-
capiClusterNotPaused,
121-
resourceSummaryCRD,
107+
sveltosClusterReadyAndNotPaused.Status = libsveltosv1beta1.SveltosClusterStatus{
108+
Ready: true,
122109
}
110+
Expect(testEnv.Status().Update(context.TODO(), sveltosClusterReadyAndNotPaused)).To(Succeed())
123111

124-
c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
125-
WithObjects(initObjects...).Build()
112+
Expect(testEnv.Create(context.TODO(), capiClusterNotPaused)).To(Succeed())
113+
Expect(waitForObject(context.TODO(), testEnv, capiClusterNotPaused)).To(Succeed())
126114

127-
skip, err := controllers.SkipUpgrading(context.TODO(), c, sveltosClusterPaused, logger)
128-
Expect(err).To(BeNil())
129-
Expect(skip).To(BeTrue())
115+
capiClusterNotPaused.Status = clusterv1.ClusterStatus{
116+
Initialization: clusterv1.ClusterInitializationStatus{
117+
ControlPlaneInitialized: &initialized,
118+
},
119+
}
120+
Expect(testEnv.Status().Update(context.TODO(), capiClusterNotPaused)).To(Succeed())
130121

131-
skip, err = controllers.SkipUpgrading(context.TODO(), c, sveltosClusterNotReady, logger)
132-
Expect(err).To(BeNil())
133-
Expect(skip).To(BeTrue())
122+
Expect(testEnv.Create(context.TODO(), sveltosClusterPaused)).To(Succeed())
123+
Expect(waitForObject(context.TODO(), testEnv, sveltosClusterPaused)).To(Succeed())
134124

135-
skip, err = controllers.SkipUpgrading(context.TODO(), c, sveltosClusterReadyAndNotPaused, logger)
136-
Expect(err).To(BeNil())
137-
Expect(skip).To(BeFalse())
125+
Expect(testEnv.Create(context.TODO(), sveltosClusterNotReady)).To(Succeed())
126+
Expect(waitForObject(context.TODO(), testEnv, sveltosClusterNotReady)).To(Succeed())
138127

139-
skip, err = controllers.SkipUpgrading(context.TODO(), c, capiClusterPaused, logger)
140-
Expect(err).To(BeNil())
141-
Expect(skip).To(BeTrue())
128+
Expect(testEnv.Create(context.TODO(), capiClusterPaused)).To(Succeed())
129+
Expect(waitForObject(context.TODO(), testEnv, capiClusterPaused)).To(Succeed())
142130

143-
skip, err = controllers.SkipUpgrading(context.TODO(), c, capiClusterNotPaused, logger)
144-
Expect(err).To(BeNil())
145-
Expect(skip).To(BeFalse())
146-
})
131+
Expect(addTypeInformationToObject(scheme, sveltosClusterPaused)).To(Succeed())
132+
Expect(addTypeInformationToObject(scheme, sveltosClusterNotReady)).To(Succeed())
133+
Expect(addTypeInformationToObject(scheme, sveltosClusterReadyAndNotPaused)).To(Succeed())
134+
Expect(addTypeInformationToObject(scheme, capiClusterPaused)).To(Succeed())
135+
Expect(addTypeInformationToObject(scheme, capiClusterNotPaused)).To(Succeed())
147136

148-
It("skipUpgrading skips clusters with no ResourceSummary CRD", func() {
149-
sveltosClusterReadyAndNotPaused := &libsveltosv1beta1.SveltosCluster{
137+
By("Create the secrets with cluster kubeconfig")
138+
secret := &corev1.Secret{
150139
ObjectMeta: metav1.ObjectMeta{
151-
Name: randomString(),
152-
Namespace: randomString(),
140+
Namespace: namespace,
141+
Name: sveltosClusterPaused.Name + sveltosKubeconfigPostfix,
153142
},
154-
Spec: libsveltosv1beta1.SveltosClusterSpec{
155-
Paused: false,
143+
Data: map[string][]byte{
144+
"value": testEnv.Kubeconfig,
145+
},
146+
}
147+
Expect(testEnv.Create(context.TODO(), secret)).To(Succeed())
148+
Expect(waitForObject(context.TODO(), testEnv, secret)).To(Succeed())
149+
150+
secret = &corev1.Secret{
151+
ObjectMeta: metav1.ObjectMeta{
152+
Namespace: namespace,
153+
Name: sveltosClusterNotReady.Name + sveltosKubeconfigPostfix,
156154
},
157-
Status: libsveltosv1beta1.SveltosClusterStatus{
158-
Ready: true,
155+
Data: map[string][]byte{
156+
"value": testEnv.Kubeconfig,
159157
},
160158
}
161-
Expect(addTypeInformationToObject(scheme, sveltosClusterReadyAndNotPaused)).To(Succeed())
159+
Expect(testEnv.Create(context.TODO(), secret)).To(Succeed())
160+
Expect(waitForObject(context.TODO(), testEnv, secret)).To(Succeed())
162161

163-
initialized := true
164-
capiClusterNotPaused := &clusterv1.Cluster{
162+
secret = &corev1.Secret{
165163
ObjectMeta: metav1.ObjectMeta{
166-
Name: randomString(),
167-
Namespace: randomString(),
164+
Namespace: namespace,
165+
Name: sveltosClusterReadyAndNotPaused.Name + sveltosKubeconfigPostfix,
168166
},
169-
Spec: clusterv1.ClusterSpec{},
170-
Status: clusterv1.ClusterStatus{
171-
Initialization: clusterv1.ClusterInitializationStatus{
172-
ControlPlaneInitialized: &initialized,
173-
},
167+
Data: map[string][]byte{
168+
"value": testEnv.Kubeconfig,
174169
},
175170
}
176-
Expect(addTypeInformationToObject(scheme, capiClusterNotPaused)).To(Succeed())
171+
Expect(testEnv.Create(context.TODO(), secret)).To(Succeed())
172+
Expect(waitForObject(context.TODO(), testEnv, secret)).To(Succeed())
173+
174+
secret = &corev1.Secret{
175+
ObjectMeta: metav1.ObjectMeta{
176+
Namespace: namespace,
177+
Name: capiClusterPaused.Name + kubeconfigPostfix,
178+
},
179+
Data: map[string][]byte{
180+
"value": testEnv.Kubeconfig,
181+
},
182+
}
183+
Expect(testEnv.Create(context.TODO(), secret)).To(Succeed())
184+
Expect(waitForObject(context.TODO(), testEnv, secret)).To(Succeed())
177185

178-
initObjects := []client.Object{
179-
sveltosClusterReadyAndNotPaused,
180-
capiClusterNotPaused,
186+
secret = &corev1.Secret{
187+
ObjectMeta: metav1.ObjectMeta{
188+
Namespace: namespace,
189+
Name: capiClusterNotPaused.Name + kubeconfigPostfix,
190+
},
191+
Data: map[string][]byte{
192+
"value": testEnv.Kubeconfig,
193+
},
181194
}
195+
Expect(testEnv.Create(context.TODO(), secret)).To(Succeed())
196+
Expect(waitForObject(context.TODO(), testEnv, secret)).To(Succeed())
182197

183-
c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
184-
WithObjects(initObjects...).Build()
198+
skip, err := controllers.SkipUpgrading(context.TODO(), testEnv, sveltosClusterPaused, logger)
199+
Expect(err).To(BeNil())
200+
Expect(skip).To(BeTrue())
185201

186-
skip, err := controllers.SkipUpgrading(context.TODO(), c, sveltosClusterReadyAndNotPaused, logger)
202+
skip, err = controllers.SkipUpgrading(context.TODO(), testEnv, sveltosClusterNotReady, logger)
187203
Expect(err).To(BeNil())
188204
Expect(skip).To(BeTrue())
189205

190-
skip, err = controllers.SkipUpgrading(context.TODO(), c, capiClusterNotPaused, logger)
206+
skip, err = controllers.SkipUpgrading(context.TODO(), testEnv, sveltosClusterReadyAndNotPaused, logger)
207+
Expect(err).To(BeNil())
208+
Expect(skip).To(BeFalse())
209+
210+
skip, err = controllers.SkipUpgrading(context.TODO(), testEnv, capiClusterPaused, logger)
191211
Expect(err).To(BeNil())
192212
Expect(skip).To(BeTrue())
213+
214+
skip, err = controllers.SkipUpgrading(context.TODO(), testEnv, capiClusterNotPaused, logger)
215+
Expect(err).To(BeNil())
216+
Expect(skip).To(BeFalse())
193217
})
194218
})

0 commit comments

Comments
 (0)