diff --git a/e2e/cephfs.go b/e2e/cephfs.go index a293f4bc9f2..b8cf0b80d78 100644 --- a/e2e/cephfs.go +++ b/e2e/cephfs.go @@ -246,6 +246,11 @@ var _ = Describe(cephfsType, func() { logAndFail("failed to set cluster name: %v", err) } + err = cephFSDeployment.setEnableFencing(true) + if err != nil { + logAndFail("failed to enable fencing: %v", err) + } + err = createSubvolumegroup(f, fileSystemName, subvolumegroup) if err != nil { logAndFail("failed to create subvolumegroup %s: %v", subvolumegroup, err) diff --git a/e2e/operator.go b/e2e/operator.go index 2b6efa94e3a..bdb2aab9c05 100644 --- a/e2e/operator.go +++ b/e2e/operator.go @@ -21,6 +21,7 @@ import ( "fmt" clientset "k8s.io/client-go/kubernetes" + "k8s.io/kubernetes/test/e2e/framework" ) const ( @@ -58,7 +59,7 @@ func (r *OperatorDeployment) getPodSelector() string { r.deploymentName, r.daemonsetName) } -func (OperatorDeployment) setEnableMetadata(value bool) error { +func (r *OperatorDeployment) setEnableMetadata(value bool) error { command := []string{ "operatorconfigs.csi.ceph.io", OperatorConfigName, @@ -73,6 +74,40 @@ func (OperatorDeployment) setEnableMetadata(value bool) error { return err } + // restart the pods so that the new configuration is activated + framework.Logf("enableMetadata has been set to %t, restarting Ceph-CSI pods", value) + podLabels := r.getPodSelector() + err = deletePodWithLabel(podLabels, cephCSINamespace, false) + if err != nil { + return fmt.Errorf("failed to delete pods with labels (%s): %w", podLabels, err) + } + err = waitForDaemonSets(r.daemonsetName, cephCSINamespace, r.clientSet, deployTimeout) + if err != nil { + return fmt.Errorf("timeout waiting for daemonset pods: %w", err) + } + err = waitForDeploymentComplete(r.clientSet, r.deploymentName, cephCSINamespace, deployTimeout) + if err != nil { + return fmt.Errorf("timeout waiting for deployment to be in running state: %w", err) + } + + return nil +} + +func (OperatorDeployment) setEnableFencing(value bool) error { + command := []string{ + "operatorconfigs.csi.ceph.io", + OperatorConfigName, + "--type=merge", + "-p", + fmt.Sprintf(`{"spec": {"driverSpecDefaults": {"enableFencing": %t}}}`, value), + } + + // Patch the operator config + err := retryKubectlArgs(cephCSINamespace, kubectlPatch, deployTimeout, command...) + if err != nil { + return err + } + return nil } diff --git a/e2e/rbd.go b/e2e/rbd.go index 80efe0daf0e..64d1aa0b799 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -431,6 +431,11 @@ var _ = Describe("RBD", func() { logAndFail("failed to set domain labels: %v", err) } + err = rbdDeployment.setEnableFencing(true) + if err != nil { + logAndFail("failed to enable fencing: %v", err) + } + err = rbdDeployment.setClusterName(defaultClusterName) if err != nil { logAndFail("failed to set cluster name: %v", err) diff --git a/e2e/utils.go b/e2e/utils.go index 2c561dd504f..031fc44143a 100644 --- a/e2e/utils.go +++ b/e2e/utils.go @@ -111,6 +111,7 @@ type DeploymentMethod interface { getDaemonsetName() string getPodSelector() string setClusterName(clusterName string) error + setEnableFencing(enable bool) error } type RBDDeploymentMethod interface { DeploymentMethod @@ -157,6 +158,12 @@ func (d *DriverInfo) setClusterName(clusterName string) error { return nil } +func (d *DriverInfo) setEnableFencing(enable bool) error { + // No-op as fencing is enabled in the yaml files by default, disabling is not needed. + // Required implementation in OperatorDeployment. + return nil +} + // listCephFSFileSystems list CephFS filesystems in json format. func listCephFSFileSystems(f *framework.Framework) ([]cephfsFilesystem, error) { var fsList []cephfsFilesystem diff --git a/scripts/deploy-ceph-csi-operator.sh b/scripts/deploy-ceph-csi-operator.sh index b7e76086b61..fb89765d25c 100755 --- a/scripts/deploy-ceph-csi-operator.sh +++ b/scripts/deploy-ceph-csi-operator.sh @@ -72,7 +72,7 @@ function generate_operator_config() { generate_encryption_configmap cat <"${TEMP_DIR}/operatorconfig.yaml" -apiVersion: csi.ceph.io/v1alpha1 +apiVersion: csi.ceph.io/v1 kind: OperatorConfig metadata: name: ceph-csi-operator-config @@ -100,7 +100,7 @@ EOF function generate_driver() { local driver_name=$1 cat <"${TEMP_DIR}/${driver_name}.yaml" -apiVersion: csi.ceph.io/v1alpha1 +apiVersion: csi.ceph.io/v1 kind: Driver metadata: name: ${driver_name}