Skip to content

Commit a17041e

Browse files
e2e: handle ceph-csi-operator deployment changes
This commits adds e2e/operator.go containing utility methods specific to the operator. Signed-off-by: Praveen M <m.praveen@ibm.com>
1 parent 51b1af2 commit a17041e

File tree

5 files changed

+150
-39
lines changed

5 files changed

+150
-39
lines changed

e2e/cephfs.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ var (
4646
subvolumegroup = "e2e"
4747
fileSystemName = "myfs"
4848
fileSystemPoolName = "myfs-replicated"
49+
50+
operatorCephFSDeploymentName = "cephfs.csi.ceph.com-ctrlplugin"
51+
operatorCephFSDaemonsetName = "cephfs.csi.ceph.com-nodeplugin"
4952
)
5053

5154
func deployCephfsPlugin() {
@@ -175,13 +178,19 @@ var _ = Describe(cephfsType, func() {
175178
Skip("Skipping CephFS E2E")
176179
}
177180
c = f.ClientSet
178-
if deployCephFS {
179-
if cephCSINamespace != defaultNs {
180-
err := createNamespace(c, cephCSINamespace)
181-
if err != nil {
182-
framework.Failf("failed to create namespace %s: %v", cephCSINamespace, err)
183-
}
181+
if operatorDeployment {
182+
cephFSDeploymentName = operatorCephFSDeploymentName
183+
cephFSDeamonSetName = operatorCephFSDaemonsetName
184+
}
185+
186+
if cephCSINamespace != defaultNs {
187+
err := createNamespace(c, cephCSINamespace)
188+
if err != nil {
189+
framework.Failf("failed to create namespace %s: %v", cephCSINamespace, err)
184190
}
191+
}
192+
193+
if deployCephFS {
185194
deployCephfsPlugin()
186195
}
187196
err := createConfigMap(cephFSDirPath, f.ClientSet, f)
@@ -209,11 +218,15 @@ var _ = Describe(cephfsType, func() {
209218
deployVault(f.ClientSet, deployTimeout)
210219

211220
// wait for cluster name update in deployment
212-
containers := []string{cephFSContainerName}
213-
err = waitForContainersArgsUpdate(c, cephCSINamespace, cephFSDeploymentName,
214-
"clustername", defaultClusterName, containers, deployTimeout)
221+
if operatorDeployment {
222+
err = setClusterName(defaultClusterName)
223+
} else {
224+
containers := []string{cephFSContainerName}
225+
err = waitForContainersArgsUpdate(c, cephCSINamespace, cephFSDeploymentName,
226+
"clustername", defaultClusterName, containers, deployTimeout)
227+
}
215228
if err != nil {
216-
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, cephFSDeploymentName, err)
229+
framework.Failf("timeout waiting for clustername arg update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
217230
}
218231

219232
err = createSubvolumegroup(f, fileSystemName, subvolumegroup)

e2e/nfs.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ var (
5050

5151
// FIXME: some tests change the subvolumegroup to "e2e".
5252
defaultSubvolumegroup = "csi"
53+
54+
operatorNFSDeploymentName = "nfs.csi.ceph.com-ctrlplugin"
55+
operatorNFSDaemonsetName = "nfs.csi.ceph.com-nodeplugin"
5356
)
5457

5558
func deployNFSPlugin(f *framework.Framework) {
@@ -242,13 +245,19 @@ var _ = Describe("nfs", func() {
242245
Skip("Skipping NFS E2E")
243246
}
244247
c = f.ClientSet
245-
if deployNFS {
246-
if cephCSINamespace != defaultNs {
247-
err := createNamespace(c, cephCSINamespace)
248-
if err != nil {
249-
framework.Failf("failed to create namespace %s: %v", cephCSINamespace, err)
250-
}
248+
if operatorDeployment {
249+
nfsDeploymentName = operatorNFSDeploymentName
250+
nfsDeamonSetName = operatorNFSDaemonsetName
251+
}
252+
253+
if cephCSINamespace != defaultNs {
254+
err := createNamespace(c, cephCSINamespace)
255+
if err != nil {
256+
framework.Failf("failed to create namespace %s: %v", cephCSINamespace, err)
251257
}
258+
}
259+
260+
if deployNFS {
252261
deployNFSPlugin(f)
253262
}
254263

e2e/operator.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
Copyright 2024 The Ceph-CSI Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package e2e
18+
19+
import (
20+
"fmt"
21+
)
22+
23+
const (
24+
OperatorConfigName = "ceph-csi-operator-config"
25+
OperatorNamespace = "ceph-csi-operator-system"
26+
)
27+
28+
func setEnableMetadata(value bool) error{
29+
command := []string{
30+
"operatorconfigs.csi.ceph.io",
31+
OperatorConfigName,
32+
"--type=merge",
33+
"-p",
34+
fmt.Sprintf(`{"spec": {"driverSpecDefaults": {"enableMetadata": %t}}}`, value),
35+
}
36+
37+
// Patch the operator config
38+
err := retryKubectlArgs(OperatorNamespace, kubectlPatch, deployTimeout, command...)
39+
if err != nil {
40+
return err
41+
}
42+
43+
return nil
44+
}
45+
46+
func setClusterName(value string) error {
47+
command := []string{
48+
"operatorconfigs.csi.ceph.io",
49+
OperatorConfigName,
50+
"--type=merge",
51+
"-p",
52+
fmt.Sprintf(`{"spec": {"driverSpecDefaults": {"clusterName": %s}}}`, value),
53+
}
54+
55+
// Patch the operator config
56+
err := retryKubectlArgs(OperatorNamespace, kubectlPatch, deployTimeout, command...)
57+
if err != nil {
58+
return err
59+
}
60+
61+
return nil
62+
}

e2e/rbd.go

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ var (
108108
volSnapNameKey = "csi.storage.k8s.io/volumesnapshot/name"
109109
volSnapNamespaceKey = "csi.storage.k8s.io/volumesnapshot/namespace"
110110
volSnapContentNameKey = "csi.storage.k8s.io/volumesnapshotcontent/name"
111+
112+
operatorRBDDeploymentName = "rbd.csi.ceph.com-ctrlplugin"
113+
operatorRBDDaemonsetName = "rbd.csi.ceph.com-nodeplugin"
114+
rbdPodSelector = fmt.Sprintf("app in (ceph-csi-rbd, %s, %s, %s, %s)", rbdDeploymentName, rbdDaemonsetName, operatorRBDDeploymentName, operatorRBDDaemonsetName)
111115
)
112116

113117
func deployRBDPlugin() {
@@ -167,9 +171,9 @@ func createORDeleteRbdResources(action kubectlAction) {
167171
},
168172
// the node-plugin itself
169173
&yamlResourceNamespaced{
170-
filename: rbdDirPath + rbdNodePlugin,
171-
namespace: cephCSINamespace,
172-
domainLabel: nodeRegionLabel + "," + nodeZoneLabel,
174+
filename: rbdDirPath + rbdNodePlugin,
175+
namespace: cephCSINamespace,
176+
domainLabel: nodeRegionLabel + "," + nodeZoneLabel,
173177
},
174178
}
175179

@@ -287,6 +291,18 @@ var _ = Describe("RBD", func() {
287291
Skip("Skipping RBD E2E")
288292
}
289293
c = f.ClientSet
294+
if operatorDeployment {
295+
rbdDeploymentName = operatorRBDDeploymentName
296+
rbdDaemonsetName = operatorRBDDaemonsetName
297+
}
298+
299+
if cephCSINamespace != defaultNs {
300+
err := createNamespace(c, cephCSINamespace)
301+
if err != nil {
302+
framework.Failf("failed to create namespace: %v", err)
303+
}
304+
}
305+
290306
if deployRBD {
291307
err := addLabelsToNodes(f, map[string]string{
292308
nodeRegionLabel: regionValue,
@@ -297,12 +313,6 @@ var _ = Describe("RBD", func() {
297313
if err != nil {
298314
framework.Failf("failed to add node labels: %v", err)
299315
}
300-
if cephCSINamespace != defaultNs {
301-
err = createNamespace(c, cephCSINamespace)
302-
if err != nil {
303-
framework.Failf("failed to create namespace: %v", err)
304-
}
305-
}
306316
deployRBDPlugin()
307317
}
308318
err := createConfigMap(rbdDirPath, f.ClientSet, f)
@@ -359,11 +369,15 @@ var _ = Describe("RBD", func() {
359369
}
360370

361371
// wait for cluster name update in deployment
362-
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
363-
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
364-
"clustername", defaultClusterName, containers, deployTimeout)
372+
if operatorDeployment {
373+
err = setClusterName(defaultClusterName)
374+
} else {
375+
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
376+
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
377+
"clustername", defaultClusterName, containers, deployTimeout)
378+
}
365379
if err != nil {
366-
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
380+
framework.Failf("timeout waiting for clustername arg update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
367381
}
368382
})
369383

@@ -2829,7 +2843,11 @@ var _ = Describe("RBD", func() {
28292843
validateRBDImageCount(f, 1, defaultRBDPool)
28302844
validateOmapCount(f, 1, rbdType, defaultRBDPool, volumesType)
28312845
// delete rbd nodeplugin pods
2832-
err = deletePodWithLabel("app=csi-rbdplugin", cephCSINamespace, false)
2846+
selector, err := getDaemonSetLabelSelector(f, cephCSINamespace, rbdDaemonsetName)
2847+
if err != nil {
2848+
framework.Failf("failed to get the labels: %v", err)
2849+
}
2850+
err = deletePodWithLabel(selector, cephCSINamespace, false)
28332851
if err != nil {
28342852
framework.Failf("fail to delete pod: %v", err)
28352853
}
@@ -3909,8 +3927,7 @@ var _ = Describe("RBD", func() {
39093927
framework.Failf("failed to create rados namespace: %v", err)
39103928
}
39113929
// delete csi pods
3912-
err = deletePodWithLabel("app in (ceph-csi-rbd, csi-rbdplugin, csi-rbdplugin-provisioner)",
3913-
cephCSINamespace, false)
3930+
err = deletePodWithLabel(rbdPodSelector, cephCSINamespace, false)
39143931
if err != nil {
39153932
framework.Failf("failed to delete pods with labels: %v", err)
39163933
}
@@ -4729,10 +4746,14 @@ var _ = Describe("RBD", func() {
47294746

47304747
// wait for cluster name update in deployment
47314748
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
4732-
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
4733-
"setmetadata", "false", containers, deployTimeout)
4749+
if operatorDeployment {
4750+
err = setEnableMetadata(false)
4751+
} else {
4752+
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
4753+
"setmetadata", "false", containers, deployTimeout)
4754+
}
47344755
if err != nil {
4735-
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
4756+
framework.Failf("failed to update setmetadata arg in %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
47364757
}
47374758
pvcSmartClone, err := loadPVC(pvcSmartClonePath)
47384759
if err != nil {
@@ -4832,11 +4853,15 @@ var _ = Describe("RBD", func() {
48324853
validateRBDImageCount(f, 0, defaultRBDPool)
48334854
validateOmapCount(f, 0, rbdType, defaultRBDPool, volumesType)
48344855
validateOmapCount(f, 0, rbdType, defaultRBDPool, snapsType)
4835-
// wait for cluster name update in deployment
4836-
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
4837-
"setmetadata", "true", containers, deployTimeout)
4856+
if operatorDeployment {
4857+
err = setEnableMetadata(true)
4858+
} else {
4859+
// wait for cluster name update in deployment
4860+
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
4861+
"setmetadata", "true", containers, deployTimeout)
4862+
}
48384863
if err != nil {
4839-
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
4864+
framework.Failf("failed to update setmetadata arg in %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
48404865
}
48414866
})
48424867

e2e/utils.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,6 +1634,8 @@ const (
16341634
kubectlCreate = kubectlAction("create")
16351635
// kubectlDelete tells retryKubectlInput() to run "delete".
16361636
kubectlDelete = kubectlAction("delete")
1637+
// kubectlPatch tells retryKubectlInput() to run "patch".
1638+
kubectlPatch = kubectlAction("patch")
16371639
)
16381640

16391641
// String returns the string format of the kubectlAction, this is automatically

0 commit comments

Comments
 (0)