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.
pull/49991/head
Toshio Kuratomi 6 years ago
parent 3fba006207
commit 175f3b51e5

@ -173,7 +173,9 @@ class ZabbixInventory(object):
try: try:
api = ZabbixAPI(server=self.zabbix_server, validate_certs=self.validate_certs) api = ZabbixAPI(server=self.zabbix_server, validate_certs=self.validate_certs)
api.login(user=self.zabbix_username, password=self.zabbix_password) 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) print("Error: Could not login to Zabbix server. Check your zabbix.ini.", file=sys.stderr)
sys.exit(1) sys.exit(1)

@ -321,7 +321,7 @@ def gather_vm_facts(content, vm):
for item in vm.layout.disk: for item in vm.layout.disk:
for disk in item.diskFile: for disk in item.diskFile:
facts['hw_files'].append(disk) facts['hw_files'].append(disk)
except BaseException: except Exception:
pass pass
facts['hw_folder'] = PyVmomi.get_vm_path(content, vm) facts['hw_folder'] = PyVmomi.get_vm_path(content, vm)
@ -968,7 +968,7 @@ class PyVmomi(object):
folder_name = fp.name + '/' + folder_name folder_name = fp.name + '/' + folder_name
try: try:
fp = fp.parent fp = fp.parent
except BaseException: except Exception:
break break
folder_name = '/' + folder_name folder_name = '/' + folder_name
return folder_name return folder_name

@ -289,7 +289,7 @@ from ansible.module_utils.ec2 import AWSRetry, boto3_tag_list_to_ansible_dict, c
try: try:
import botocore import botocore
except BaseException: except Exception:
pass # caught by imported HAS_BOTO3 pass # caught by imported HAS_BOTO3

@ -159,7 +159,7 @@ def main():
obj.create() obj.create()
else: else:
obj.modify() obj.modify()
except BaseException as e: except Exception as e:
module.fail_json( module.fail_json(
msg='Creating/editing dns entry {} in {} failed: {}'.format(name, container, e) msg='Creating/editing dns entry {} in {} failed: {}'.format(name, container, e)
) )
@ -170,7 +170,7 @@ def main():
if not module.check_mode: if not module.check_mode:
obj.remove() obj.remove()
changed = True changed = True
except BaseException as e: except Exception as e:
module.fail_json( module.fail_json(
msg='Removing dns entry {} in {} failed: {}'.format(name, container, e) msg='Removing dns entry {} in {} failed: {}'.format(name, container, e)
) )

@ -513,7 +513,7 @@ def main():
obj.create() obj.create()
elif changed: elif changed:
obj.modify() obj.modify()
except BaseException as err: except Exception as err:
module.fail_json( module.fail_json(
msg='Creating/editing share {} in {} failed: {}'.format( msg='Creating/editing share {} in {} failed: {}'.format(
name, name,
@ -528,7 +528,7 @@ def main():
if not module.check_mode: if not module.check_mode:
obj.remove() obj.remove()
changed = True changed = True
except BaseException as err: except Exception as err:
module.fail_json( module.fail_json(
msg='Removing share {} in {} failed: {}'.format( msg='Removing share {} in {} failed: {}'.format(
name, 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 1, None, str(e)
return 0, None, None 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 1, None, str(e)
return 0, None, None return 0, None, None
@ -193,7 +195,8 @@ def get_maintenance(zbx, name):
"selectHosts": "extend" "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) return 1, None, str(e)
for maintenance in maintenances: for maintenance in maintenances:
@ -207,7 +210,8 @@ def get_maintenance(zbx, name):
def delete_maintenance(zbx, maintenance_id): def delete_maintenance(zbx, maintenance_id):
try: try:
zbx.maintenance.delete([maintenance_id]) 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 1, None, str(e)
return 0, None, None 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) return 1, None, str(e)
if not result: 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) return 1, None, str(e)
if not result: if not result:
@ -308,7 +314,8 @@ def main():
zbx = ZabbixAPI(server_url, timeout=timeout, user=http_login_user, passwd=http_login_password, zbx = ZabbixAPI(server_url, timeout=timeout, user=http_login_user, passwd=http_login_password,
validate_certs=validate_certs) validate_certs=validate_certs)
zbx.login(login_user, login_password) 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) module.fail_json(msg="Failed to connect to Zabbix server: %s" % e)
changed = False changed = False

@ -84,12 +84,12 @@ def get_hostname():
def get_ip(): def get_ip():
try: try:
return socket.gethostbyname(get_hostname()) return socket.gethostbyname(get_hostname())
except BaseException: except Exception:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try: try:
s.connect(('10.255.255.255', 1)) s.connect(('10.255.255.255', 1))
IP = s.getsockname()[0] IP = s.getsockname()[0]
except BaseException: except Exception:
IP = '127.0.0.1' IP = '127.0.0.1'
finally: finally:
s.close() s.close()
@ -101,7 +101,7 @@ def isJSONable(obj):
try: try:
json.dumps(obj, sort_keys=True, cls=AnsibleJSONEncoder) json.dumps(obj, sort_keys=True, cls=AnsibleJSONEncoder)
return True return True
except BaseException: except Exception:
return False return False
@ -165,7 +165,7 @@ class CallbackModule(CallbackBase):
def sanitizeJSON(self, data): def sanitizeJSON(self, data):
try: try:
return json.loads(json.dumps(data, sort_keys=True, cls=AnsibleJSONEncoder)) 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)]} return {'warnings': ['JSON Formatting Issue', json.dumps(data, sort_keys=True, cls=AnsibleJSONEncoder)]}
def flush(self, log, options): def flush(self, log, options):

@ -99,6 +99,8 @@ def test_python_module(path, base_dir, messages, ansible_module):
except ImporterAnsibleModuleException: except ImporterAnsibleModuleException:
# module instantiated AnsibleModule without raising an exception # module instantiated AnsibleModule without raising an exception
pass 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 except BaseException as ex: # pylint: disable=locally-disabled, broad-except
capture_report(path, capture, messages) 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 from ansible.modules.network.cloudvision import cv_server_provision
class MockException(BaseException): class MockException(Exception):
pass pass

Loading…
Cancel
Save