--- a/fence/agents/lib/fencing.py.py.orig 2017-10-16 13:51:44.994248524 +0200 +++ b/fence/agents/lib/fencing.py.py 2017-10-16 14:09:05.576468918 +0200 @@ -938,7 +938,7 @@ return status -def set_multi_power_fn(tn, options, set_power_fn, get_power_fn, retry_attempts = 1): +def async_set_multi_power_fn(tn, options, set_power_fn, get_power_fn, retry_attempts): plugs = options["--plugs"] if options.has_key("--plugs") else [""] for _ in range(retry_attempts): @@ -961,6 +961,39 @@ return True return False +def sync_set_multi_power_fn(tn, options, sync_set_power_fn, retry_attempts): + success = True + plugs = options["--plugs"] if options.has_key("--plugs") else [""] + + for plug in plugs: + try: + options["--uuid"] = str(uuid.UUID(plug)) + except ValueError: + pass + except KeyError: + pass + + options["--plug"] = plug + for retry in range(retry_attempts): + if sync_set_power_fn(tn, options): + break + if retry == retry_attempts-1: + success = False + time.sleep(int(options["--power-wait"])) + + return success + +def set_multi_power_fn(tn, options, set_power_fn, get_power_fn, sync_set_power_fn, retry_attempts=1): + + if set_power_fn != None: + if get_power_fn != None: + return async_set_multi_power_fn(tn, options, set_power_fn, get_power_fn, retry_attempts) + elif sync_set_power_fn != None: + return sync_set_multi_power_fn(tn, options, sync_set_power_fn, retry_attempts) + + return False + + def show_docs(options, docs=None): device_opt = options["device_opt"] @@ -986,7 +1019,7 @@ print __main__.REDHAT_COPYRIGHT sys.exit(0) -def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list=None, reboot_cycle_fn=None): +def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list=None, reboot_cycle_fn=None, sync_set_power_fn=None): result = 0 try: @@ -1042,12 +1075,12 @@ return 0 if options["--action"] == "on": - if set_multi_power_fn(tn, options, set_power_fn, get_power_fn, 1 + int(options["--retry-on"])): + if set_multi_power_fn(tn, options, set_power_fn, get_power_fn, sync_set_power_fn, 1 + int(options["--retry-on"])): print "Success: Powered ON" else: fail(EC_WAITING_ON) elif options["--action"] == "off": - if set_multi_power_fn(tn, options, set_power_fn, get_power_fn): + if set_multi_power_fn(tn, options, set_power_fn, get_power_fn, sync_set_power_fn): print "Success: Powered OFF" else: fail(EC_WAITING_OFF) @@ -1065,13 +1098,13 @@ else: if status != "off": options["--action"] = "off" - if not set_multi_power_fn(tn, options, set_power_fn, get_power_fn): + if not set_multi_power_fn(tn, options, set_power_fn, get_power_fn, sync_set_power_fn): fail(EC_WAITING_OFF) options["--action"] = "on" try: - power_on = set_multi_power_fn(tn, options, set_power_fn, get_power_fn, int(options["--retry-on"])) + power_on = set_multi_power_fn(tn, options, set_power_fn, get_power_fn, sync_set_power_fn, int(options["--retry-on"])) except Exception, ex: # an error occured during power ON phase in reboot # fence action was completed succesfully even in that case