Skip to content

Commit 4f5c86b

Browse files
authored
Merge pull request #1555 from gianlucam76/drift-detection-upgrade
(bug) Drift-detection upgrade
2 parents 1a73083 + 64653cf commit 4f5c86b

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

controllers/drift_detection_upgrade.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ import (
2525
"github.com/go-logr/logr"
2626
appsv1 "k8s.io/api/apps/v1"
2727
corev1 "k8s.io/api/core/v1"
28+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2829
apierrors "k8s.io/apimachinery/pkg/api/errors"
30+
"k8s.io/apimachinery/pkg/types"
2931
"k8s.io/client-go/rest"
3032
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3133
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -255,5 +257,32 @@ func skipUpgrading(ctx context.Context, c client.Client, cluster client.Object,
255257
return true, nil
256258
}
257259

260+
// Verify if ResourceSummary CRD is present. Th
261+
resourceCRDPresent, err := isResourceSummaryCRDPresent(ctx, c, logger)
262+
if err != nil {
263+
return true, err
264+
}
265+
266+
if !resourceCRDPresent {
267+
return true, nil
268+
}
269+
258270
return false, nil
259271
}
272+
273+
func isResourceSummaryCRDPresent(ctx context.Context, c client.Client, logger logr.Logger) (bool, error) {
274+
resourceSummaryCRD := &apiextensionsv1.CustomResourceDefinition{}
275+
276+
err := c.Get(ctx, types.NamespacedName{Name: "resourcesummaries.lib.projectsveltos.io"},
277+
resourceSummaryCRD)
278+
279+
if err != nil {
280+
if apierrors.IsNotFound(err) {
281+
return false, nil
282+
}
283+
logger.V(logs.LogInfo).Error(err, "failed to verify presence of ResourceSummary CRD")
284+
return false, err
285+
}
286+
287+
return true, nil
288+
}

controllers/drift_detection_upgrade_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import (
3131

3232
"github.com/projectsveltos/addon-controller/controllers"
3333
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
34+
libsveltoscrd "github.com/projectsveltos/libsveltos/lib/crd"
35+
"github.com/projectsveltos/libsveltos/lib/k8s_utils"
3436
)
3537

3638
var _ = Describe("Drift Detection Upgrade", func() {
@@ -107,12 +109,16 @@ var _ = Describe("Drift Detection Upgrade", func() {
107109
}
108110
Expect(addTypeInformationToObject(scheme, capiClusterNotPaused)).To(Succeed())
109111

112+
resourceSummaryCRD, err := k8s_utils.GetUnstructured(libsveltoscrd.GetResourceSummaryCRDYAML())
113+
Expect(err).To(BeNil())
114+
110115
initObjects := []client.Object{
111116
sveltosClusterPaused,
112117
sveltosClusterNotReady,
113118
sveltosClusterReadyAndNotPaused,
114119
capiClusterPaused,
115120
capiClusterNotPaused,
121+
resourceSummaryCRD,
116122
}
117123

118124
c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
@@ -138,4 +144,51 @@ var _ = Describe("Drift Detection Upgrade", func() {
138144
Expect(err).To(BeNil())
139145
Expect(skip).To(BeFalse())
140146
})
147+
148+
It("skipUpgrading skips clusters with no ResourceSummary CRD", func() {
149+
sveltosClusterReadyAndNotPaused := &libsveltosv1beta1.SveltosCluster{
150+
ObjectMeta: metav1.ObjectMeta{
151+
Name: randomString(),
152+
Namespace: randomString(),
153+
},
154+
Spec: libsveltosv1beta1.SveltosClusterSpec{
155+
Paused: false,
156+
},
157+
Status: libsveltosv1beta1.SveltosClusterStatus{
158+
Ready: true,
159+
},
160+
}
161+
Expect(addTypeInformationToObject(scheme, sveltosClusterReadyAndNotPaused)).To(Succeed())
162+
163+
initialized := true
164+
capiClusterNotPaused := &clusterv1.Cluster{
165+
ObjectMeta: metav1.ObjectMeta{
166+
Name: randomString(),
167+
Namespace: randomString(),
168+
},
169+
Spec: clusterv1.ClusterSpec{},
170+
Status: clusterv1.ClusterStatus{
171+
Initialization: clusterv1.ClusterInitializationStatus{
172+
ControlPlaneInitialized: &initialized,
173+
},
174+
},
175+
}
176+
Expect(addTypeInformationToObject(scheme, capiClusterNotPaused)).To(Succeed())
177+
178+
initObjects := []client.Object{
179+
sveltosClusterReadyAndNotPaused,
180+
capiClusterNotPaused,
181+
}
182+
183+
c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
184+
WithObjects(initObjects...).Build()
185+
186+
skip, err := controllers.SkipUpgrading(context.TODO(), c, sveltosClusterReadyAndNotPaused, logger)
187+
Expect(err).To(BeNil())
188+
Expect(skip).To(BeTrue())
189+
190+
skip, err = controllers.SkipUpgrading(context.TODO(), c, capiClusterNotPaused, logger)
191+
Expect(err).To(BeNil())
192+
Expect(skip).To(BeTrue())
193+
})
141194
})

0 commit comments

Comments
 (0)