From c50c308abea7068545bfdf50ab52341b45371bb7 Mon Sep 17 00:00:00 2001 From: parth-gr Date: Wed, 3 May 2023 19:21:33 +0530 Subject: [PATCH] external: fix rgw multisite config check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the check validate_rgw_multisite was always checking for realm updated it to check the specific config fixed validate_rgw_endpoint pool validation added missing realm zonegroup and zone while interacting with user resources Co-authored-by: Sergio Pérez Fernández Signed-off-by: parth-gr --- .../create-external-cluster-resources.py | 90 ++++++++++++------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/deploy/examples/create-external-cluster-resources.py b/deploy/examples/create-external-cluster-resources.py index bc59cd20d..4ff04ce91 100644 --- a/deploy/examples/create-external-cluster-resources.py +++ b/deploy/examples/create-external-cluster-resources.py @@ -1152,6 +1152,12 @@ class RadosJSON: "info", "--uid", self.EXTERNAL_RGW_ADMIN_OPS_USER_NAME, + "--rgw-realm", + self._arg_parser.rgw_realm_name, + "--rgw-zonegroup", + self._arg_parser.rgw_zonegroup_name, + "--rgw-zone", + self._arg_parser.rgw_zone_name, ] try: output = subprocess.check_output(cmd, stderr=subprocess.PIPE) @@ -1190,6 +1196,12 @@ class RadosJSON: self.EXTERNAL_RGW_ADMIN_OPS_USER_NAME, "--caps", "info=read", + "--rgw-realm", + self._arg_parser.rgw_realm_name, + "--rgw-zonegroup", + self._arg_parser.rgw_zonegroup_name, + "--rgw-zone", + self._arg_parser.rgw_zone_name, ] try: output = subprocess.check_output(cmd, stderr=subprocess.PIPE) @@ -1313,6 +1325,7 @@ class RadosJSON: # check if the rgw endpoint is reachable rgw_endpoint = self._arg_parser.rgw_endpoint + self._invalid_endpoint(rgw_endpoint) cert = None if not self._arg_parser.rgw_skip_tls and self.validate_rgw_endpoint_tls_cert(): cert = self._arg_parser.rgw_tls_cert_path @@ -1336,28 +1349,29 @@ class RadosJSON: # check if the rgw endpoint exist # only validate if rgw_pool_prefix is passed else it will take default value and we don't create these default pools if self._arg_parser.rgw_pool_prefix != "default": - rgw_pool_to_validate = [ + rgw_pools_to_validate = [ f"{self._arg_parser.rgw_pool_prefix}.rgw.meta", ".rgw.root", f"{self._arg_parser.rgw_pool_prefix}.rgw.control", f"{self._arg_parser.rgw_pool_prefix}.rgw.log", ] - if not self.cluster.pool_exists(rgw_pool_to_validate): - sys.stderr.write( - f"The provided pool, '{rgw_pool_to_validate}', does not exist" - ) - return "-1" + for _rgw_pool_to_validate in rgw_pools_to_validate: + if not self.cluster.pool_exists(_rgw_pool_to_validate): + sys.stderr.write( + f"The provided pool, '{_rgw_pool_to_validate}', does not exist" + ) + return "-1" return "" - def validate_rgw_multisite(self, rgw_multisite_config, rgw_multisite_config_flag): + def validate_rgw_multisite(self, rgw_multisite_config_name, rgw_multisite_config): if rgw_multisite_config != "": cmd = [ "radosgw-admin", - "realm", - "get", - rgw_multisite_config_flag, rgw_multisite_config, + "get", + "--rgw-" + rgw_multisite_config, + rgw_multisite_config_name, ] try: _ = subprocess.check_output(cmd, stderr=subprocess.PIPE) @@ -1440,27 +1454,41 @@ class RadosJSON: if self._arg_parser.dry_run: self.create_rgw_admin_ops_user() else: - err = self.validate_rgw_multisite( - self._arg_parser.rgw_realm_name, "--rgw-realm" - ) - err = self.validate_rgw_multisite( - self._arg_parser.rgw_zonegroup_name, "--rgw-zonegroup" - ) - err = self.validate_rgw_multisite( - self._arg_parser.rgw_zone_name, "--rgw-zone" - ) - ( - self.out_map["RGW_ADMIN_OPS_USER_ACCESS_KEY"], - self.out_map["RGW_ADMIN_OPS_USER_SECRET_KEY"], - info_cap_supported, - err, - ) = self.create_rgw_admin_ops_user() - err = self.validate_rgw_endpoint(info_cap_supported) - if self._arg_parser.rgw_tls_cert_path: - self.out_map["RGW_TLS_CERT"] = self.validate_rgw_endpoint_tls_cert() - # if there is no error, set the RGW_ENDPOINT - if err != "-1": - self.out_map["RGW_ENDPOINT"] = self._arg_parser.rgw_endpoint + if ( + self._arg_parser.rgw_realm_name == "" + and self._arg_parser.rgw_zonegroup_name == "" + and self._arg_parser.rgw_zone_name == "" + ) or ( + self._arg_parser.rgw_realm_name != "" + and self._arg_parser.rgw_zonegroup_name != "" + and self._arg_parser.rgw_zone_name != "" + ): + err = self.validate_rgw_multisite( + self._arg_parser.rgw_realm_name, "realm" + ) + err = self.validate_rgw_multisite( + self._arg_parser.rgw_zonegroup_name, "zonegroup" + ) + err = self.validate_rgw_multisite( + self._arg_parser.rgw_zone_name, "zone" + ) + ( + self.out_map["RGW_ADMIN_OPS_USER_ACCESS_KEY"], + self.out_map["RGW_ADMIN_OPS_USER_SECRET_KEY"], + info_cap_supported, + err, + ) = self.create_rgw_admin_ops_user() + err = self.validate_rgw_endpoint(info_cap_supported) + if self._arg_parser.rgw_tls_cert_path: + self.out_map[ + "RGW_TLS_CERT" + ] = self.validate_rgw_endpoint_tls_cert() + # if there is no error, set the RGW_ENDPOINT + if err != "-1": + self.out_map["RGW_ENDPOINT"] = self._arg_parser.rgw_endpoint + else: + err = "Please provide all the RGW multisite parameters or none of them" + sys.stderr.write(err) def gen_shell_out(self): self._gen_output_map()