Ensure that current uses of BaseException are required
* In some cases, it appears that Exception should have been used instead as there's no need to catch sys.exit KeyboardInterrupt and similar. * In a few cases, it appears that BaseException is used because a library we depend on calls sys.exit() contrary to good coding design. Comment those so that we know that those have been audited and found to be correct and change to use (Exception, SystemExit) instead.
This commit is contained in:
parent
3fba006207
commit
175f3b51e5
9 changed files with 31 additions and 20 deletions
|
@ -173,7 +173,9 @@ class ZabbixInventory(object):
|
|||
try:
|
||||
api = ZabbixAPI(server=self.zabbix_server, validate_certs=self.validate_certs)
|
||||
api.login(user=self.zabbix_username, password=self.zabbix_password)
|
||||
except BaseException as e:
|
||||
# zabbix_api tries to exit if it cannot parse what the zabbix server returned
|
||||
# so we have to use SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
print("Error: Could not login to Zabbix server. Check your zabbix.ini.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
|
|
@ -321,7 +321,7 @@ def gather_vm_facts(content, vm):
|
|||
for item in vm.layout.disk:
|
||||
for disk in item.diskFile:
|
||||
facts['hw_files'].append(disk)
|
||||
except BaseException:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
facts['hw_folder'] = PyVmomi.get_vm_path(content, vm)
|
||||
|
@ -968,7 +968,7 @@ class PyVmomi(object):
|
|||
folder_name = fp.name + '/' + folder_name
|
||||
try:
|
||||
fp = fp.parent
|
||||
except BaseException:
|
||||
except Exception:
|
||||
break
|
||||
folder_name = '/' + folder_name
|
||||
return folder_name
|
||||
|
|
|
@ -289,7 +289,7 @@ from ansible.module_utils.ec2 import AWSRetry, boto3_tag_list_to_ansible_dict, c
|
|||
|
||||
try:
|
||||
import botocore
|
||||
except BaseException:
|
||||
except Exception:
|
||||
pass # caught by imported HAS_BOTO3
|
||||
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ def main():
|
|||
obj.create()
|
||||
else:
|
||||
obj.modify()
|
||||
except BaseException as e:
|
||||
except Exception as e:
|
||||
module.fail_json(
|
||||
msg='Creating/editing dns entry {} in {} failed: {}'.format(name, container, e)
|
||||
)
|
||||
|
@ -170,7 +170,7 @@ def main():
|
|||
if not module.check_mode:
|
||||
obj.remove()
|
||||
changed = True
|
||||
except BaseException as e:
|
||||
except Exception as e:
|
||||
module.fail_json(
|
||||
msg='Removing dns entry {} in {} failed: {}'.format(name, container, e)
|
||||
)
|
||||
|
|
|
@ -513,7 +513,7 @@ def main():
|
|||
obj.create()
|
||||
elif changed:
|
||||
obj.modify()
|
||||
except BaseException as err:
|
||||
except Exception as err:
|
||||
module.fail_json(
|
||||
msg='Creating/editing share {} in {} failed: {}'.format(
|
||||
name,
|
||||
|
@ -528,7 +528,7 @@ def main():
|
|||
if not module.check_mode:
|
||||
obj.remove()
|
||||
changed = True
|
||||
except BaseException as err:
|
||||
except Exception as err:
|
||||
module.fail_json(
|
||||
msg='Removing share {} in {} failed: {}'.format(
|
||||
name,
|
||||
|
|
|
@ -152,7 +152,8 @@ def create_maintenance(zbx, group_ids, host_ids, start_time, maintenance_type, p
|
|||
}]
|
||||
}
|
||||
)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
return 0, None, None
|
||||
|
||||
|
@ -176,7 +177,8 @@ def update_maintenance(zbx, maintenance_id, group_ids, host_ids, start_time, mai
|
|||
}]
|
||||
}
|
||||
)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
return 0, None, None
|
||||
|
||||
|
@ -193,7 +195,8 @@ def get_maintenance(zbx, name):
|
|||
"selectHosts": "extend"
|
||||
}
|
||||
)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
|
||||
for maintenance in maintenances:
|
||||
|
@ -207,7 +210,8 @@ def get_maintenance(zbx, name):
|
|||
def delete_maintenance(zbx, maintenance_id):
|
||||
try:
|
||||
zbx.maintenance.delete([maintenance_id])
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
return 0, None, None
|
||||
|
||||
|
@ -225,7 +229,8 @@ def get_group_ids(zbx, host_groups):
|
|||
}
|
||||
}
|
||||
)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
|
||||
if not result:
|
||||
|
@ -249,7 +254,8 @@ def get_host_ids(zbx, host_names):
|
|||
}
|
||||
}
|
||||
)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
return 1, None, str(e)
|
||||
|
||||
if not result:
|
||||
|
@ -308,7 +314,8 @@ def main():
|
|||
zbx = ZabbixAPI(server_url, timeout=timeout, user=http_login_user, passwd=http_login_password,
|
||||
validate_certs=validate_certs)
|
||||
zbx.login(login_user, login_password)
|
||||
except BaseException as e:
|
||||
# zabbix_api can call sys.exit() so we need to catch SystemExit here
|
||||
except (Exception, SystemExit) as e:
|
||||
module.fail_json(msg="Failed to connect to Zabbix server: %s" % e)
|
||||
|
||||
changed = False
|
||||
|
|
|
@ -84,12 +84,12 @@ def get_hostname():
|
|||
def get_ip():
|
||||
try:
|
||||
return socket.gethostbyname(get_hostname())
|
||||
except BaseException:
|
||||
except Exception:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
try:
|
||||
s.connect(('10.255.255.255', 1))
|
||||
IP = s.getsockname()[0]
|
||||
except BaseException:
|
||||
except Exception:
|
||||
IP = '127.0.0.1'
|
||||
finally:
|
||||
s.close()
|
||||
|
@ -101,7 +101,7 @@ def isJSONable(obj):
|
|||
try:
|
||||
json.dumps(obj, sort_keys=True, cls=AnsibleJSONEncoder)
|
||||
return True
|
||||
except BaseException:
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
|
@ -165,7 +165,7 @@ class CallbackModule(CallbackBase):
|
|||
def sanitizeJSON(self, data):
|
||||
try:
|
||||
return json.loads(json.dumps(data, sort_keys=True, cls=AnsibleJSONEncoder))
|
||||
except BaseException:
|
||||
except Exception:
|
||||
return {'warnings': ['JSON Formatting Issue', json.dumps(data, sort_keys=True, cls=AnsibleJSONEncoder)]}
|
||||
|
||||
def flush(self, log, options):
|
||||
|
|
|
@ -99,6 +99,8 @@ def test_python_module(path, base_dir, messages, ansible_module):
|
|||
except ImporterAnsibleModuleException:
|
||||
# module instantiated AnsibleModule without raising an exception
|
||||
pass
|
||||
# We truly want to catch anything the plugin might do here, including call sys.exit() so we
|
||||
# catch BaseException
|
||||
except BaseException as ex: # pylint: disable=locally-disabled, broad-except
|
||||
capture_report(path, capture, messages)
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ sys.modules['cvprac.cvp_client_errors'] = Mock()
|
|||
from ansible.modules.network.cloudvision import cv_server_provision
|
||||
|
||||
|
||||
class MockException(BaseException):
|
||||
class MockException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue