1""" 2Utilities to enable exception reraising across the master commands 3 4""" 5 6import builtins 7 8import salt.exceptions 9import salt.utils.event 10 11 12def raise_error(name=None, args=None, message=""): 13 """ 14 Raise an exception with __name__ from name, args from args 15 If args is None Otherwise message from message\ 16 If name is empty then use "Exception" 17 """ 18 name = name or "Exception" 19 if hasattr(salt.exceptions, name): 20 ex = getattr(salt.exceptions, name) 21 elif hasattr(builtins, name): 22 ex = getattr(builtins, name) 23 else: 24 name = "SaltException" 25 ex = getattr(salt.exceptions, name) 26 if args is not None: 27 raise ex(*args) 28 else: 29 raise ex(message) 30 31 32def pack_exception(exc): 33 if hasattr(exc, "pack"): 34 packed_exception = exc.pack() 35 else: 36 packed_exception = {"message": exc.__unicode__(), "args": exc.args} 37 return packed_exception 38 39 40def fire_exception(exc, opts, job=None, node="minion"): 41 """ 42 Fire raw exception across the event bus 43 """ 44 if job is None: 45 job = {} 46 event = salt.utils.event.SaltEvent(node, opts=opts, listen=False) 47 event.fire_event(pack_exception(exc), "_salt_error") 48