mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
|
|
class Die(BaseException):
|
|
"""Raise an exception that is unlikely to be caught (and will thus catastrophically exit the process)."""
|
|
|
|
|
|
def main():
|
|
module = AnsibleModule(
|
|
argument_spec=dict(
|
|
errors=dict(type='list', elements='str', default=[]),
|
|
trigger_unhandled_exception=dict(type='str', default=''),
|
|
return_from_main=dict(type='bool', default=False),
|
|
),
|
|
supports_check_mode=True,
|
|
mutually_exclusive=[['errors', 'trigger_unhandled_exception', 'return_from_main']],
|
|
)
|
|
|
|
if module.params['return_from_main']:
|
|
return
|
|
|
|
if trigger_unhandled_exception := module.params['trigger_unhandled_exception']:
|
|
raise Die(trigger_unhandled_exception)
|
|
|
|
if errors := module.params['errors']:
|
|
raise_exceptions(errors)
|
|
|
|
result = dict()
|
|
|
|
module.exit_json(**result)
|
|
|
|
|
|
def raise_exceptions(exceptions: list[str]) -> None:
|
|
if len(exceptions) > 1:
|
|
try:
|
|
raise_exceptions(exceptions[1:])
|
|
except Exception as ex:
|
|
raise Exception(exceptions[0]) from ex
|
|
|
|
raise Exception(exceptions[0])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|