external: use f-strings for formatting
Replace the old formatting method with the f-string and fix few pylint errors Signed-off-by: Sheetal Pamecha <spamecha@redhat.com>
This commit is contained in:
1 parent
eac254b3a2
commit
6dbbc9d71c
2 files changed
+136
-229
No files matched your search
@@ -62,32 +62,24 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj.main()
|
||||
self.fail("Function should have thrown an Exception")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Exception thrown successfully: {}".format(err))
|
||||
print(f"Exception thrown successfully: {err}")
|
||||
|
||||
def test_method_create_cephCSIKeyring_cephFSProvisioner(self):
|
||||
csiKeyring = self.rjObj.create_cephCSIKeyring_user(
|
||||
"client.csi-cephfs-provisioner"
|
||||
)
|
||||
print(
|
||||
"cephCSIKeyring without restricting it to a metadata pool. {}".format(
|
||||
csiKeyring
|
||||
)
|
||||
)
|
||||
print(f"cephCSIKeyring without restricting it to a metadata pool. {csiKeyring}")
|
||||
self.rjObj._arg_parser.restricted_auth_permission = True
|
||||
self.rjObj._arg_parser.cluster_name = "openshift-storage"
|
||||
csiKeyring = self.rjObj.create_cephCSIKeyring_user(
|
||||
"client.csi-cephfs-provisioner"
|
||||
)
|
||||
print("cephCSIKeyring for a specific cluster. {}".format(csiKeyring))
|
||||
print(f"cephCSIKeyring for a specific cluster. {csiKeyring}")
|
||||
self.rjObj._arg_parser.cephfs_filesystem_name = "myfs"
|
||||
csiKeyring = self.rjObj.create_cephCSIKeyring_user(
|
||||
"client.csi-cephfs-provisioner"
|
||||
)
|
||||
print(
|
||||
"cephCSIKeyring for a specific metadata pool and cluster. {}".format(
|
||||
csiKeyring
|
||||
)
|
||||
)
|
||||
print(f"cephCSIKeyring for a specific metadata pool and cluster. {csiKeyring}")
|
||||
|
||||
def test_non_zero_return_and_error(self):
|
||||
self.rjObj.cluster.return_val = 1
|
||||
@@ -96,7 +88,7 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj.create_checkerKey()
|
||||
self.fail("Failed to raise an exception, 'ext.ExecutionFailureException'")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error.\nError: {}".format(err))
|
||||
print(f"Successfully thrown error.\nError: {err}")
|
||||
|
||||
def test_multi_filesystem_scenario(self):
|
||||
cmd_key = self.rjObj.cluster.cmd_names["fs ls"]
|
||||
@@ -113,30 +105,28 @@ class TestRadosJSON(unittest.TestCase):
|
||||
print("As we are returning silently, no error thrown as expected")
|
||||
except ext.ExecutionFailureException as err:
|
||||
self.fail(
|
||||
"Supposed to get returned silently, but instead error thrown: {}".format(
|
||||
err
|
||||
)
|
||||
f"Supposed to get returned silently, but instead error thrown: {err}"
|
||||
)
|
||||
# pass an existing filesystem name
|
||||
try:
|
||||
self.rjObj._arg_parser.cephfs_filesystem_name = second_fs_details["name"]
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
except ext.ExecutionFailureException as err:
|
||||
self.fail("Should not have thrown error: {}".format(err))
|
||||
self.fail(f"Should not have thrown error: {err}")
|
||||
# pass a non-existing filesystem name
|
||||
try:
|
||||
self.rjObj._arg_parser.cephfs_filesystem_name += "-non-existing-fs-name"
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
# empty file-system array
|
||||
try:
|
||||
self.rjObj.cluster.cmd_output_map[cmd_key] = json.dumps([])
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
|
||||
def test_multi_data_pool_scenario(self):
|
||||
cmd_key = self.rjObj.cluster.cmd_names["fs ls"]
|
||||
@@ -145,7 +135,7 @@ class TestRadosJSON(unittest.TestCase):
|
||||
first_fs_details = cmd_json_out[0]
|
||||
new_data_pool_name = "myfs-data1"
|
||||
first_fs_details["data_pools"].append(new_data_pool_name)
|
||||
print("Modified JSON Cmd Out: {}".format(cmd_json_out))
|
||||
print(f"Modified JSON Cmd Out: {cmd_json_out}")
|
||||
self.rjObj._arg_parser.cephfs_data_pool_name = new_data_pool_name
|
||||
self.rjObj.cluster.cmd_output_map[cmd_key] = json.dumps(cmd_json_out)
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
@@ -156,7 +146,7 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
# empty data-pool scenario
|
||||
first_fs_details["data_pools"] = []
|
||||
self.rjObj.cluster.cmd_output_map[cmd_key] = json.dumps(cmd_json_out)
|
||||
@@ -164,7 +154,7 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj.get_cephfs_data_pool_details()
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
|
||||
def test_valid_rgw_endpoint(self):
|
||||
self.rjObj._invalid_endpoint("10.10.212.133:8000")
|
||||
@@ -173,42 +163,38 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj._invalid_endpoint("10.10.212.133:238000")
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
# out of range IP
|
||||
try:
|
||||
self.rjObj._invalid_endpoint("10.1033.212.133:8000")
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
# malformatted IP
|
||||
try:
|
||||
self.rjObj._invalid_endpoint("10.103..212.133:8000")
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
try:
|
||||
self.rjObj._invalid_endpoint("10.103.212.133::8000")
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
try:
|
||||
self.rjObj._invalid_endpoint("10.10.103.212.133:8000")
|
||||
self.fail("An Exception was expected to be thrown")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
|
||||
def test_convert_fqdn_rgw_endpoint_to_ip(self):
|
||||
try:
|
||||
rgw_endpoint_ip = self.rjObj.convert_fqdn_rgw_endpoint_to_ip(
|
||||
"www.redhat.com:80"
|
||||
)
|
||||
print(
|
||||
"Successfully Converted www.redhat.com to it's IP {}".format(
|
||||
rgw_endpoint_ip
|
||||
)
|
||||
)
|
||||
print(f"Successfully Converted www.redhat.com to it's IP {rgw_endpoint_ip}")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Successfully thrown error: {}".format(err))
|
||||
print(f"Successfully thrown error: {err}")
|
||||
|
||||
def test_upgrade_user_permissions(self):
|
||||
self.rjObj = ext.RadosJSON(
|
||||
@@ -250,16 +236,10 @@ class TestRadosJSON(unittest.TestCase):
|
||||
mon_ips, mon_port = self.rjObj.get_active_and_standby_mgrs()
|
||||
mon_ip = mon_ips.split(",")[0]
|
||||
if check_ip_val and check_ip_val != mon_ip:
|
||||
self.fail(
|
||||
"Expected IP: {}, Returned IP: {}".format(check_ip_val, mon_ip)
|
||||
)
|
||||
self.fail(f"Expected IP: {check_ip_val}, Returned IP: {mon_ip}")
|
||||
if check_port_val and check_port_val != mon_port:
|
||||
self.fail(
|
||||
"Expected Port: '{}', Returned Port: '{}'".format(
|
||||
check_port_val, mon_port
|
||||
)
|
||||
)
|
||||
print("MonIP: {}, MonPort: {}".format(mon_ip, mon_port))
|
||||
self.fail(f"Expected Port: {check_port_val}, Returned Port: {mon_port}")
|
||||
print(f"MonIP: {mon_ip}, MonPort: {mon_port}")
|
||||
|
||||
invalid_ip_ports = [
|
||||
("10.22.31.131.43", "5334"),
|
||||
@@ -279,7 +259,7 @@ class TestRadosJSON(unittest.TestCase):
|
||||
self.rjObj._arg_parser.monitoring_endpoint_port = new_mon_port
|
||||
try:
|
||||
mon_ip, mon_port = self.rjObj.get_active_and_standby_mgrs()
|
||||
print("[Wrong] MonIP: {}, MonPort: {}".format(mon_ip, mon_port))
|
||||
print(f"[Wrong] MonIP: {mon_ip}, MonPort: {mon_port}")
|
||||
self.fail("An exception was expected")
|
||||
except ext.ExecutionFailureException as err:
|
||||
print("Exception thrown successfully: {}".format(err))
|
||||
print(f"Exception thrown successfully: {err}")
|
||||
@@ -38,13 +38,13 @@ ModuleNotFoundError = ImportError
|
||||
try:
|
||||
import rados
|
||||
except ModuleNotFoundError as noModErr:
|
||||
print("Error: %s\nExiting the script..." % noModErr)
|
||||
print(f"Error: {noModErr}\nExiting the script...")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
import rbd
|
||||
except ModuleNotFoundError as noModErr:
|
||||
print("Error: %s\nExiting the script..." % noModErr)
|
||||
print(f"Error: {noModErr}\nExiting the script...")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
@@ -190,11 +190,7 @@ class DummyRados(object):
|
||||
json_cmd = json.loads(cmd)
|
||||
json_cmd_str = json.dumps(json_cmd, sort_keys=True)
|
||||
cmd_output = self.cmd_output_map[json_cmd_str]
|
||||
return (
|
||||
self.return_val,
|
||||
cmd_output,
|
||||
"{}".format(self.err_message).encode("utf-8"),
|
||||
)
|
||||
return self.return_val, cmd_output, str(self.err_message.encode("utf-8"))
|
||||
|
||||
def _convert_hostname_to_ip(self, host_name):
|
||||
ip_reg_x = re.compile(r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")
|
||||
@@ -205,9 +201,7 @@ class DummyRados(object):
|
||||
|
||||
host_ip = self.dummy_host_ip_map.get(host_name, "")
|
||||
if not host_ip:
|
||||
host_ip = "172.9.{}.{}".format(
|
||||
random.randint(0, 254), random.randint(0, 254)
|
||||
)
|
||||
host_ip = f"172.9.{random.randint(0, 254)}.{random.randint(0, 254)}"
|
||||
self.dummy_host_ip_map[host_name] = host_ip
|
||||
del random
|
||||
return host_ip
|
||||
@@ -236,7 +230,7 @@ class S3Auth(AuthBase):
|
||||
signature = self.get_signature(r)
|
||||
if py3k:
|
||||
signature = signature.decode("utf-8")
|
||||
r.headers["Authorization"] = "AWS %s:%s" % (self.access_key, signature)
|
||||
r.headers["Authorization"] = f"AWS {self.access_key}:{signature}"
|
||||
return r
|
||||
|
||||
def get_signature(self, r):
|
||||
@@ -279,20 +273,20 @@ class S3Auth(AuthBase):
|
||||
if "x-amz-date" in interesting_headers:
|
||||
interesting_headers["date"] = ""
|
||||
|
||||
buf = "%s\n" % method
|
||||
buf = f"{method}\n"
|
||||
for key in sorted(interesting_headers.keys()):
|
||||
val = interesting_headers[key]
|
||||
if key.startswith("x-amz-"):
|
||||
buf += "%s:%s\n" % (key, val)
|
||||
buf += f"{key}:{val}\n"
|
||||
else:
|
||||
buf += "%s\n" % val
|
||||
buf += f"{val}\n"
|
||||
|
||||
# append the bucket if it exists
|
||||
if bucket != "":
|
||||
buf += "/%s" % bucket
|
||||
buf += f"/{bucket}"
|
||||
|
||||
# add the objectkey. even if it doesn't exist, add the slash
|
||||
buf += "/%s" % objectkey
|
||||
buf += f"/{objectkey}"
|
||||
|
||||
return buf
|
||||
|
||||
@@ -478,11 +472,8 @@ class RadosJSON:
|
||||
ret_val, json_out, err_msg = self._common_cmd_json_gen(cmd_json)
|
||||
if ret_val != 0 or len(json_out) == 0:
|
||||
raise ExecutionFailureException(
|
||||
"{}".format(cmd_json["prefix"])
|
||||
+ " command failed.\n"
|
||||
+ "Error: {}".format(
|
||||
err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST
|
||||
)
|
||||
f"{cmd_json['prefix']} command failed.\n"
|
||||
f"Error: {err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST}"
|
||||
)
|
||||
metadata_pool_exist, pool_exist = False, False
|
||||
|
||||
@@ -499,15 +490,12 @@ class RadosJSON:
|
||||
|
||||
if not metadata_pool_exist:
|
||||
raise ExecutionFailureException(
|
||||
"Provided rbd_ec_metadata_pool name, {}, does not exist".format(
|
||||
rbd_metadata_ec_pool_name
|
||||
)
|
||||
"Provided rbd_ec_metadata_pool name,"
|
||||
f" {rbd_metadata_ec_pool_name}, does not exist"
|
||||
)
|
||||
if not pool_exist:
|
||||
raise ExecutionFailureException(
|
||||
"Provided rbd_data_pool name, {}, does not exist".format(
|
||||
rbd_pool_name
|
||||
)
|
||||
f"Provided rbd_data_pool name, {rbd_pool_name}, does not exist"
|
||||
)
|
||||
return rbd_metadata_ec_pool_name
|
||||
|
||||
@@ -532,28 +520,24 @@ class RadosJSON:
|
||||
ipv4, port = endpoint_str.split(":")
|
||||
except ValueError:
|
||||
raise ExecutionFailureException(
|
||||
"Not a proper endpoint: {}, <IPv4>:<PORT>, format is expected".format(
|
||||
endpoint_str
|
||||
)
|
||||
f"Not a proper endpoint: {endpoint_str}, <IPv4>:<PORT>, format is expected"
|
||||
)
|
||||
ipParts = ipv4.split(".")
|
||||
if len(ipParts) != 4:
|
||||
raise ExecutionFailureException("Not a valid IP address: {}".format(ipv4))
|
||||
raise ExecutionFailureException(f"Not a valid IP address: {ipv4}")
|
||||
for eachPart in ipParts:
|
||||
if not eachPart.isdigit():
|
||||
raise ExecutionFailureException(
|
||||
"IP address parts should be numbers: {}".format(ipv4)
|
||||
f"IP address parts should be numbers: {ipv4}"
|
||||
)
|
||||
intPart = int(eachPart)
|
||||
if intPart < 0 or intPart > 254:
|
||||
raise ExecutionFailureException(
|
||||
"Out of range IP addresses: {}".format(ipv4)
|
||||
)
|
||||
raise ExecutionFailureException(f"Out of range IP addresses: {ipv4}")
|
||||
if not port.isdigit():
|
||||
raise ExecutionFailureException("Port not valid: {}".format(port))
|
||||
raise ExecutionFailureException(f"Port not valid: {port}")
|
||||
intPort = int(port)
|
||||
if intPort < 1 or intPort > 2**16 - 1:
|
||||
raise ExecutionFailureException("Out of range port number: {}".format(port))
|
||||
raise ExecutionFailureException(f"Out of range port number: {port}")
|
||||
return False
|
||||
|
||||
def endpoint_dial(self, endpoint_str, timeout=3, cert=None):
|
||||
@@ -565,7 +549,7 @@ class RadosJSON:
|
||||
response_error = None
|
||||
for prefix in protocols:
|
||||
try:
|
||||
ep = "{}://{}".format(prefix, endpoint_str)
|
||||
ep = f"{prefix}://{endpoint_str}"
|
||||
verify = None
|
||||
# If verify is set to a path to a directory,
|
||||
# the directory must have been processed using the c_rehash utility supplied with OpenSSL.
|
||||
@@ -583,9 +567,7 @@ class RadosJSON:
|
||||
response_error = err
|
||||
continue
|
||||
raise ExecutionFailureException(
|
||||
"unable to connect to endpoint: {}, failed error: {}".format(
|
||||
endpoint_str, response_error
|
||||
)
|
||||
f"unable to connect to endpoint: {endpoint_str}, failed error: {response_error}"
|
||||
)
|
||||
|
||||
def __init__(self, arg_list=None):
|
||||
@@ -630,11 +612,10 @@ class RadosJSON:
|
||||
cmd = json.dumps(cmd_json, sort_keys=True)
|
||||
ret_val, cmd_out, err_msg = self.cluster.mon_command(cmd, b"")
|
||||
if self._arg_parser.verbose:
|
||||
print("Command Input: {}".format(cmd))
|
||||
print(f"Command Input: {cmd}")
|
||||
print(
|
||||
"Return Val: {}\nCommand Output: {}\nError Message: {}\n----------\n".format(
|
||||
ret_val, cmd_out, err_msg
|
||||
)
|
||||
f"Return Val: {ret_val}\nCommand Output: {cmd_out}\n"
|
||||
f"Error Message: {err_msg}\n----------\n"
|
||||
)
|
||||
json_out = {}
|
||||
# if there is no error (i.e; ret_val is ZERO) and 'cmd_out' is not empty
|
||||
@@ -652,9 +633,7 @@ class RadosJSON:
|
||||
if ret_val != 0 or len(json_out) == 0:
|
||||
raise ExecutionFailureException(
|
||||
"'quorum_status' command failed.\n"
|
||||
+ "Error: {}".format(
|
||||
err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST
|
||||
)
|
||||
f"Error: {err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST}"
|
||||
)
|
||||
q_leader_name = json_out["quorum_leader_name"]
|
||||
q_leader_details = {}
|
||||
@@ -675,15 +654,15 @@ class RadosJSON:
|
||||
"Only 'v2' address type is enabled, user should also enable 'v1' type as well"
|
||||
)
|
||||
ip_port = str(q_leader_details["public_addr"].split("/")[0])
|
||||
return "{}={}".format(str(q_leader_name), ip_port)
|
||||
return f"{str(q_leader_name)}={ip_port}"
|
||||
|
||||
def _join_host_port(self, endpoint, port):
|
||||
port = "{}".format(port)
|
||||
port = str(port)
|
||||
# regex to check the given endpoint is enclosed in square brackets
|
||||
ipv6_regex = re.compile(r"^\[[^]]*\]$")
|
||||
# endpoint has ':' in it and if not (already) enclosed in square brackets
|
||||
if endpoint.count(":") and not ipv6_regex.match(endpoint):
|
||||
endpoint = "[{}]".format(endpoint)
|
||||
endpoint = f"[{endpoint}]"
|
||||
if not port:
|
||||
return endpoint
|
||||
return ":".join([endpoint, port])
|
||||
@@ -714,16 +693,14 @@ class RadosJSON:
|
||||
if ret_val != 0 or len(json_out) == 0:
|
||||
raise ExecutionFailureException(
|
||||
"'mgr services' command failed.\n"
|
||||
+ "Error: {}".format(
|
||||
err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST
|
||||
)
|
||||
f"Error: {err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST}"
|
||||
)
|
||||
monitoring_endpoint = (
|
||||
json_out.get("mgrmap", {}).get("services", {}).get("prometheus", "")
|
||||
)
|
||||
if not monitoring_endpoint:
|
||||
raise ExecutionFailureException(
|
||||
"'prometheus' service not found, is the exporter enabled?'.\n"
|
||||
"'prometheus' service not found, is the exporter enabled?.\n"
|
||||
)
|
||||
# now check the stand-by mgr-s
|
||||
standby_arr = json_out.get("mgrmap", {}).get("standbys", [])
|
||||
@@ -734,11 +711,11 @@ class RadosJSON:
|
||||
parsed_endpoint = urlparse(monitoring_endpoint)
|
||||
except ValueError:
|
||||
raise ExecutionFailureException(
|
||||
"invalid endpoint: {}".format(monitoring_endpoint)
|
||||
f"invalid endpoint: {monitoring_endpoint}"
|
||||
)
|
||||
monitoring_endpoint_ip_list = parsed_endpoint.hostname
|
||||
if not monitoring_endpoint_port:
|
||||
monitoring_endpoint_port = "{}".format(parsed_endpoint.port)
|
||||
monitoring_endpoint_port = str(parsed_endpoint.port)
|
||||
|
||||
# if monitoring endpoint port is not set, put a default mon port
|
||||
if not monitoring_endpoint_port:
|
||||
@@ -767,10 +744,8 @@ class RadosJSON:
|
||||
mgr_ips.append(self._convert_hostname_to_ip(each_standby_mgr))
|
||||
except:
|
||||
raise ExecutionFailureException(
|
||||
"Conversion of host: {} to IP failed. "
|
||||
"Please enter the IP addresses of all the ceph-mgrs with the '--monitoring-endpoint' flag".format(
|
||||
failed_ip
|
||||
)
|
||||
f"Conversion of host: {failed_ip} to IP failed. "
|
||||
"Please enter the IP addresses of all the ceph-mgrs with the '--monitoring-endpoint' flag"
|
||||
)
|
||||
monitoring_endpoint = self._join_host_port(
|
||||
monitoring_endpoint_ip, monitoring_endpoint_port
|
||||
@@ -784,7 +759,7 @@ class RadosJSON:
|
||||
return all_mgr_ips_str, monitoring_endpoint_port
|
||||
|
||||
def check_user_exist(self, user):
|
||||
cmd_json = {"prefix": "auth get", "entity": "{}".format(user), "format": "json"}
|
||||
cmd_json = {"prefix": "auth get", "entity": f"{user}", "format": "json"}
|
||||
ret_val, json_out, _ = self._common_cmd_json_gen(cmd_json)
|
||||
if ret_val != 0 or len(json_out) == 0:
|
||||
return ""
|
||||
@@ -805,12 +780,10 @@ class RadosJSON:
|
||||
)
|
||||
cephfs_filesystem = self._arg_parser.cephfs_filesystem_name
|
||||
if cephfs_filesystem == "":
|
||||
entity = "{}-{}".format(entity, cluster_name)
|
||||
entity = f"{entity}-{cluster_name}"
|
||||
else:
|
||||
entity = "{}-{}-{}".format(entity, cluster_name, cephfs_filesystem)
|
||||
caps["osd"] = "allow rw tag cephfs metadata={}".format(
|
||||
cephfs_filesystem
|
||||
)
|
||||
entity = f"{entity}-{cluster_name}-{cephfs_filesystem}"
|
||||
caps["osd"] = f"allow rw tag cephfs metadata={cephfs_filesystem}"
|
||||
|
||||
return caps, entity
|
||||
|
||||
@@ -830,10 +803,10 @@ class RadosJSON:
|
||||
)
|
||||
cephfs_filesystem = self._arg_parser.cephfs_filesystem_name
|
||||
if cephfs_filesystem == "":
|
||||
entity = "{}-{}".format(entity, cluster_name)
|
||||
entity = f"{entity}-{cluster_name}"
|
||||
else:
|
||||
entity = "{}-{}-{}".format(entity, cluster_name, cephfs_filesystem)
|
||||
caps["osd"] = "allow rw tag cephfs *={}".format(cephfs_filesystem)
|
||||
entity = f"{entity}-{cluster_name}-{cephfs_filesystem}"
|
||||
caps["osd"] = f"allow rw tag cephfs *={cephfs_filesystem}"
|
||||
|
||||
return caps, entity
|
||||
|
||||
@@ -851,8 +824,8 @@ class RadosJSON:
|
||||
raise ExecutionFailureException(
|
||||
"mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' flags"
|
||||
)
|
||||
entity = "{}-{}-{}".format(entity, cluster_name, rbd_pool_name)
|
||||
caps["osd"] = "profile rbd pool={}".format(rbd_pool_name)
|
||||
entity = f"{entity}-{cluster_name}-{rbd_pool_name}"
|
||||
caps["osd"] = f"profile rbd pool={rbd_pool_name}"
|
||||
|
||||
return caps, entity
|
||||
|
||||
@@ -869,8 +842,8 @@ class RadosJSON:
|
||||
raise ExecutionFailureException(
|
||||
"mandatory flags not found, please set the '--rbd-data-pool-name', '--cluster-name' flags"
|
||||
)
|
||||
entity = "{}-{}-{}".format(entity, cluster_name, rbd_pool_name)
|
||||
caps["osd"] = "profile rbd pool={}".format(rbd_pool_name)
|
||||
entity = f"{entity}-{cluster_name}-{rbd_pool_name}"
|
||||
caps["osd"] = f"profile rbd pool={rbd_pool_name}"
|
||||
|
||||
return caps, entity
|
||||
|
||||
@@ -893,8 +866,8 @@ class RadosJSON:
|
||||
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"
|
||||
f"no user found with user_name: {user_name}, "
|
||||
"get_caps_and_entity command failed.\n"
|
||||
)
|
||||
|
||||
def create_cephCSIKeyring_user(self, user):
|
||||
@@ -924,22 +897,18 @@ class RadosJSON:
|
||||
# check if user already exist
|
||||
user_key = self.check_user_exist(entity)
|
||||
if user_key != "":
|
||||
return user_key, "{}".format(
|
||||
entity.split(".", 1)[1]
|
||||
) # entity.split('.',1)[1] to rename entity(client.csi-rbd-node) as csi-rbd-node
|
||||
return user_key, f"{entity.split('.', 1)[1]}"
|
||||
# entity.split('.',1)[1] to rename entity(client.csi-rbd-node) as csi-rbd-node
|
||||
|
||||
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 {}' command failed.\n".format(user)
|
||||
+ "Error: {}".format(
|
||||
err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST
|
||||
)
|
||||
f"'auth get-or-create {user}' command failed.\n"
|
||||
f"Error: {err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST}"
|
||||
)
|
||||
return str(json_out[0]["key"]), "{}".format(
|
||||
entity.split(".", 1)[1]
|
||||
) # entity.split('.',1)[1] to rename entity(client.csi-rbd-node) as csi-rbd-node
|
||||
return str(json_out[0]["key"]), f"{entity.split('.', 1)[1]}"
|
||||
# entity.split('.',1)[1] to rename entity(client.csi-rbd-node) as csi-rbd-node
|
||||
|
||||
def get_cephfs_data_pool_details(self):
|
||||
cmd_json = {"prefix": "fs ls", "format": "json"}
|
||||
@@ -958,7 +927,7 @@ class RadosJSON:
|
||||
# '--cephfs-filesystem-name' or '--cephfs-data-pool-name' arguments,
|
||||
# raise an exception as we are unable to verify the args
|
||||
raise ExecutionFailureException(
|
||||
"'fs ls' ceph call failed with error: {}".format(err_msg)
|
||||
f"'fs ls' ceph call failed with error: {err_msg}"
|
||||
)
|
||||
|
||||
matching_json_out = {}
|
||||
@@ -974,13 +943,8 @@ class RadosJSON:
|
||||
# unable to find a matching fs-name, raise an error
|
||||
if len(matching_json_out_list) == 0:
|
||||
raise ExecutionFailureException(
|
||||
(
|
||||
"Filesystem provided, '{}', "
|
||||
+ "is not found in the fs-list: '{}'"
|
||||
).format(
|
||||
self._arg_parser.cephfs_filesystem_name,
|
||||
[str(x["name"]) for x in json_out],
|
||||
)
|
||||
f"Filesystem provided, '{self._arg_parser.cephfs_filesystem_name}', "
|
||||
f"is not found in the fs-list: {[str(x['name']) for x in json_out]}"
|
||||
)
|
||||
matching_json_out = matching_json_out_list[0]
|
||||
# if cephfs filesystem name is not provided,
|
||||
@@ -999,9 +963,8 @@ class RadosJSON:
|
||||
# if there is no matching fs exists, that means provided data_pool name is invalid
|
||||
if not matching_json_out:
|
||||
raise ExecutionFailureException(
|
||||
"Provided data_pool name, {}, does not exists".format(
|
||||
self._arg_parser.cephfs_data_pool_name
|
||||
)
|
||||
f"Provided data_pool name, {self._arg_parser.cephfs_data_pool_name},"
|
||||
" does not exists"
|
||||
)
|
||||
# c. if nothing is set and couldn't find a default,
|
||||
else:
|
||||
@@ -1024,12 +987,9 @@ class RadosJSON:
|
||||
not in matching_json_out["data_pools"]
|
||||
):
|
||||
raise ExecutionFailureException(
|
||||
"{}: '{}', {}: {}".format(
|
||||
"Provided data-pool-name",
|
||||
self._arg_parser.cephfs_data_pool_name,
|
||||
"doesn't match from the data-pools' list",
|
||||
[str(x) for x in matching_json_out["data_pools"]],
|
||||
)
|
||||
f"Provided data-pool-name: '{self._arg_parser.cephfs_data_pool_name}', "
|
||||
"doesn't match from the data-pools list: "
|
||||
f"{[str(x) for x in matching_json_out['data_pools']]}"
|
||||
)
|
||||
# if data_pool name is not provided,
|
||||
# then try to find a default data pool name
|
||||
@@ -1044,12 +1004,9 @@ class RadosJSON:
|
||||
# then warn the user that we are using the selected name
|
||||
if len(matching_json_out["data_pools"]) > 1:
|
||||
print(
|
||||
"{}: {}\n{}: '{}'\n".format(
|
||||
"WARNING: Multiple data pools detected",
|
||||
[str(x) for x in matching_json_out["data_pools"]],
|
||||
"Using the data-pool",
|
||||
self._arg_parser.cephfs_data_pool_name,
|
||||
)
|
||||
"WARNING: Multiple data pools detected: "
|
||||
f"{[str(x) for x in matching_json_out['data_pools']]}\n"
|
||||
f"Using the data-pool: '{self._arg_parser.cephfs_data_pool_name}'\n"
|
||||
)
|
||||
|
||||
def create_checkerKey(self):
|
||||
@@ -1081,10 +1038,8 @@ class RadosJSON:
|
||||
# if there is an unsuccessful attempt,
|
||||
if ret_val != 0 or len(json_out) == 0:
|
||||
raise ExecutionFailureException(
|
||||
"'auth get-or-create {}' command failed\n".format(self.run_as_user)
|
||||
+ "Error: {}".format(
|
||||
err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST
|
||||
)
|
||||
f"'auth get-or-create {self.run_as_user}' command failed\n"
|
||||
f"Error: {err_msg if ret_val != 0 else self.EMPTY_OUTPUT_LIST}"
|
||||
)
|
||||
return str(json_out[0]["key"])
|
||||
|
||||
@@ -1132,15 +1087,16 @@ class RadosJSON:
|
||||
output = subprocess.check_output(cmd, stderr=subprocess.PIPE)
|
||||
except subprocess.CalledProcessError as execErr:
|
||||
err_msg = (
|
||||
"failed to execute command %s. Output: %s. Code: %s. Error: %s"
|
||||
% (cmd, execErr.output, execErr.returncode, execErr.stderr)
|
||||
f"failed to execute command {cmd}. Output: {execErr.output}. "
|
||||
f"Code: {execErr.returncode}. Error: {execErr.stderr}"
|
||||
)
|
||||
raise Exception(err_msg)
|
||||
else:
|
||||
err_msg = (
|
||||
"failed to execute command %s. Output: %s. Code: %s. Error: %s"
|
||||
% (cmd, execErr.output, execErr.returncode, execErr.stderr)
|
||||
f"failed to execute command {cmd}. Output: {execErr.output}. "
|
||||
f"Code: {execErr.returncode}. Error: {execErr.stderr}"
|
||||
)
|
||||
|
||||
raise Exception(err_msg)
|
||||
|
||||
# if it is python2, don't check for ceph version for adding `info=read` cap(rgw_validation)
|
||||
@@ -1175,8 +1131,8 @@ class RadosJSON:
|
||||
info_cap_supported = False
|
||||
else:
|
||||
err_msg = (
|
||||
"failed to execute command %s. Output: %s. Code: %s. Error: %s"
|
||||
% (cmd, execErr.output, execErr.returncode, execErr.stderr)
|
||||
f"failed to execute command {cmd}. Output: {execErr.output}. "
|
||||
f"Code: {execErr.returncode}. Error: {execErr.stderr}"
|
||||
)
|
||||
raise Exception(err_msg)
|
||||
|
||||
@@ -1192,9 +1148,8 @@ class RadosJSON:
|
||||
fqdn, port = fqdn_rgw_endpoint.split(":")
|
||||
except ValueError:
|
||||
raise ExecutionFailureException(
|
||||
"Not a proper endpoint: {}, <FQDN>:<PORT>, format is expected".format(
|
||||
fqdn_rgw_endpoint
|
||||
)
|
||||
f"Not a proper endpoint: {fqdn_rgw_endpoint}, "
|
||||
"<FQDN>:<PORT>, format is expected"
|
||||
)
|
||||
rgw_endpoint_ip = self._convert_hostname_to_ip(fqdn)
|
||||
rgw_endpoint_port = port
|
||||
@@ -1217,17 +1172,17 @@ class RadosJSON:
|
||||
# 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 = [
|
||||
"{0}.rgw.meta".format(self._arg_parser.rgw_pool_prefix),
|
||||
f"{self._arg_parser.rgw_pool_prefix}.rgw.meta",
|
||||
".rgw.root",
|
||||
"{0}.rgw.control".format(self._arg_parser.rgw_pool_prefix),
|
||||
"{0}.rgw.log".format(self._arg_parser.rgw_pool_prefix),
|
||||
f"{self._arg_parser.rgw_pool_prefix}.rgw.control",
|
||||
f"{self._arg_parser.rgw_pool_prefix}.rgw.log",
|
||||
]
|
||||
pools_to_validate.extend(rgw_pool_to_validate)
|
||||
|
||||
for pool in pools_to_validate:
|
||||
if not self.cluster.pool_exists(pool):
|
||||
raise ExecutionFailureException(
|
||||
"The provided pool, '{}', does not exist".format(pool)
|
||||
f"The provided pool, '{pool}', does not exist"
|
||||
)
|
||||
|
||||
def validate_rados_namespace(self):
|
||||
@@ -1239,9 +1194,8 @@ class RadosJSON:
|
||||
ioctx = self.cluster.open_ioctx(rbd_pool_name)
|
||||
if rbd_inst.namespace_exists(ioctx, rados_namespace) is False:
|
||||
raise ExecutionFailureException(
|
||||
(
|
||||
"The provided rados Namespace, '{}', is not found in the pool '{}'"
|
||||
).format(rados_namespace, rbd_pool_name)
|
||||
f"The provided rados Namespace, '{rados_namespace}', "
|
||||
f"is not found in the pool '{rbd_pool_name}'"
|
||||
)
|
||||
|
||||
def validate_subvolume_group(self):
|
||||
@@ -1266,7 +1220,7 @@ class RadosJSON:
|
||||
_ = subprocess.check_output(cmd, stderr=subprocess.PIPE)
|
||||
except subprocess.CalledProcessError as execErr:
|
||||
raise ExecutionFailureException(
|
||||
"subvolume group {} passed doesn't exist".format(subvolume_group)
|
||||
f"subvolume group {subvolume_group} passed doesn't exist"
|
||||
)
|
||||
|
||||
def get_rgw_fsid(self):
|
||||
@@ -1289,9 +1243,7 @@ class RadosJSON:
|
||||
)
|
||||
except requests.exceptions.Timeout:
|
||||
raise ExecutionFailureException(
|
||||
"invalid endpoint:, not able to call admin-ops api{}".format(
|
||||
rgw_endpoint
|
||||
)
|
||||
f"invalid endpoint:, not able to call admin-ops api{rgw_endpoint}"
|
||||
)
|
||||
r1 = r.json()
|
||||
if r1 is None or r1.get("info") is None:
|
||||
@@ -1309,8 +1261,8 @@ class RadosJSON:
|
||||
if fsid != rgw_fsid:
|
||||
raise ExecutionFailureException(
|
||||
(
|
||||
"The provided rgw Endpoint, '{}', is invalid. We are validating by calling the adminops api through rgw-endpoint and validating the cluster_id '{}' is equal to the ceph cluster fsid '{}'"
|
||||
).format(self._arg_parser.rgw_endpoint, rgw_fsid, fsid)
|
||||
f"The provided rgw Endpoint, '{self._arg_parser.rgw_endpoint}', is invalid. We are validating by calling the adminops api through rgw-endpoint and validating the cluster_id '{rgw_fsid}' is equal to the ceph cluster fsid '{fsid}'"
|
||||
)
|
||||
)
|
||||
|
||||
def validate_rgw_realm_name(self):
|
||||
@@ -1326,8 +1278,8 @@ class RadosJSON:
|
||||
output = subprocess.check_output(cmd, stderr=subprocess.PIPE)
|
||||
except subprocess.CalledProcessError as execErr:
|
||||
err_msg = (
|
||||
"failed to execute command %s. Output: %s. Code: %s. Error: %s"
|
||||
% (cmd, execErr.output, execErr.returncode, execErr.stderr)
|
||||
f"failed to execute command {cmd}. Output: {execErr.output}. "
|
||||
f"Code: {execErr.returncode}. Error: {execErr.stderr}"
|
||||
)
|
||||
raise Exception(err_msg)
|
||||
|
||||
@@ -1415,7 +1367,7 @@ class RadosJSON:
|
||||
shOutIO = StringIO()
|
||||
for k, v in self.out_map.items():
|
||||
if v and k not in self._excluded_keys:
|
||||
shOutIO.write("export {}={}{}".format(k, v, LINESEP))
|
||||
shOutIO.write(f"export {k}={v}{LINESEP}")
|
||||
shOut = shOutIO.getvalue()
|
||||
shOutIO.close()
|
||||
return shOut
|
||||
@@ -1468,7 +1420,7 @@ class RadosJSON:
|
||||
):
|
||||
json_out.append(
|
||||
{
|
||||
"name": "rook-{}".format(self.out_map["CSI_RBD_NODE_SECRET_NAME"]),
|
||||
"name": f"rook-{self.out_map['CSI_RBD_NODE_SECRET_NAME']}",
|
||||
"kind": "Secret",
|
||||
"data": {
|
||||
"userID": self.out_map["CSI_RBD_NODE_SECRET_NAME"],
|
||||
@@ -1483,9 +1435,7 @@ class RadosJSON:
|
||||
):
|
||||
json_out.append(
|
||||
{
|
||||
"name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"name": f"rook-{self.out_map['CSI_RBD_PROVISIONER_SECRET_NAME']}",
|
||||
"kind": "Secret",
|
||||
"data": {
|
||||
"userID": self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"],
|
||||
@@ -1500,9 +1450,7 @@ class RadosJSON:
|
||||
):
|
||||
json_out.append(
|
||||
{
|
||||
"name": "rook-{}".format(
|
||||
self.out_map["CSI_CEPHFS_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"name": f"rook-{self.out_map['CSI_CEPHFS_PROVISIONER_SECRET_NAME']}",
|
||||
"kind": "Secret",
|
||||
"data": {
|
||||
"adminID": self.out_map["CSI_CEPHFS_PROVISIONER_SECRET_NAME"],
|
||||
@@ -1517,9 +1465,7 @@ class RadosJSON:
|
||||
):
|
||||
json_out.append(
|
||||
{
|
||||
"name": "rook-{}".format(
|
||||
self.out_map["CSI_CEPHFS_NODE_SECRET_NAME"]
|
||||
),
|
||||
"name": f"rook-{self.out_map['CSI_CEPHFS_NODE_SECRET_NAME']}",
|
||||
"kind": "Secret",
|
||||
"data": {
|
||||
"adminID": self.out_map["CSI_CEPHFS_NODE_SECRET_NAME"],
|
||||
@@ -1547,15 +1493,9 @@ class RadosJSON:
|
||||
"data": {
|
||||
"dataPool": self.out_map["RBD_POOL_NAME"],
|
||||
"pool": self.out_map["RBD_METADATA_EC_POOL_NAME"],
|
||||
"csi.storage.k8s.io/provisioner-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/node-stage-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_NODE_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/provisioner-secret-name": f"rook-{self.out_map['CSI_RBD_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": f"rook-{self.out_map['CSI_RBD_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/node-stage-secret-name": f"rook-{self.out_map['CSI_RBD_NODE_SECRET_NAME']}",
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -1566,15 +1506,9 @@ class RadosJSON:
|
||||
"kind": "StorageClass",
|
||||
"data": {
|
||||
"pool": self.out_map["RBD_POOL_NAME"],
|
||||
"csi.storage.k8s.io/provisioner-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/node-stage-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_RBD_NODE_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/provisioner-secret-name": f"rook-{self.out_map['CSI_RBD_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": f"rook-{self.out_map['CSI_RBD_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/node-stage-secret-name": f"rook-{self.out_map['CSI_RBD_NODE_SECRET_NAME']}",
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -1587,15 +1521,9 @@ class RadosJSON:
|
||||
"data": {
|
||||
"fsName": self.out_map["CEPHFS_FS_NAME"],
|
||||
"pool": self.out_map["CEPHFS_POOL_NAME"],
|
||||
"csi.storage.k8s.io/provisioner-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_CEPHFS_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_CEPHFS_PROVISIONER_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/node-stage-secret-name": "rook-{}".format(
|
||||
self.out_map["CSI_CEPHFS_NODE_SECRET_NAME"]
|
||||
),
|
||||
"csi.storage.k8s.io/provisioner-secret-name": f"rook-{self.out_map['CSI_CEPHFS_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/controller-expand-secret-name": f"rook-{self.out_map['CSI_CEPHFS_PROVISIONER_SECRET_NAME']}",
|
||||
"csi.storage.k8s.io/node-stage-secret-name": f"rook-{self.out_map['CSI_CEPHFS_NODE_SECRET_NAME']}",
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -1649,10 +1577,10 @@ class RadosJSON:
|
||||
|
||||
def upgrade_user_permissions(self, user):
|
||||
# check whether the given user exists or not
|
||||
cmd_json = {"prefix": "auth get", "entity": "{}".format(user), "format": "json"}
|
||||
cmd_json = {"prefix": "auth get", "entity": f"{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:
|
||||
print("user {} not found for upgrading.".format(user))
|
||||
print(f"user {user} not found for upgrading.")
|
||||
return
|
||||
existing_caps = json_out[0]["caps"]
|
||||
new_cap, _ = self.get_caps_and_entity(user)
|
||||
@@ -1686,10 +1614,9 @@ class RadosJSON:
|
||||
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(user)
|
||||
+ "Error: {}".format(err_msg)
|
||||
f"'auth caps {user}' command failed.\n Error: {err_msg}"
|
||||
)
|
||||
print("Updated user, {}, successfully.".format(user))
|
||||
print(f"Updated user {user} successfully.")
|
||||
|
||||
def main(self):
|
||||
generated_output = ""
|
||||
@@ -1701,9 +1628,9 @@ class RadosJSON:
|
||||
generated_output = self.gen_shell_out()
|
||||
else:
|
||||
raise ExecutionFailureException(
|
||||
"Unsupported format: {}".format(self._arg_parser.format)
|
||||
f"Unsupported format: {self._arg_parser.format}"
|
||||
)
|
||||
print("{}".format(generated_output))
|
||||
print(generated_output)
|
||||
if self.output_file and generated_output:
|
||||
fOut = open(self.output_file, mode="w", encoding="UTF-8")
|
||||
fOut.write(generated_output)
|
||||
@@ -1718,11 +1645,11 @@ if __name__ == "__main__":
|
||||
try:
|
||||
rjObj.main()
|
||||
except ExecutionFailureException as err:
|
||||
print("Execution Failed: {}".format(err))
|
||||
print(f"Execution Failed: {err}")
|
||||
raise err
|
||||
except KeyError as kErr:
|
||||
print("KeyError: %s", kErr)
|
||||
print(f"KeyError: {kErr}")
|
||||
except OSError as osErr:
|
||||
print("Error while trying to output the data: {}".format(osErr))
|
||||
print(f"Error while trying to output the data: {osErr}")
|
||||
finally:
|
||||
rjObj.shutdown()
|
||||
Reference in new issue
Block a user