Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ FROM $BASEIMAGE AS container-base
ARG VERSION
LABEL vendor="Dell Technologies" \
maintainer="Dell Technologies" \
release="1.16.0" \
release="1.17.0" \
license="Apache-2.0"

FROM container-base AS controller
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,3 @@ If you wish to install CSM Replication Controller with repctl on your openSUSE s

Click [here](/TESTING.md) for details on how to test.


12 changes: 12 additions & 0 deletions cmd/csi-migrator/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/workqueue"
ctrl "sigs.k8s.io/controller-runtime"
Expand All @@ -45,6 +46,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)

type mockManager struct {
Expand Down Expand Up @@ -176,6 +178,16 @@ func (m *mockManager) GetScheme() *runtime.Scheme {
return nil
}

func (m *mockManager) GetConverterRegistry() conversion.Registry {
// Implement the method as needed for your mock
return nil
}

func (m *mockManager) GetEventRecorder(_ string) events.EventRecorder {
// Implement the method as needed for your mock
return nil
}

func TestProcessConfigMapChanges(t *testing.T) {
defaultGetUpdateConfigMapFunc := getUpdateConfigMapFunc
defer func() {
Expand Down
12 changes: 12 additions & 0 deletions cmd/csi-node-rescanner/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/workqueue"

Expand All @@ -52,6 +53,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)

func TestGetCSIConn(t *testing.T) {
Expand Down Expand Up @@ -915,6 +917,16 @@ func (m *MockManager) GetWebhookServer() webhook.Server {
return nil
}

func (m *MockManager) GetConverterRegistry() conversion.Registry {
// Implement the GetConverterRegistry method logic
return nil
}

func (m *MockManager) GetEventRecorder(_ string) events.EventRecorder {
// Implement the GetEventRecorder method logic
return nil
}

// MockEventRecorder is a mock implementation of the record.EventRecorder interface
type MockEventRecorder struct{}

Expand Down
12 changes: 12 additions & 0 deletions cmd/csi-replicator/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/workqueue"
ctrl "sigs.k8s.io/controller-runtime"
Expand All @@ -51,6 +52,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)

type mockManager struct {
Expand Down Expand Up @@ -174,6 +176,16 @@ func (m *mockManager) GetScheme() *runtime.Scheme {
return nil
}

func (m *mockManager) GetConverterRegistry() conversion.Registry {
// Implement the method as needed for your mock
return nil
}

func (m *mockManager) GetEventRecorder(_ string) events.EventRecorder {
// Implement the method as needed for your mock
return nil
}

func TestCreateReplicatorManager(t *testing.T) {
// Original function references
originalGetControllerManagerOpts := getControllerManagerOpts
Expand Down
32 changes: 18 additions & 14 deletions cmd/replication-controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,12 @@ var (

setupFlags = func() (map[string]string, logr.Logger, *logrus.Logger, context.Context) {
var (
retryIntervalStart time.Duration
retryIntervalMax time.Duration
workerThreads int
domain string
disablePVCRemap bool
retryIntervalStart time.Duration
retryIntervalMax time.Duration
workerThreads int
domain string
disablePVCRemap bool
enableKubevirtPVCRemap bool
)

var metricsAddr string
Expand All @@ -124,6 +125,7 @@ var (
flag.DurationVar(&retryIntervalMax, "retry-interval-max", 5*time.Minute, "Maximum retry interval of failed reconcile request")
flag.IntVar(&workerThreads, "worker-threads", 2, "Number of concurrent reconcilers for each of the controllers")
flag.BoolVar(&disablePVCRemap, "disable-pvc-remap", false, "disables PVC remapping functionality")
flag.BoolVar(&enableKubevirtPVCRemap, "enable-kubevirt-pvc-remap", false, "enables KubeVirt PVC remapping functionality")
flag.BoolVar(&allowPVCCreationOnTarget, "allow-pvc-creation-on-target", false, "allow PVC creation on target cluster")
flag.Parse()

Expand All @@ -147,6 +149,7 @@ var (
flagMap["retry-interval-max"] = retryIntervalMax.String()
flagMap["worker-threads"] = strconv.Itoa(workerThreads)
flagMap["disable-pvc-remap"] = strconv.FormatBool(disablePVCRemap)
flagMap["enable-kubevirt-pvc-remap"] = strconv.FormatBool(enableKubevirtPVCRemap)
flagMap["allow-pvc-creation-on-target"] = strconv.FormatBool(allowPVCCreationOnTarget)

return flagMap, setupLog, logrusLog, context.Background()
Expand Down Expand Up @@ -305,7 +308,7 @@ func main() {
createPersistentVolumeClaimReconciler(mgr, controllerMgr, flagMap["prefix"], stringToInt(flagMap["worker-threads"]), expRateLimiter, stringToBoolean(flagMap["allow-pvc-creation-on-target"]), setupLog)

// Create ReplicationGroupReconciler
createReplicationGroupReconciler(mgr, controllerMgr, flagMap["prefix"], stringToInt(flagMap["worker-threads"]), expRateLimiter, stringToBoolean(flagMap["disable-pvc-remap"]), setupLog)
createReplicationGroupReconciler(mgr, controllerMgr, flagMap["prefix"], stringToInt(flagMap["worker-threads"]), expRateLimiter, stringToBoolean(flagMap["disable-pvc-remap"]), stringToBoolean(flagMap["enable-kubevirt-pvc-remap"]), setupLog)

// Create PersistentVolumeReconciler
createPersistentVolumeReconciler(mgr, controllerMgr, flagMap["prefix"], stringToInt(flagMap["worker-threads"]), expRateLimiter, setupLog)
Expand Down Expand Up @@ -345,15 +348,16 @@ func createPersistentVolumeReconciler(mgr manager.Manager, controllerMgr *Contro
}
}

func createReplicationGroupReconciler(mgr manager.Manager, controllerMgr *ControllerManager, domain string, workerThreads int, expRateLimiter workqueue.TypedRateLimiter[reconcile.Request], disablePVCRemap bool, setupLog logr.Logger) {
func createReplicationGroupReconciler(mgr manager.Manager, controllerMgr *ControllerManager, domain string, workerThreads int, expRateLimiter workqueue.TypedRateLimiter[reconcile.Request], disablePVCRemap bool, enableKubevirtPVCRemap bool, setupLog logr.Logger) {
if err := getReplicationGroupReconciler(&repController.ReplicationGroupReconciler{
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("DellCSIReplicationGroup"),
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor(constants.DellReplicationController),
Config: controllerMgr.config,
Domain: domain,
DisablePVCRemap: disablePVCRemap,
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("DellCSIReplicationGroup"),
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor(constants.DellReplicationController),
Config: controllerMgr.config,
Domain: domain,
DisablePVCRemap: disablePVCRemap,
EnableKubevirtPVCRemap: enableKubevirtPVCRemap,
}, mgr, expRateLimiter, workerThreads); err != nil {
setupLog.Error(err, "unable to create controller", constants.DellReplicationController, "DellCSIReplicationGroup")
osExit(1)
Expand Down
14 changes: 13 additions & 1 deletion cmd/replication-controller/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/workqueue"
ctrl "sigs.k8s.io/controller-runtime"
Expand All @@ -47,6 +48,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)

type mockManager struct {
Expand Down Expand Up @@ -178,6 +180,16 @@ func (m *mockManager) GetScheme() *runtime.Scheme {
return nil
}

func (m *mockManager) GetConverterRegistry() conversion.Registry {
// Implement the method as needed for your mock
return nil
}

func (m *mockManager) GetEventRecorder(_ string) events.EventRecorder {
// Implement the method as needed for your mock
return nil
}

type mockSecretController struct {
mock.Mock
logger logr.Logger
Expand Down Expand Up @@ -943,7 +955,7 @@ func TestCreateReplicationGroupReconciler(t *testing.T) {
}
}()
}
createReplicationGroupReconciler(tt.manager, tt.controllerMgr, tt.domain, tt.workerThreads, tt.expRateLimiter, false, tt.setupLog)
createReplicationGroupReconciler(tt.manager, tt.controllerMgr, tt.domain, tt.workerThreads, tt.expRateLimiter, false, false, tt.setupLog)
if tt.name == "Manager is not nil" {
if exitCode != 0 {
t.Errorf("Expected exit code 0, but got %d", exitCode)
Expand Down
2 changes: 1 addition & 1 deletion config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ spec:
args:
- --enable-leader-election
- --prefix=replication.storage.dell.com
image: quay.io/dell/container-storage-modules/dell-replication-controller:v1.13.0
image: quay.io/dell/container-storage-modules/dell-replication-controller:v1.15.0
imagePullPolicy: IfNotPresent
name: manager
env:
Expand Down
8 changes: 8 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@ rules:
- get
- list
- watch
- apiGroups:
- cdi.kubevirt.io
resources:
- datavolumes
verbs:
- get
- update
- delete
---
# Role for Driver-specific Permissions in a Namespace
kind: Role
Expand Down
3 changes: 3 additions & 0 deletions controllers/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,8 @@ var (
MigrationGroup string
// MigrationFinalizer — finalizer used by the migration sidecar for pre delete hook
MigrationFinalizer string
// PendingPVCSwap annotation on the local PV storing serialized PVC backup for crash recovery during PVC swap
PendingPVCSwap string
)

// InitLabelsAndAnnotations initializes package visible constants by using customizable domain variable
Expand Down Expand Up @@ -283,4 +285,5 @@ func InitLabelsAndAnnotations(domain string) {
ActionProcessedTime = domain + actionProcessedTime
MigrationGroup = domain + migrationGroup
MigrationFinalizer = domain + migrationFinalizer
PendingPVCSwap = domain + pendingPVCSwap
}
2 changes: 2 additions & 0 deletions controllers/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ const (
ClusterUID = "clusterUID"
// NodeReScanned will flag the current rescan status
NodeReScanned = "node-rescanned"
// pendingPVCSwap annotation on the local PV storing serialized PVC backup for crash recovery during PVC swap
pendingPVCSwap = "/pendingPVCSwap"

XCSIReplicationPodName = "X_CSI_REPLICATION_POD_NAME"
XCSIReplicationPodNamespace = "X_CSI_REPLICATION_POD_NAMESPACE"
Expand Down
2 changes: 1 addition & 1 deletion controllers/csi-replicator/monitoring.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package csireplicator

import (
"context"
"fmt"
"sync"
"time"
Expand All @@ -25,7 +26,6 @@ import (
csireplication "github.com/dell/csm-replication/pkg/csi-clients/replication"
"github.com/dell/dell-csi-extensions/replication"
"github.com/go-logr/logr"
"golang.org/x/net/context"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand Down
Loading
Loading