From 9b20b475cfa3cf08bed69478f569774bd754dafa Mon Sep 17 00:00:00 2001 From: parth-gr Date: Mon, 7 Feb 2022 18:27:32 +0530 Subject: [PATCH] csi: modify upgrade flag in external cluster The upgrade function doesn't seem to be that smart for now so it can update the new auth caps listed with the existing one, it only compares the value of the current cap with the MIN_USER_CAP_PERMISSIONS, Modified the upgrade flag functionality so we can use this while upgrading the cluster clients Closes: https://github.com/rook/rook/issues/9589 Signed-off-by: parth-gr --- .github/workflows/canary-integration-test.yml | 21 + .../create-external-cluster-resources.py | 358 ++++++++---------- 2 files changed, 185 insertions(+), 194 deletions(-) diff --git a/.github/workflows/canary-integration-test.yml b/.github/workflows/canary-integration-test.yml index cc90a25a9..c9792dc0d 100644 --- a/.github/workflows/canary-integration-test.yml +++ b/.github/workflows/canary-integration-test.yml @@ -105,6 +105,27 @@ jobs: kubectl -n rook-ceph exec $toolbox -- rbd namespace create replicapool/radosNamespace kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --cephfs-filesystem-name myfs --rbd-data-pool-name replicapool --rados-namespace radosNamespace --cluster-name rookStorage --restricted-auth-permission true + - name: test the upgrade flag + run: | + toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}') + # print existing client auth + kubectl -n rook-ceph exec $toolbox -- ceph auth ls + # update the existing non-restricted client auth with the new ones + kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --upgrade + # print ugraded client auth + kubectl -n rook-ceph exec $toolbox -- ceph auth ls + + - name: test the upgrade flag for restricted auth user + run: | + toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}') + # print existing client auth + kubectl -n rook-ceph exec $toolbox -- ceph auth get client.csi-rbd-node-rookStorage-replicapool-radosNamespace + # restricted auth user need to provide --rbd-data-pool-name, --rados-namespace, + # --cluster-name and --run-as-user flag while upgrading + kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --rados-namespace radosNamespace --cluster-name rookStorage --run-as-user client.csi-rbd-node-rookStorage-replicapool-radosNamespace + # print ugraded client auth + kubectl -n rook-ceph exec $toolbox -- ceph auth get client.csi-rbd-node-rookStorage-replicapool-radosNamespace + - name: check-ownerreferences run: tests/scripts/github-action-helper.sh check_ownerreferences diff --git a/deploy/examples/create-external-cluster-resources.py b/deploy/examples/create-external-cluster-resources.py index 218aeba79..af2986598 100644 --- a/deploy/examples/create-external-cluster-resources.py +++ b/deploy/examples/create-external-cluster-resources.py @@ -84,7 +84,6 @@ class DummyRados(object): ceph_status_str = json_file.read() self.cmd_names['fs ls'] = '''{"format": "json", "prefix": "fs ls"}''' self.cmd_names['quorum_status'] = '''{"format": "json", "prefix": "quorum_status"}''' - self.cmd_names['caps_change_default_pool_prefix'] = '''{"caps": ["mon", "allow r, allow command quorum_status, allow command version", "mgr", "allow command config", "osd", "allow rwx pool=default.rgw.meta, allow r pool=.rgw.root, allow rw pool=default.rgw.control, allow rx pool=default.rgw.log, allow x pool=default.rgw.buckets.index"], "entity": "client.healthchecker", "format": "json", "prefix": "auth caps"}''' self.cmd_names['mgr services'] = '''{"format": "json", "prefix": "mgr services"}''' # all the commands and their output self.cmd_output_map[self.cmd_names['fs ls'] @@ -109,7 +108,8 @@ class DummyRados(object): self.cmd_output_map['''{"entity": "client.csi-cephfs-provisioner", "format": "json", "prefix": "auth get"}'''] = '''[]''' self.cmd_output_map['''{"entity": "client.csi-cephfs-provisioner-openshift-storage", "format": "json", "prefix": "auth get"}'''] = '''[]''' self.cmd_output_map['''{"entity": "client.csi-cephfs-provisioner-openshift-storage-myfs", "format": "json", "prefix": "auth get"}'''] = '''[]''' - self.cmd_output_map[self.cmd_names['caps_change_default_pool_prefix']] = '''[{}]''' + self.cmd_output_map['''{"entity": "client.csi-cephfs-provisioner", "format": "json", "prefix": "auth get"}'''] = '''[{"entity":"client.csi-cephfs-provisioner","key":"AQDFkbNeft5bFRAATndLNUSEKruozxiZi3lrdA==","caps":{"mon":"allow r", "mgr":"allow rw", "osd":"allow rw tag cephfs metadata=*"}}]''' + self.cmd_output_map['''{"caps": ["mon", "allow r, allow command 'osd blocklist'", "mgr", "allow rw", "osd", "allow rw tag cephfs metadata=*"], "entity": "client.csi-cephfs-provisioner", "format": "json", "prefix": "auth caps"}'''] = '''[{"entity":"client.csi-cephfs-provisioner","key":"AQDFkbNeft5bFRAATndLNUSEKruozxiZi3lrdA==","caps":{"mon":"allow r, allow command 'osd blocklist'", "mgr":"allow rw", "osd":"allow rw tag cephfs metadata=*"}}]''' self.cmd_output_map['{"format": "json", "prefix": "status"}'] = ceph_status_str def shutdown(self): @@ -213,7 +213,7 @@ class RadosJSON: upgrade_group = argP.add_argument_group('upgrade') upgrade_group.add_argument("--upgrade", action='store_true', default=False, - help="Upgrades the 'user' with all the permissions needed for the new cluster version") + help="Upgrades the 'user' with all the permissions needed for the new cluster version and older permission will still be applied. PS: An existing non-restricted user cannot be downgraded to a restricted user. Admin need to create a new user for this.") if args_to_parse: assert type(args_to_parse) == list, \ @@ -279,13 +279,6 @@ class RadosJSON: if not self._arg_parser.upgrade and not self._arg_parser.rbd_data_pool_name: raise ExecutionFailureException( "Either '--upgrade' or '--rbd-data-pool-name ' should be specified") - if self._arg_parser.upgrade and self._arg_parser.rbd_data_pool_name: - raise ExecutionFailureException( - "Both '--upgrade' and '--rbd-data-pool-name ' should not be specified, choose only one") - # a user name must be provided while using '--upgrade' option - if not self._arg_parser.run_as_user and self._arg_parser.upgrade: - raise ExecutionFailureException( - "Please provide an existing user-name through '--run-as-user' (or '-u') flag while upgrading") def _invalid_endpoint(self, endpoint_str): try: @@ -523,12 +516,11 @@ class RadosJSON: return "" return str(json_out[0]['key']) - def create_cephCSIKeyring_cephFSProvisioner(self): - ''' - command: ceph auth get-or-create client.csi-cephfs-provisioner mon 'allow r' mgr 'allow rw' osd 'allow rw tag cephfs metadata=*' - ''' + def get_cephfs_provisioner_caps_and_entity(self): entity = "client.csi-cephfs-provisioner" - cmd_json = {} + caps = {"mon": "allow r, allow command 'osd blocklist'", + "mgr": "allow rw", + "osd": "allow rw tag cephfs metadata=*"} if self._arg_parser.restricted_auth_permission: cluster_name = self._arg_parser.cluster_name if cluster_name == "": @@ -536,28 +528,98 @@ class RadosJSON: "cluster_name not found, please set the '--cluster-name' flag") cephfs_filesystem = self._arg_parser.cephfs_filesystem_name if cephfs_filesystem == "": - entity = "client.csi-cephfs-provisioner-{}".format(cluster_name) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs metadata=*"], - "format": "json"} + entity = "{}-{}".format(entity,cluster_name) else: - entity = "client.csi-cephfs-provisioner-{}-{}".format(cluster_name,cephfs_filesystem) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs metadata={}".format(cephfs_filesystem)], - "format": "json"} - else: - cmd_json = {"prefix": "auth get-or-create", + entity = "{}-{}-{}".format(entity,cluster_name,cephfs_filesystem) + caps["osd"] = "allow rw tag cephfs metadata={}".format(cephfs_filesystem) + + return caps,entity + + def get_cephfs_node_caps_and_entity(self): + entity = "client.csi-cephfs-node" + caps = {"mon": "allow r, allow command 'osd blocklist'", + "mgr": "allow rw", + "osd": "allow rw tag cephfs *=*", + "mds": "allow rw"} + if self._arg_parser.restricted_auth_permission: + cluster_name = self._arg_parser.cluster_name + if cluster_name == "": + raise ExecutionFailureException( + "cluster_name not found, please set the '--cluster-name' flag") + cephfs_filesystem = self._arg_parser.cephfs_filesystem_name + if cephfs_filesystem == "": + entity = "{}-{}".format(entity,cluster_name) + else: + entity = "{}-{}-{}".format(entity,cluster_name,cephfs_filesystem) + caps["osd"] = "allow rw tag cephfs data={}".format(cephfs_filesystem) + + return caps,entity + + def get_rbd_provisioner_caps_and_entity(self): + entity = "client.csi-rbd-provisioner" + caps = {"mon": "profile rbd, allow command 'osd blocklist'", + "mgr": "allow rw", + "osd": "profile rbd"} + if self._arg_parser.restricted_auth_permission: + rbd_pool_name = self._arg_parser.rbd_data_pool_name + cluster_name = self._arg_parser.cluster_name + rados_namespace = self._arg_parser.rados_namespace + if rbd_pool_name == "" or cluster_name == "" or rados_namespace == "": + raise ExecutionFailureException( + "mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' and --rados-namespace flags") + entity = "{}-{}-{}-{}".format(entity,cluster_name,rbd_pool_name,rados_namespace) + caps["osd"] = "profile rbd pool={}".format(rbd_pool_name) + + return caps,entity + + def get_rbd_node_caps_and_entity(self): + entity = "client.csi-rbd-node" + caps = {"mon": "profile rbd, allow command 'osd blocklist'", + "osd": "profile rbd"} + if self._arg_parser.restricted_auth_permission: + rbd_pool_name = self._arg_parser.rbd_data_pool_name + cluster_name = self._arg_parser.cluster_name + rados_namespace = self._arg_parser.rados_namespace + if rbd_pool_name == "" or cluster_name == "" or rados_namespace == "": + raise ExecutionFailureException( + "mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' and --rados-namespace flags") + entity = "{}-{}-{}-{}".format(entity,cluster_name,rbd_pool_name,rados_namespace) + caps["osd"] = "profile rbd pool={}".format(rbd_pool_name) + + return caps,entity + + def get_caps_and_entity(self, user_name): + if "client.csi-cephfs-provisioner" in user_name: + if "client.csi-cephfs-provisioner" != user_name: + self._arg_parser.restricted_auth_permission = True + return self.get_cephfs_provisioner_caps_and_entity() + elif "client.csi-cephfs-node" in user_name: + if "client.csi-cephfs-node" != user_name: + self._arg_parser.restricted_auth_permission = True + return self.get_cephfs_node_caps_and_entity() + elif "client.csi-rbd-provisioner" in user_name: + if "client.csi-rbd-provisioner" != user_name: + self._arg_parser.restricted_auth_permission = True + return self.get_rbd_provisioner_caps_and_entity() + elif "client.csi-rbd-node" in user_name: + if "client.csi-rbd-node" != user_name: + self._arg_parser.restricted_auth_permission = True + return self.get_rbd_node_caps_and_entity() + + raise ExecutionFailureException( + "no user found with user_name: {} ,".format(user_name) + + "get_caps_and_entity command failed.\n") + + def create_cephCSIKeyring_cephFSProvisioner(self): + ''' + command: ceph auth get-or-create client.csi-cephfs-provisioner mon 'allow r' mgr 'allow rw' osd 'allow rw tag cephfs metadata=*' + ''' + caps, entity = self.get_caps_and_entity("client.csi-cephfs-provisioner") + cmd_json = {"prefix": "auth get-or-create", "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs metadata=*"], + "caps": [cap for cap_list in list(caps.items()) for cap in cap_list], "format": "json"} + if self._arg_parser.dry_run: return self.dry_run("ceph " + cmd_json['prefix'] + " " + cmd_json['entity'] + " " + " ".join(cmd_json['caps'])) # check if user already exist @@ -574,41 +636,12 @@ class RadosJSON: return str(json_out[0]['key']) def create_cephCSIKeyring_cephFSNode(self): - entity = "client.csi-cephfs-node" - cmd_json = {} - if self._arg_parser.restricted_auth_permission: - cluster_name = self._arg_parser.cluster_name - if cluster_name == "": - raise ExecutionFailureException( - "cluster_name not found, please set the '--cluster-name' flag") - cephfs_filesystem = self._arg_parser.cephfs_filesystem_name - if cephfs_filesystem == "": - entity = "client.csi-cephfs-node-{}".format(cluster_name) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs *=*", - "mds", "allow rw"], - "format": "json"} - else: - entity = "client.csi-cephfs-node-{}-{}".format(cluster_name,cephfs_filesystem) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs data={}".format( - cephfs_filesystem), - "mds", "allow rw"], - "format": "json"} - else: - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "allow r, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "allow rw tag cephfs *=*", - "mds", "allow rw"], - "format": "json"} + caps, entity = self.get_caps_and_entity("client.csi-cephfs-node") + cmd_json = {"prefix": "auth get-or-create", + "entity": entity, + "caps": [cap for cap_list in list(caps.items()) for cap in cap_list], + "format": "json"} + if self._arg_parser.dry_run: return self.dry_run("ceph " + cmd_json['prefix'] + " " + cmd_json['entity'] + " " + " ".join(cmd_json['caps'])) # check if user already exist @@ -625,29 +658,12 @@ class RadosJSON: return str(json_out[0]['key']) def create_cephCSIKeyring_RBDProvisioner(self): - entity = "client.csi-rbd-provisioner" - cmd_json = {} - if self._arg_parser.restricted_auth_permission: - rbd_pool_name = self._arg_parser.rbd_data_pool_name - cluster_name = self._arg_parser.cluster_name - rados_namespace = self._arg_parser.rados_namespace - if rbd_pool_name == "" or cluster_name == "" or rados_namespace == "": - raise ExecutionFailureException( - "mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' and --rados-namespace flags") - entity = "client.csi-rbd-provisioner-{}-{}-{}".format(cluster_name,rbd_pool_name,rados_namespace) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "profile rbd, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "profile rbd pool={}".format(rbd_pool_name)], - "format": "json"} - else: - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "profile rbd, allow command 'osd blocklist'", - "mgr", "allow rw", - "osd", "profile rbd"], - "format": "json"} + caps, entity = self.get_caps_and_entity("client.csi-rbd-provisioner") + cmd_json = {"prefix": "auth get-or-create", + "entity": entity, + "caps": [cap for cap_list in list(caps.items()) for cap in cap_list], + "format": "json"} + if self._arg_parser.dry_run: return self.dry_run("ceph " + cmd_json['prefix'] + " " + cmd_json['entity'] + " " + " ".join(cmd_json['caps'])) # check if user already exist @@ -662,6 +678,28 @@ class RadosJSON: "'auth get-or-create client.csi-rbd-provisioner' command failed.\n" + "Error: {}".format(err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST)) return str(json_out[0]['key']) + + def create_cephCSIKeyring_RBDNode(self): + caps, entity = self.get_caps_and_entity("client.csi-rbd-node") + cmd_json = {"prefix": "auth get-or-create", + "entity": entity, + "caps": [cap for cap_list in list(caps.items()) for cap in cap_list], + "format": "json"} + + if self._arg_parser.dry_run: + return self.dry_run("ceph " + cmd_json['prefix'] + " " + cmd_json['entity'] + " " + " ".join(cmd_json['caps'])) + # check if user already exist + user_key = self.check_user_exist(entity) + if user_key != "": + return user_key + + ret_val, json_out, err_msg = self._common_cmd_json_gen(cmd_json) + # if there is an unsuccessful attempt, + if ret_val != 0 or len(json_out) == 0: + raise ExecutionFailureException( + "'auth get-or-create client.csi-rbd-node' command failed\n" + + "Error: {}".format(err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST)) + return str(json_out[0]['key']) def get_cephfs_data_pool_details(self): cmd_json = {"prefix": "fs ls", "format": "json"} @@ -752,43 +790,6 @@ class RadosJSON: "Using the data-pool", self._arg_parser.cephfs_data_pool_name)) - def create_cephCSIKeyring_RBDNode(self): - entity = "client.csi-rbd-node" - cmd_json = {} - if self._arg_parser.restricted_auth_permission: - rbd_pool_name = self._arg_parser.rbd_data_pool_name - cluster_name = self._arg_parser.cluster_name - rados_namespace = self._arg_parser.rados_namespace - if rbd_pool_name == "" or cluster_name == "" or rados_namespace == "": - raise ExecutionFailureException( - "mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' and --rados-namespace flags") - entity = "client.csi-rbd-node-{}-{}-{}".format(cluster_name,rbd_pool_name,rados_namespace) - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "profile rbd, allow command 'osd blocklist'", - "osd", "profile rbd pool={}".format(rbd_pool_name)], - "format": "json"} - else: - cmd_json = {"prefix": "auth get-or-create", - "entity": entity, - "caps": ["mon", "profile rbd, allow command 'osd blocklist'", - "osd", "profile rbd"], - "format": "json"} - if self._arg_parser.dry_run: - return self.dry_run("ceph " + cmd_json['prefix'] + " " + cmd_json['entity'] + " " + " ".join(cmd_json['caps'])) - # check if user already exist - user_key = self.check_user_exist(entity) - if user_key != "": - return user_key - - ret_val, json_out, err_msg = self._common_cmd_json_gen(cmd_json) - # if there is an unsuccessful attempt, - if ret_val != 0 or len(json_out) == 0: - raise ExecutionFailureException( - "'auth get-or-create client.csi-rbd-node' command failed\n" + - "Error: {}".format(err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST)) - return str(json_out[0]['key']) - def create_checkerKey(self): cmd_json = {"prefix": "auth get-or-create", "entity": self.run_as_user, @@ -1139,66 +1140,57 @@ class RadosJSON: return json.dumps(json_out)+LINESEP - def upgrade_user_permissions(self): + def upgrade_users_permissions(self): + users = ["client.csi-cephfs-node","client.csi-cephfs-provisioner","client.csi-rbd-node","client.csi-rbd-provisioner"] + if self.run_as_user != "" and self.run_as_user not in users: + users.append(self.run_as_user) + for user in users: + self.upgrade_user_permissions(user) + + def upgrade_user_permissions(self,user): # check whether the given user exists or not cmd_json = {"prefix": "auth get", "entity": "{}".format( - self.run_as_user), "format": "json"} + user), "format": "json"} ret_val, json_out, err_msg = self._common_cmd_json_gen(cmd_json) if ret_val != 0 or len(json_out) == 0: - raise ExecutionFailureException("'auth get {}' command failed.\n".format(self.run_as_user) + - "Error: {}".format(err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST)) - j_first = json_out[0] - existing_caps = j_first['caps'] - osd_cap = "osd" - cap_keys = ["mon", "mgr", "osd"] + print("user {} not found for upgrading.".format(user)) + return + existing_caps = json_out[0]['caps'] + new_cap, _ = self.get_caps_and_entity(user) + cap_keys = ["mon", "mgr", "osd", "mds"] + caps = [] for eachCap in cap_keys: - min_cap_values = self.MIN_USER_CAP_PERMISSIONS.get(eachCap, '') cur_cap_values = existing_caps.get(eachCap, '') - # detect rgw-pool-prefix - if eachCap == osd_cap: - # if directly provided through '--rgw-pool-prefix' argument, use it - if self._arg_parser.rgw_pool_prefix: - min_cap_values = min_cap_values.format( - self._arg_parser.rgw_pool_prefix) - # or else try to detect one from the existing/current osd cap values - else: - rc = re.compile(r' pool=([^.]+)\.rgw\.[^ ]*') - # 'findall()' method will give a list of prefixes - # and 'set' will eliminate any duplicates - cur_rgw_pool_prefix_list = list( - set(rc.findall(cur_cap_values))) - if len(cur_rgw_pool_prefix_list) != 1: - raise ExecutionFailureException( - "Unable to determine 'rgw-pool-prefx'. Please provide one with '--rgw-pool-prefix' flag") - min_cap_values = min_cap_values.format( - cur_rgw_pool_prefix_list[0]) + new_cap_values = new_cap.get(eachCap, '') cur_cap_perm_list = [x.strip() for x in cur_cap_values.split(',') if x.strip()] - min_cap_perm_list = [x.strip() - for x in min_cap_values.split(',') if x.strip()] - min_cap_perm_list.extend(cur_cap_perm_list) + new_cap_perm_list = [x.strip() + for x in new_cap_values.split(',') if x.strip()] + # append new_cap_list to cur_cap_list to maintain the order of caps + cur_cap_perm_list.extend(new_cap_perm_list) # eliminate duplicates without using 'set' # set re-orders items in the list and we have to keep the order - new_cap_perm_list = [] - [new_cap_perm_list.append( - x) for x in min_cap_perm_list if x not in new_cap_perm_list] - existing_caps[eachCap] = ", ".join(new_cap_perm_list) + new_cap_list = [] + [new_cap_list.append( + x) for x in cur_cap_perm_list if x not in new_cap_list] + existing_caps[eachCap] = ", ".join(new_cap_list) + if existing_caps[eachCap]: + caps.append(eachCap) + caps.append(existing_caps[eachCap]) cmd_json = {"prefix": "auth caps", - "entity": self.run_as_user, - "caps": ["mon", existing_caps["mon"], - "mgr", existing_caps["mgr"], - "osd", existing_caps["osd"]], + "entity": user, + "caps": caps, "format": "json"} ret_val, json_out, err_msg = self._common_cmd_json_gen(cmd_json) if ret_val != 0: - raise ExecutionFailureException("'auth caps {}' command failed.\n".format(self.run_as_user) + + raise ExecutionFailureException("'auth caps {}' command failed.\n".format(user) + "Error: {}".format(err_msg)) - print("Updated user, {}, successfully.".format(self.run_as_user)) + print("Updated user, {}, successfully.".format(user)) def main(self): generated_output = '' if self._arg_parser.upgrade: - self.upgrade_user_permissions() + self.upgrade_users_permissions() elif self._arg_parser.format == 'json': generated_output = self.gen_json_out() elif self._arg_parser.format == 'bash': @@ -1379,35 +1371,13 @@ class TestRadosJSON(unittest.TestCase): self.fail("An Exception was expected to be thrown") except ExecutionFailureException as err: print("Successfully thrown error: {}".format(err)) - - def add_non_default_pool_prefix_cmd(self, non_default_pool_prefix): - json_cmd = json.loads( - self.rjObj.cluster.cmd_names['caps_change_default_pool_prefix']) - cur_osd_caps = json_cmd['caps'][json_cmd['caps'].index('osd') + 1] - new_osd_caps = cur_osd_caps.replace( - 'default.', '{}.'.format(non_default_pool_prefix)) - all_osd_caps = "{}, {}".format(new_osd_caps, cur_osd_caps) - caps_list = [x.strip() for x in all_osd_caps.split(',') if x.strip()] - new_caps_list = [] - [new_caps_list.append(x) for x in caps_list if x not in new_caps_list] - all_osd_caps = ", ".join(new_caps_list) - json_cmd['caps'][json_cmd['caps'].index('osd') + 1] = all_osd_caps - self.rjObj.cluster.cmd_names['caps_change_non_default_pool_prefix'] = json.dumps( - json_cmd) - self.rjObj.cluster.cmd_output_map[ - self.rjObj.cluster.cmd_names['caps_change_non_default_pool_prefix']] = '[{}]' - + def test_upgrade_user_permissions(self): self.rjObj = RadosJSON( - ['--upgrade', '--run-as-user=client.healthchecker']) + ['--upgrade', '--run-as-user=client.csi-cephfs-provisioner', '--format=json']) # for testing, we are using 'DummyRados' object self.rjObj.cluster = DummyRados.Rados() self.rjObj.main() - self.rjObj = RadosJSON( - ['--upgrade', '--run-as-user=client.healthchecker', '--rgw-pool-prefix=nonDefault']) - self.rjObj.cluster = DummyRados.Rados() - self.add_non_default_pool_prefix_cmd('nonDefault') - self.rjObj.main() def test_monitoring_endpoint_validation(self): self.rjObj = RadosJSON(['--rbd-data-pool-name=abc', '--format=json'])