Files
my-rook-config/tests/integration/ceph_cosi_test.go
T
Blaine Gardner fc08e87d44 Revert "object: create cosi user for each object store"
This reverts commit a941b3c33f.

Stop creating the 'cosi' user in the CephObjectStore reconcile. This
step often fails for some amount of time during initial object store
creation, causing frequent user concern. It has also been the source of
some reported failures that would otherwise be non-breaking for certain
users.

Signed-off-by: Blaine Gardner <blaine.gardner@ibm.com>
2024-11-21 16:03:32 -07:00

147 lines
5.8 KiB
Go

package integration
import (
"context"
"testing"
"time"
"github.com/rook/rook/pkg/daemon/ceph/client"
rgw "github.com/rook/rook/pkg/operator/ceph/object"
"github.com/rook/rook/tests/framework/clients"
"github.com/rook/rook/tests/framework/installer"
"github.com/rook/rook/tests/framework/utils"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
objectStoreCOSI = "cosi-store"
cosiUser = "cosi"
bucketClassName = "cosi-bucketclass"
deletionPolicy = "Delete"
cosiBucketName = "cosi-bucket"
)
func testCOSIDriver(s *suite.Suite, helper *clients.TestClient, k8sh *utils.K8sHelper, cephinstaller *installer.CephInstaller, namespace string) {
if utils.IsPlatformOpenShift() {
s.T().Skip("ceph cosi driver tests skipped on openshift")
}
t := s.T()
t.Run("COSI Controller and CRD installation", func(t *testing.T) {
_, err := k8sh.Kubectl("create", "-k", "github.com/kubernetes-sigs/container-object-storage-interface-api")
assert.NoError(t, err, "failed to create COSI CRDs")
_, err = k8sh.Kubectl("create", "-k", "github.com/kubernetes-sigs/container-object-storage-interface-controller")
assert.NoError(t, err, "failed to create COSI controller")
})
createCephObjectStore(s.T(), helper, k8sh, cephinstaller, namespace, objectStoreCOSI, 1, false, false)
t.Run("Creating CephCOSIDriver CRD", func(t *testing.T) {
err := helper.COSIClient.CreateCOSI()
assert.NoError(t, err, "failed to create Ceph COSI Driver CRD")
})
operatorNamespace := cephinstaller.Manifests.Settings().OperatorNamespace
t.Run("Check ceph cosi driver running", func(t *testing.T) {
for i := 24; i < 24 && k8sh.CheckPodCountAndState("ceph-cosi-driver", operatorNamespace, 1, "Running") == false; i++ {
logger.Infof("ceph-cosi-driver is not running, trying again")
k8sh.CheckPodCountAndState("ceph-cosi-driver", namespace, 1, "Running")
}
assert.True(t, k8sh.CheckPodCountAndState("ceph-cosi-driver", operatorNamespace, 1, "Running"))
assert.NoError(t, k8sh.WaitForLabeledDeploymentsToBeReady("app=ceph-cosi-driver", operatorNamespace))
})
createCephObjectUser(s, helper, k8sh, namespace, objectStoreCOSI, cosiUser, true)
objectStoreUserSecretName := "rook-ceph-object-user" + "-" + objectStoreCOSI + "-" + cosiUser
t.Run("Creating BucketClass", func(t *testing.T) {
err := helper.COSIClient.CreateBucketClass(bucketClassName, objectStoreUserSecretName, deletionPolicy)
assert.NoError(t, err, "failed to create BucketClass")
})
t.Run("Creating BucketClaim", func(t *testing.T) {
err := helper.COSIClient.CreateBucketClaim(cosiBucketName, bucketClassName)
assert.NoError(t, err, "failed to create BucketClaim")
})
var cosiBucket string
t.Run("Check Bucket is ready", func(t *testing.T) {
_, err := k8sh.GetResource("bucketclaim", "-n", operatorNamespace, cosiBucketName)
assert.NoError(t, err, "failed to get BucketClaim")
cosiBucket, err = k8sh.GetResource("bucketclaim", "-n", operatorNamespace, cosiBucketName, "-o", "jsonpath={.status.bucketName}")
assert.NoError(t, err, "failed to get Bucket name")
i := 0
var bucketReady string
for i = 0; i < 4; i++ {
bucketReady, err = k8sh.GetResource("bucket", cosiBucket, "-o", "jsonpath={.status.bucketReady}")
if bucketReady == "true" && err == nil {
break
}
logger.Warningf("bucket %q is not ready, retrying... bucketReady=%q, err=%v", cosiBucket, bucketReady, err)
time.Sleep(5 * time.Second)
}
assert.NotEqual(t, 4, i)
assert.Equal(t, "true", bucketReady, "Bucket is not ready")
})
t.Run("Check Bucket is created in Backend Ceph", func(t *testing.T) {
ctx := context.TODO()
// check if bucket is created in the backend
context := k8sh.MakeContext()
clusterInfo := client.AdminTestClusterInfo(namespace)
objectStore, err := k8sh.RookClientset.CephV1().CephObjectStores(namespace).Get(ctx, objectStoreCOSI, metav1.GetOptions{})
assert.Nil(t, err)
rgwcontext, err := rgw.NewMultisiteContext(context, clusterInfo, objectStore)
assert.Nil(t, err)
var bkt rgw.ObjectBucket
i := 0
for i = 0; i < 4; i++ {
b, code, err := rgw.GetBucket(rgwcontext, cosiBucket)
if b != nil && err == nil {
bkt = *b
break
}
logger.Warningf("cannot get bucket %q, retrying... bucket: %v. code: %d, err: %v", cosiBucket, b, code, err)
logger.Infof("(%d) check bucket exists, sleeping for 5 seconds ...", i)
time.Sleep(5 * time.Second)
}
assert.NotEqual(t, 4, i)
assert.Equal(t, cosiBucket, bkt.Name)
})
t.Run("Deleting BucketClaim", func(t *testing.T) {
err := helper.COSIClient.DeleteBucketClaim(cosiBucketName, bucketClassName)
assert.NoError(t, err, "failed to delete BucketClaim")
})
t.Run("Deleting BucketClass", func(t *testing.T) {
err := helper.COSIClient.DeleteBucketClass(bucketClassName, objectStoreUserSecretName, deletionPolicy)
assert.NoError(t, err, "failed to delete BucketClass")
})
t.Run("Deleting object user for cosi", func(t *testing.T) {
err := helper.ObjectUserClient.Delete(namespace, cosiUser)
assert.NoError(t, err, "failed to delete cosi user")
})
t.Run("delete CephObjectStore", func(t *testing.T) {
deleteObjectStore(t, k8sh, namespace, objectStoreCOSI)
assertObjectStoreDeletion(t, k8sh, namespace, objectStoreCOSI)
})
t.Run("delete CephCOSIDriver CRD", func(t *testing.T) {
err := helper.COSIClient.DeleteCOSI()
assert.NoError(t, err, "failed to delete Ceph COSI Driver CRD")
})
t.Run("delete COSI Controller", func(t *testing.T) {
_, err := k8sh.Kubectl("delete", "-k", "github.com/kubernetes-sigs/container-object-storage-interface-api")
assert.NoError(t, err, "failed to create COSI CRDs")
_, err = k8sh.Kubectl("delete", "-k", "github.com/kubernetes-sigs/container-object-storage-interface-controller")
assert.NoError(t, err, "failed to create COSI controller")
})
}