Skip to content

Commit 1f8bf3e

Browse files
authored
fix virt annotation (#258)
Signed-off-by: Aleksandr Zimin <[email protected]>
1 parent 1b0e1c7 commit 1f8bf3e

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

images/sds-replicated-volume-controller/pkg/controller/replicated_storage_class.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"maps"
2424
"reflect"
2525
"slices"
26+
"strconv"
2627
"strings"
2728
"time"
2829

@@ -149,7 +150,7 @@ func NewReplicatedStorageClass(
149150
log.Debug(fmt.Sprintf("[ReplicatedStorageClassReconciler] Get UPDATE event for ReplicatedStorageClass %s. Check if it was changed.", e.ObjectNew.GetName()))
150151
log.Trace(fmt.Sprintf("[ReplicatedStorageClassReconciler] Old ReplicatedStorageClass: %+v", e.ObjectOld))
151152
log.Trace(fmt.Sprintf("[ReplicatedStorageClassReconciler] New ReplicatedStorageClass: %+v", e.ObjectNew))
152-
if e.ObjectNew.GetDeletionTimestamp() != nil || !reflect.DeepEqual(e.ObjectNew.Spec, e.ObjectOld.Spec) {
153+
if e.ObjectNew.GetDeletionTimestamp() != nil || !reflect.DeepEqual(e.ObjectNew.Spec, e.ObjectOld.Spec) || !reflect.DeepEqual(e.ObjectNew.Annotations, e.ObjectOld.Annotations) {
153154
log.Debug(fmt.Sprintf("[ReplicatedStorageClassReconciler] ReplicatedStorageClass %s was changed. Add it to queue.", e.ObjectNew.GetName()))
154155
request := reconcile.Request{NamespacedName: types.NamespacedName{Namespace: e.ObjectNew.GetNamespace(), Name: e.ObjectNew.GetName()}}
155156
q.Add(request)
@@ -690,7 +691,13 @@ func recreateStorageClassIfNeeded(
690691

691692
func GetNewStorageClass(replicatedSC *srv.ReplicatedStorageClass, virtualizationEnabled bool) *storagev1.StorageClass {
692693
newSC := GenerateStorageClassFromReplicatedStorageClass(replicatedSC)
693-
if replicatedSC.Spec.VolumeAccess == VolumeAccessLocal && virtualizationEnabled {
694+
// Do NOT add the virtualization annotation `virtualdisk.virtualization.deckhouse.io/access-mode: ReadWriteOnce` if the source ReplicatedStorageClass
695+
// has replicatedstorageclass.storage.deckhouse.io/ignore-local: "true".
696+
ignoreLocal, _ := strconv.ParseBool(
697+
replicatedSC.Annotations[StorageClassIgnoreLocalAnnotationKey],
698+
)
699+
700+
if replicatedSC.Spec.VolumeAccess == VolumeAccessLocal && virtualizationEnabled && !ignoreLocal {
694701
if newSC.Annotations == nil {
695702
newSC.Annotations = make(map[string]string, 1)
696703
}

images/sds-replicated-volume-controller/pkg/controller/storage_class_annotations_func.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,22 @@ package controller
1919
import (
2020
"context"
2121
"fmt"
22+
"strconv"
2223

2324
corev1 "k8s.io/api/core/v1"
2425
storagev1 "k8s.io/api/storage/v1"
2526
"k8s.io/apimachinery/pkg/api/errors"
2627
"sigs.k8s.io/controller-runtime/pkg/client"
2728
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2829

30+
srv "github.com/deckhouse/sds-replicated-volume/api/v1alpha1"
2931
"github.com/deckhouse/sds-replicated-volume/images/sds-replicated-volume-controller/pkg/logger"
3032
)
3133

3234
const (
3335
StorageClassVirtualizationAnnotationKey = "virtualdisk.virtualization.deckhouse.io/access-mode"
3436
StorageClassVirtualizationAnnotationValue = "ReadWriteOnce"
37+
StorageClassIgnoreLocalAnnotationKey = "replicatedstorageclass.storage.deckhouse.io/ignore-local"
3538
)
3639

3740
func ReconcileControllerConfigMapEvent(ctx context.Context, cl client.Client, log logger.Logger, request reconcile.Request) (bool, error) {
@@ -90,7 +93,19 @@ func getStorageClassListForAnnotationsReconcile(ctx context.Context, cl client.C
9093

9194
value, exists := storageClass.Annotations[StorageClassVirtualizationAnnotationKey]
9295

93-
if virtualizationEnabled {
96+
replicatedSC := &srv.ReplicatedStorageClass{}
97+
log.Debug(fmt.Sprintf("[getStorageClassForAnnotationsReconcile] Virtualization enabled. Get replicated storage class %s for annotations reconcile", storageClass.Name))
98+
err = cl.Get(ctx, client.ObjectKey{Name: storageClass.Name}, replicatedSC)
99+
if err != nil {
100+
log.Error(err, fmt.Sprintf("[getStorageClassForAnnotationsReconcile] Failed to get replicated storage class %s", storageClass.Name))
101+
return nil, err
102+
}
103+
104+
ignoreLocal, _ := strconv.ParseBool(
105+
replicatedSC.Annotations[StorageClassIgnoreLocalAnnotationKey],
106+
)
107+
108+
if virtualizationEnabled && !ignoreLocal {
94109
if value != StorageClassVirtualizationAnnotationValue {
95110
storageClass.Annotations[StorageClassVirtualizationAnnotationKey] = StorageClassVirtualizationAnnotationValue
96111
storageClassList.Items = append(storageClassList.Items, storageClass)

0 commit comments

Comments
 (0)