From 878ef8ff00dafba6ff1f44fe31fc58412a539f75 Mon Sep 17 00:00:00 2001 From: Keith Schincke Date: Mon, 1 Apr 2019 13:01:30 -0500 Subject: [PATCH] Issue 2660: Deleting CephObjectStoreUser does not delete secret When deleting a CephObjectStoreUser the deleteUser function attempts to delete the stored secret using the wrong name. This patch updates deleteUser to use the same fmt.Sprintf call used in the createUser function. Updated CI to delete the correct CRD and check the secret is deleted. Signed-off-by: Keith Schincke --- pkg/operator/ceph/object/user/controller.go | 4 ++-- tests/framework/clients/object_user.go | 11 ++++++++--- tests/integration/base_object_test.go | 20 +++++++++++++++++--- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pkg/operator/ceph/object/user/controller.go b/pkg/operator/ceph/object/user/controller.go index 87f99e651..ce69d97c6 100644 --- a/pkg/operator/ceph/object/user/controller.go +++ b/pkg/operator/ceph/object/user/controller.go @@ -191,9 +191,9 @@ func deleteUser(context *clusterd.Context, u *cephv1.CephObjectStoreUser) error } } - err = context.Clientset.CoreV1().Secrets(u.Namespace).Delete("rook-ceph-object-user-"+u.Name, &metav1.DeleteOptions{}) + err = context.Clientset.CoreV1().Secrets(u.Namespace).Delete(fmt.Sprintf("rook-ceph-object-user-%s-%s", u.Spec.Store, u.Name), &metav1.DeleteOptions{}) if err != nil { - logger.Warningf("failed to delete user %s secret. %+v", u.Name, err) + logger.Warningf("failed to delete user %s secret. %+v", fmt.Sprintf("rook-ceph-object-user-%s-%s", u.Spec.Store, u.Name), err) } logger.Infof("user %s deleted successfully", u.Name) diff --git a/tests/framework/clients/object_user.go b/tests/framework/clients/object_user.go index 547f046f2..b17c64938 100644 --- a/tests/framework/clients/object_user.go +++ b/tests/framework/clients/object_user.go @@ -22,6 +22,7 @@ import ( rgw "github.com/rook/rook/pkg/operator/ceph/object" "github.com/rook/rook/tests/framework/installer" "github.com/rook/rook/tests/framework/utils" + "strings" ) // ObjectUserOperation is wrapper for k8s rook object user operations @@ -48,8 +49,12 @@ func (o *ObjectUserOperation) GetUser(namespace string, store string, userid str // UserSecretExists Function to check that user secret was created func (o *ObjectUserOperation) UserSecretExists(namespace string, store string, userid string) bool { - _, err := o.k8sh.GetResource("-n", namespace, "secrets", "-l", "rook_object_store="+store, "-l", "user="+userid) - if err == nil { + message, err := o.k8sh.GetResource("-n", namespace, "secrets", "-l", "rook_object_store="+store, "-l", "user="+userid) + //GetResource(blah) returns success if blah is or is not found. + //err = success and found_sec not "No resources found." means it was found + //err = success and found_sec contains "No resources found." means it was not found + //err != success is an other error + if err == nil && !strings.Contains(message, "No resources found.") { logger.Infof("Object User Secret Exists") return true } @@ -70,7 +75,7 @@ func (o *ObjectUserOperation) Create(namespace string, userid string, displayNam func (o *ObjectUserOperation) Delete(namespace string, userid string) error { logger.Infof("Deleting the object store user via CRD") - if err := o.k8sh.DeleteResource("-n", namespace, "ObjectStoreUser", userid); err != nil { + if err := o.k8sh.DeleteResource("-n", namespace, "CephObjectStoreUser", userid); err != nil { return err } return nil diff --git a/tests/integration/base_object_test.go b/tests/integration/base_object_test.go index 51b19d7c9..918c47567 100644 --- a/tests/integration/base_object_test.go +++ b/tests/integration/base_object_test.go @@ -56,13 +56,20 @@ func runObjectE2ETest(helper *clients.TestClient, k8sh *utils.K8sHelper, s suite logger.Infof("Step 1 : Create Object Store User") cosuErr := helper.ObjectUserClient.Create(namespace, userid, userdisplayname, storeName) require.Nil(s.T(), cosuErr) - logger.Infof("Waiting 5 seconds to ensure user was created") - time.Sleep(5 * time.Second) - require.True(s.T(), helper.ObjectUserClient.UserSecretExists(namespace, userid, storeName), "make sure user secret was created") + logger.Infof("Waiting 10 seconds to ensure user was created") + time.Sleep(10 * time.Second) userInfo, gosuErr := helper.ObjectUserClient.GetUser(namespace, storeName, userid) require.Nil(s.T(), gosuErr) require.Equal(s.T(), userid, userInfo.UserID) require.Equal(s.T(), userdisplayname, *userInfo.DisplayName) + logger.Infof("Checking to see if the user secret has been created") + i := 0 + for i = 0; i < 4 && helper.ObjectUserClient.UserSecretExists(namespace, storeName, userid) == false; i++ { + logger.Infof("(%d) secret check sleeping for 5 seconds ...", i) + time.Sleep(5 * time.Second) + } + assert.True(s.T(), helper.ObjectUserClient.UserSecretExists(namespace, storeName, userid)) + logger.Infof("Object store user created successfully") /* TODO: We need bucket management tests. @@ -123,6 +130,13 @@ func runObjectE2ETest(helper *clients.TestClient, k8sh *utils.K8sHelper, s suite dosuErr := helper.ObjectUserClient.Delete(namespace, userid) require.Nil(s.T(), dosuErr) logger.Infof("Object store user deleted successfully") + logger.Infof("Checking to see if the user secret has been deleted") + i = 0 + for i = 0; i < 4 && helper.ObjectUserClient.UserSecretExists(namespace, storeName, userid) == true; i++ { + logger.Infof("(%d) secret check sleeping for 5 seconds ...", i) + time.Sleep(5 * time.Second) + } + assert.False(s.T(), helper.ObjectUserClient.UserSecretExists(namespace, storeName, userid)) logger.Infof("Check that MGRs are not in a crashloop") assert.True(s.T(), k8sh.CheckPodCountAndState("rook-ceph-mgr", namespace, 1, "Running"))