mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-22 06:10:22 +00:00
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>
This commit is contained in:
parent
4a34a891cf
commit
0013f7ab93
@ -46,6 +46,9 @@ var (
|
|||||||
subvolumegroup = "e2e"
|
subvolumegroup = "e2e"
|
||||||
fileSystemName = "myfs"
|
fileSystemName = "myfs"
|
||||||
fileSystemPoolName = "myfs-replicated"
|
fileSystemPoolName = "myfs-replicated"
|
||||||
|
|
||||||
|
operatorCephFSDeploymentName = "cephfs.csi.ceph.com-ctrlplugin"
|
||||||
|
operatorCephFSDaemonsetName = "cephfs.csi.ceph.com-nodeplugin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func deployCephfsPlugin() {
|
func deployCephfsPlugin() {
|
||||||
@ -175,6 +178,11 @@ var _ = Describe(cephfsType, func() {
|
|||||||
Skip("Skipping CephFS E2E")
|
Skip("Skipping CephFS E2E")
|
||||||
}
|
}
|
||||||
c = f.ClientSet
|
c = f.ClientSet
|
||||||
|
if operatorDeployment {
|
||||||
|
cephFSDeploymentName = operatorCephFSDeploymentName
|
||||||
|
cephFSDeamonSetName = operatorCephFSDaemonsetName
|
||||||
|
}
|
||||||
|
|
||||||
if deployCephFS {
|
if deployCephFS {
|
||||||
if cephCSINamespace != defaultNs {
|
if cephCSINamespace != defaultNs {
|
||||||
err := createNamespace(c, cephCSINamespace)
|
err := createNamespace(c, cephCSINamespace)
|
||||||
@ -209,11 +217,15 @@ var _ = Describe(cephfsType, func() {
|
|||||||
deployVault(f.ClientSet, deployTimeout)
|
deployVault(f.ClientSet, deployTimeout)
|
||||||
|
|
||||||
// wait for cluster name update in deployment
|
// wait for cluster name update in deployment
|
||||||
containers := []string{cephFSContainerName}
|
if operatorDeployment {
|
||||||
err = waitForContainersArgsUpdate(c, cephCSINamespace, cephFSDeploymentName,
|
err = setClusterName(defaultClusterName)
|
||||||
"clustername", defaultClusterName, containers, deployTimeout)
|
} else {
|
||||||
|
containers := []string{cephFSContainerName}
|
||||||
|
err = waitForContainersArgsUpdate(c, cephCSINamespace, cephFSDeploymentName,
|
||||||
|
"clustername", defaultClusterName, containers, deployTimeout)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, cephFSDeploymentName, err)
|
framework.Failf("timeout waiting for clustername arg update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = createSubvolumegroup(f, fileSystemName, subvolumegroup)
|
err = createSubvolumegroup(f, fileSystemName, subvolumegroup)
|
||||||
|
@ -50,6 +50,9 @@ var (
|
|||||||
|
|
||||||
// FIXME: some tests change the subvolumegroup to "e2e".
|
// FIXME: some tests change the subvolumegroup to "e2e".
|
||||||
defaultSubvolumegroup = "csi"
|
defaultSubvolumegroup = "csi"
|
||||||
|
|
||||||
|
operatorNFSDeploymentName = "nfs.csi.ceph.com-ctrlplugin"
|
||||||
|
operatorNFSDaemonsetName = "nfs.csi.ceph.com-nodeplugin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func deployNFSPlugin(f *framework.Framework) {
|
func deployNFSPlugin(f *framework.Framework) {
|
||||||
@ -242,6 +245,10 @@ var _ = Describe("nfs", func() {
|
|||||||
Skip("Skipping NFS E2E")
|
Skip("Skipping NFS E2E")
|
||||||
}
|
}
|
||||||
c = f.ClientSet
|
c = f.ClientSet
|
||||||
|
if operatorDeployment {
|
||||||
|
nfsDeploymentName = operatorNFSDeploymentName
|
||||||
|
nfsDeamonSetName = operatorNFSDaemonsetName
|
||||||
|
}
|
||||||
if deployNFS {
|
if deployNFS {
|
||||||
if cephCSINamespace != defaultNs {
|
if cephCSINamespace != defaultNs {
|
||||||
err := createNamespace(c, cephCSINamespace)
|
err := createNamespace(c, cephCSINamespace)
|
||||||
|
62
e2e/operator.go
Normal file
62
e2e/operator.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 The Ceph-CSI Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package e2e
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
OperatorConfigName = "ceph-csi-operator-config"
|
||||||
|
OperatorNamespace = "ceph-csi-operator-system"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setEnableMetadata(value bool) error{
|
||||||
|
command := []string{
|
||||||
|
"operatorconfigs.csi.ceph.io",
|
||||||
|
OperatorConfigName,
|
||||||
|
"--type=merge",
|
||||||
|
"-p",
|
||||||
|
fmt.Sprintf(`{"spec": {"driverSpecDefaults": {"enableMetadata": %t}}}`, value),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch the operator config
|
||||||
|
err := retryKubectlArgs(OperatorNamespace, kubectlPatch, deployTimeout, command...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setClusterName(value string) error {
|
||||||
|
command := []string{
|
||||||
|
"operatorconfigs.csi.ceph.io",
|
||||||
|
OperatorConfigName,
|
||||||
|
"--type=merge",
|
||||||
|
"-p",
|
||||||
|
fmt.Sprintf(`{"spec": {"driverSpecDefaults": {"clusterName": %s}}}`, value),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch the operator config
|
||||||
|
err := retryKubectlArgs(OperatorNamespace, kubectlPatch, deployTimeout, command...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
57
e2e/rbd.go
57
e2e/rbd.go
@ -108,6 +108,10 @@ var (
|
|||||||
volSnapNameKey = "csi.storage.k8s.io/volumesnapshot/name"
|
volSnapNameKey = "csi.storage.k8s.io/volumesnapshot/name"
|
||||||
volSnapNamespaceKey = "csi.storage.k8s.io/volumesnapshot/namespace"
|
volSnapNamespaceKey = "csi.storage.k8s.io/volumesnapshot/namespace"
|
||||||
volSnapContentNameKey = "csi.storage.k8s.io/volumesnapshotcontent/name"
|
volSnapContentNameKey = "csi.storage.k8s.io/volumesnapshotcontent/name"
|
||||||
|
|
||||||
|
operatorRBDDeploymentName = "rbd.csi.ceph.com-ctrlplugin"
|
||||||
|
operatorRBDDaemonsetName = "rbd.csi.ceph.com-nodeplugin"
|
||||||
|
rbdPodSelector = fmt.Sprintf("app in (ceph-csi-rbd, %s, %s, %s, %s)", rbdDeploymentName, rbdDaemonsetName, operatorRBDDeploymentName, operatorRBDDaemonsetName)
|
||||||
)
|
)
|
||||||
|
|
||||||
func deployRBDPlugin() {
|
func deployRBDPlugin() {
|
||||||
@ -167,9 +171,9 @@ func createORDeleteRbdResources(action kubectlAction) {
|
|||||||
},
|
},
|
||||||
// the node-plugin itself
|
// the node-plugin itself
|
||||||
&yamlResourceNamespaced{
|
&yamlResourceNamespaced{
|
||||||
filename: rbdDirPath + rbdNodePlugin,
|
filename: rbdDirPath + rbdNodePlugin,
|
||||||
namespace: cephCSINamespace,
|
namespace: cephCSINamespace,
|
||||||
domainLabel: nodeRegionLabel + "," + nodeZoneLabel,
|
domainLabel: nodeRegionLabel + "," + nodeZoneLabel,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,6 +276,10 @@ var _ = Describe("RBD", func() {
|
|||||||
Skip("Skipping RBD E2E")
|
Skip("Skipping RBD E2E")
|
||||||
}
|
}
|
||||||
c = f.ClientSet
|
c = f.ClientSet
|
||||||
|
if operatorDeployment {
|
||||||
|
rbdDeploymentName = operatorRBDDeploymentName
|
||||||
|
rbdDaemonsetName = operatorRBDDaemonsetName
|
||||||
|
}
|
||||||
if deployRBD {
|
if deployRBD {
|
||||||
err := addLabelsToNodes(f, map[string]string{
|
err := addLabelsToNodes(f, map[string]string{
|
||||||
nodeRegionLabel: regionValue,
|
nodeRegionLabel: regionValue,
|
||||||
@ -344,11 +352,15 @@ var _ = Describe("RBD", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// wait for cluster name update in deployment
|
// wait for cluster name update in deployment
|
||||||
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
|
if operatorDeployment {
|
||||||
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
err = setClusterName(defaultClusterName)
|
||||||
"clustername", defaultClusterName, containers, deployTimeout)
|
} else {
|
||||||
|
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
|
||||||
|
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
||||||
|
"clustername", defaultClusterName, containers, deployTimeout)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
framework.Failf("timeout waiting for clustername arg update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -2814,7 +2826,11 @@ var _ = Describe("RBD", func() {
|
|||||||
validateRBDImageCount(f, 1, defaultRBDPool)
|
validateRBDImageCount(f, 1, defaultRBDPool)
|
||||||
validateOmapCount(f, 1, rbdType, defaultRBDPool, volumesType)
|
validateOmapCount(f, 1, rbdType, defaultRBDPool, volumesType)
|
||||||
// delete rbd nodeplugin pods
|
// delete rbd nodeplugin pods
|
||||||
err = deletePodWithLabel("app=csi-rbdplugin", cephCSINamespace, false)
|
selector, err := getDaemonSetLabelSelector(f, cephCSINamespace, rbdDaemonsetName)
|
||||||
|
if err != nil {
|
||||||
|
framework.Failf("failed to get the labels: %v", err)
|
||||||
|
}
|
||||||
|
err = deletePodWithLabel(selector, cephCSINamespace, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("fail to delete pod: %v", err)
|
framework.Failf("fail to delete pod: %v", err)
|
||||||
}
|
}
|
||||||
@ -3781,8 +3797,7 @@ var _ = Describe("RBD", func() {
|
|||||||
framework.Failf("failed to create rados namespace: %v", err)
|
framework.Failf("failed to create rados namespace: %v", err)
|
||||||
}
|
}
|
||||||
// delete csi pods
|
// delete csi pods
|
||||||
err = deletePodWithLabel("app in (ceph-csi-rbd, csi-rbdplugin, csi-rbdplugin-provisioner)",
|
err = deletePodWithLabel(rbdPodSelector, cephCSINamespace, false)
|
||||||
cephCSINamespace, false)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("failed to delete pods with labels: %v", err)
|
framework.Failf("failed to delete pods with labels: %v", err)
|
||||||
}
|
}
|
||||||
@ -4600,10 +4615,14 @@ var _ = Describe("RBD", func() {
|
|||||||
|
|
||||||
// wait for cluster name update in deployment
|
// wait for cluster name update in deployment
|
||||||
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
|
containers := []string{"csi-rbdplugin", "csi-rbdplugin-controller"}
|
||||||
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
if operatorDeployment {
|
||||||
"setmetadata", "false", containers, deployTimeout)
|
err = setEnableMetadata(false)
|
||||||
|
} else {
|
||||||
|
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
||||||
|
"setmetadata", "false", containers, deployTimeout)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
framework.Failf("failed to update setmetadata arg in %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
||||||
}
|
}
|
||||||
pvcSmartClone, err := loadPVC(pvcSmartClonePath)
|
pvcSmartClone, err := loadPVC(pvcSmartClonePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -4703,11 +4722,15 @@ var _ = Describe("RBD", func() {
|
|||||||
validateRBDImageCount(f, 0, defaultRBDPool)
|
validateRBDImageCount(f, 0, defaultRBDPool)
|
||||||
validateOmapCount(f, 0, rbdType, defaultRBDPool, volumesType)
|
validateOmapCount(f, 0, rbdType, defaultRBDPool, volumesType)
|
||||||
validateOmapCount(f, 0, rbdType, defaultRBDPool, snapsType)
|
validateOmapCount(f, 0, rbdType, defaultRBDPool, snapsType)
|
||||||
// wait for cluster name update in deployment
|
if operatorDeployment {
|
||||||
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
err = setEnableMetadata(true)
|
||||||
"setmetadata", "true", containers, deployTimeout)
|
} else {
|
||||||
|
// wait for cluster name update in deployment
|
||||||
|
err = waitForContainersArgsUpdate(c, cephCSINamespace, rbdDeploymentName,
|
||||||
|
"setmetadata", "true", containers, deployTimeout)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("timeout waiting for deployment update %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
framework.Failf("failed to update setmetadata arg in %s/%s: %v", cephCSINamespace, rbdDeploymentName, err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1621,6 +1621,8 @@ const (
|
|||||||
kubectlCreate = kubectlAction("create")
|
kubectlCreate = kubectlAction("create")
|
||||||
// kubectlDelete tells retryKubectlInput() to run "delete".
|
// kubectlDelete tells retryKubectlInput() to run "delete".
|
||||||
kubectlDelete = kubectlAction("delete")
|
kubectlDelete = kubectlAction("delete")
|
||||||
|
// kubectlPatch tells retryKubectlInput() to run "patch".
|
||||||
|
kubectlPatch = kubectlAction("patch")
|
||||||
)
|
)
|
||||||
|
|
||||||
// String returns the string format of the kubectlAction, this is automatically
|
// String returns the string format of the kubectlAction, this is automatically
|
||||||
|
Loading…
Reference in New Issue
Block a user