Skip to content

Commit 00e3290

Browse files
fix
Signed-off-by: Yaroslav Borbat <[email protected]>
1 parent b471438 commit 00e3290

21 files changed

+90
-63
lines changed

images/virtualization-artifact/pkg/controller/service/disk_service.go

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (s DiskService) Start(
9595
}
9696
}
9797

98-
volumeMode, accessMode, err := s.GetVolumeAndAccessModes(ctx, sc)
98+
volumeMode, accessMode, err := s.GetVolumeAndAccessModes(ctx, obj, sc)
9999
if err != nil {
100100
return fmt.Errorf("get volume and access modes: %w", err)
101101
}
@@ -124,14 +124,37 @@ func (s DiskService) Start(
124124
return supplements.EnsureForDataVolume(ctx, s.client, sup, dvBuilder.GetResource(), s.dvcrSettings)
125125
}
126126

127-
func (s DiskService) GetVolumeAndAccessModes(ctx context.Context, sc *storagev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
127+
func (s DiskService) GetVolumeAndAccessModes(ctx context.Context, obj client.Object, sc *storagev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
128+
if obj == nil {
129+
return "", "", errors.New("object is nil")
130+
}
128131
if sc == nil {
129132
return "", "", errors.New("storage class is nil")
130133
}
131134

132-
var accessMode corev1.PersistentVolumeAccessMode
133-
var volumeMode corev1.PersistentVolumeMode
135+
// Priority: object > storage class > storage profile.
136+
137+
// 1. Get modes from annotations on the object.
138+
accessMode, _ := s.parseAccessMode(obj)
139+
volumeMode, _ := s.parseVolumeMode(obj)
140+
141+
if accessMode != "" && volumeMode != "" {
142+
return volumeMode, accessMode, nil
143+
}
144+
145+
// 2. Get modes from annotations on the storage class.
146+
if m, exists := s.parseAccessMode(sc); accessMode == "" && exists {
147+
accessMode = m
148+
}
149+
if m, exists := s.parseVolumeMode(sc); volumeMode == "" && exists {
150+
volumeMode = m
151+
}
152+
153+
if accessMode != "" && volumeMode != "" {
154+
return volumeMode, accessMode, nil
155+
}
134156

157+
// 3. Get modes from storage profile.
135158
storageProfile, err := s.GetStorageProfile(ctx, sc.Name)
136159
if err != nil {
137160
return "", "", fmt.Errorf("get storage profile: %w", err)
@@ -142,14 +165,11 @@ func (s DiskService) GetVolumeAndAccessModes(ctx context.Context, sc *storagev1.
142165
}
143166

144167
storageCaps := s.parseStorageCapabilities(storageProfile.Status)
145-
accessMode = storageCaps.AccessMode
146-
volumeMode = storageCaps.VolumeMode
147-
148-
if m, override := s.parseVolumeMode(sc); override {
149-
volumeMode = m
168+
if accessMode == "" && storageCaps.AccessMode != "" {
169+
accessMode = storageCaps.AccessMode
150170
}
151-
if m, override := s.parseAccessMode(sc); override {
152-
accessMode = m
171+
if volumeMode == "" && storageCaps.VolumeMode != "" {
172+
volumeMode = storageCaps.VolumeMode
153173
}
154174

155175
return volumeMode, accessMode, nil
@@ -459,11 +479,11 @@ func getAccessModeMax(modes []corev1.PersistentVolumeAccessMode) corev1.Persiste
459479
return m
460480
}
461481

462-
func (s DiskService) parseVolumeMode(sc *storagev1.StorageClass) (corev1.PersistentVolumeMode, bool) {
463-
if sc == nil {
482+
func (s DiskService) parseVolumeMode(obj client.Object) (corev1.PersistentVolumeMode, bool) {
483+
if obj == nil {
464484
return "", false
465485
}
466-
switch sc.GetAnnotations()[annotations.AnnVirtualDiskVolumeMode] {
486+
switch obj.GetAnnotations()[annotations.AnnVirtualDiskVolumeMode] {
467487
case string(corev1.PersistentVolumeBlock):
468488
return corev1.PersistentVolumeBlock, true
469489
case string(corev1.PersistentVolumeFilesystem):
@@ -473,11 +493,11 @@ func (s DiskService) parseVolumeMode(sc *storagev1.StorageClass) (corev1.Persist
473493
}
474494
}
475495

476-
func (s DiskService) parseAccessMode(sc *storagev1.StorageClass) (corev1.PersistentVolumeAccessMode, bool) {
477-
if sc == nil {
496+
func (s DiskService) parseAccessMode(obj client.Object) (corev1.PersistentVolumeAccessMode, bool) {
497+
if obj == nil {
478498
return "", false
479499
}
480-
switch sc.GetAnnotations()[annotations.AnnVirtualDiskAccessMode] {
500+
switch obj.GetAnnotations()[annotations.AnnVirtualDiskAccessMode] {
481501
case string(corev1.ReadWriteOnce):
482502
return corev1.ReadWriteOnce, true
483503
case string(corev1.ReadWriteMany):

images/virtualization-artifact/pkg/controller/vd/internal/migration.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type storageClassValidator interface {
4848
}
4949

5050
type volumeAndAccessModesGetter interface {
51-
GetVolumeAndAccessModes(ctx context.Context, sc *storev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error)
51+
GetVolumeAndAccessModes(ctx context.Context, obj client.Object, sc *storev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error)
5252
}
5353

5454
type MigrationHandler struct {
@@ -410,7 +410,7 @@ func (h MigrationHandler) createTargetPersistentVolumeClaim(ctx context.Context,
410410
return nil, fmt.Errorf("unexpected number of pvcs: %d, please report a bug", len(pvcs))
411411
}
412412

413-
volumeMode, accessMode, err := h.modeGetter.GetVolumeAndAccessModes(ctx, sc)
413+
volumeMode, accessMode, err := h.modeGetter.GetVolumeAndAccessModes(ctx, vd, sc)
414414
if err != nil {
415415
return nil, fmt.Errorf("get volume and access modes: %w", err)
416416
}

images/virtualization-artifact/pkg/controller/vd/internal/migration_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type fakeVolumeAndAccessModesGetter struct {
5858
shouldError bool
5959
}
6060

61-
func (m *fakeVolumeAndAccessModesGetter) GetVolumeAndAccessModes(_ context.Context, _ *storev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
61+
func (m *fakeVolumeAndAccessModesGetter) GetVolumeAndAccessModes(_ context.Context, _ client.Object, _ *storev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
6262
if m.shouldError {
6363
return "", "", fmt.Errorf("mock error")
6464
}

images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ import (
2424
"sigs.k8s.io/controller-runtime/pkg/client"
2525
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2626

27-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
2827
"github.com/deckhouse/virtualization-controller/pkg/common/object"
2928
"github.com/deckhouse/virtualization-controller/pkg/common/steptaker"
3029
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
31-
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
3230
"github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/source/step"
3331
vdsupplements "github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/supplements"
3432
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
@@ -83,7 +81,7 @@ func (ds BlankDataSource) Validate(_ context.Context, _ *virtv2.VirtualDisk) err
8381
}
8482

8583
func (ds BlankDataSource) CleanUp(ctx context.Context, vd *virtv2.VirtualDisk) (bool, error) {
86-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
84+
supgen := vdsupplements.NewGenerator(vd)
8785

8886
requeue, err := ds.diskService.CleanUp(ctx, supgen)
8987
if err != nil {

images/virtualization-artifact/pkg/controller/vd/internal/source/blank_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ import (
3434
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3535
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
3636

37-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
3837
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
38+
vdsupplements "github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/supplements"
3939
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
4040
"github.com/deckhouse/virtualization-controller/pkg/logger"
4141
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
@@ -67,7 +67,7 @@ var _ = Describe("Blank", func() {
6767
}
6868

6969
svc = &BlankDataSourceDiskServiceMock{
70-
GetVolumeAndAccessModesFunc: func(_ context.Context, _ *storagev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
70+
GetVolumeAndAccessModesFunc: func(_ context.Context, _ client.Object, _ *storagev1.StorageClass) (corev1.PersistentVolumeMode, corev1.PersistentVolumeAccessMode, error) {
7171
return *pvc.Spec.VolumeMode, pvc.Spec.AccessModes[0], nil
7272
},
7373
GetCapacityFunc: func(_ *corev1.PersistentVolumeClaim) string {
@@ -103,7 +103,7 @@ var _ = Describe("Blank", func() {
103103
},
104104
}
105105

106-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
106+
supgen := vdsupplements.NewGenerator(vd)
107107

108108
pvc = &corev1.PersistentVolumeClaim{
109109
ObjectMeta: metav1.ObjectMeta{

images/virtualization-artifact/pkg/controller/vd/internal/source/http.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3333

3434
"github.com/deckhouse/virtualization-controller/pkg/common"
35-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
3635
"github.com/deckhouse/virtualization-controller/pkg/common/datasource"
3736
"github.com/deckhouse/virtualization-controller/pkg/common/imageformat"
3837
"github.com/deckhouse/virtualization-controller/pkg/common/object"
@@ -86,7 +85,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (reco
8685
cb := conditions.NewConditionBuilder(vdcondition.ReadyType).Generation(vd.Generation)
8786
defer func() { conditions.SetCondition(cb, &vd.Status.Conditions) }()
8887

89-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
88+
supgen := vdsupplements.NewGenerator(vd)
9089
pod, err := ds.importerService.GetPod(ctx, supgen)
9190
if err != nil {
9291
return reconcile.Result{}, err
@@ -344,7 +343,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (reco
344343
}
345344

346345
func (ds HTTPDataSource) CleanUp(ctx context.Context, vd *virtv2.VirtualDisk) (bool, error) {
347-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
346+
supgen := vdsupplements.NewGenerator(vd)
348347

349348
importerRequeue, err := ds.importerService.CleanUp(ctx, supgen)
350349
if err != nil {
@@ -364,7 +363,7 @@ func (ds HTTPDataSource) Validate(_ context.Context, _ *virtv2.VirtualDisk) erro
364363
}
365364

366365
func (ds HTTPDataSource) CleanUpSupplements(ctx context.Context, vd *virtv2.VirtualDisk) (reconcile.Result, error) {
367-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
366+
supgen := vdsupplements.NewGenerator(vd)
368367

369368
importerRequeue, err := ds.importerService.CleanUpSupplements(ctx, supgen)
370369
if err != nil {

images/virtualization-artifact/pkg/controller/vd/internal/source/mock.go

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ import (
2323
"sigs.k8s.io/controller-runtime/pkg/client"
2424
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2525

26-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
2726
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
28-
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
27+
vdsupplements "github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/supplements"
2928
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
3029
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
3130
)
@@ -70,7 +69,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk)
7069
}
7170

7271
func (ds ObjectRefDataSource) CleanUp(ctx context.Context, vd *virtv2.VirtualDisk) (bool, error) {
73-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
72+
supgen := vdsupplements.NewGenerator(vd)
7473

7574
requeue, err := ds.diskService.CleanUp(ctx, supgen)
7675
if err != nil {

images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref_cvi_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3434

35-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
3635
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
3736
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
37+
vdsupplements "github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/supplements"
3838
"github.com/deckhouse/virtualization-controller/pkg/logger"
3939
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
4040
"github.com/deckhouse/virtualization/api/core/v1alpha2/vdcondition"
@@ -112,10 +112,13 @@ var _ = Describe("ObjectRef ClusterVirtualImage", func() {
112112
},
113113
Status: virtv2.VirtualDiskStatus{
114114
StorageClassName: sc.Name,
115+
Target: virtv2.DiskTarget{
116+
PersistentVolumeClaim: "test-pvc",
117+
},
115118
},
116119
}
117120

118-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
121+
supgen := vdsupplements.NewGenerator(vd)
119122

120123
pvc = &corev1.PersistentVolumeClaim{
121124
ObjectMeta: metav1.ObjectMeta{

images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref_vi_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3434

35-
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
3635
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
3736
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
37+
vdsupplements "github.com/deckhouse/virtualization-controller/pkg/controller/vd/internal/supplements"
3838
"github.com/deckhouse/virtualization-controller/pkg/logger"
3939
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
4040
"github.com/deckhouse/virtualization/api/core/v1alpha2/vdcondition"
@@ -112,10 +112,13 @@ var _ = Describe("ObjectRef VirtualImage", func() {
112112
},
113113
Status: virtv2.VirtualDiskStatus{
114114
StorageClassName: sc.Name,
115+
Target: virtv2.DiskTarget{
116+
PersistentVolumeClaim: "test-pvc",
117+
},
115118
},
116119
}
117120

118-
supgen := supplements.NewGenerator(annotations.VDShortName, vd.Name, vd.Namespace, vd.UID)
121+
supgen := vdsupplements.NewGenerator(vd)
119122

120123
pvc = &corev1.PersistentVolumeClaim{
121124
ObjectMeta: metav1.ObjectMeta{

0 commit comments

Comments
 (0)