* [Cluster-devel] [PATCH 3/3] fence_amt: option --method and new option --amttool-path [not found] <1078693570.3048094.1385742338995.JavaMail.root@redhat.com> @ 2013-11-29 16:32 ` Ondrej Mular 2013-11-29 21:37 ` Fabio M. Di Nitto 0 siblings, 1 reply; 2+ messages in thread From: Ondrej Mular @ 2013-11-29 16:32 UTC (permalink / raw) To: cluster-devel.redhat.com Add support for option --method and new option --amttool-path --- fence/agents/amt/fence_amt.py | 72 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/fence/agents/amt/fence_amt.py b/fence/agents/amt/fence_amt.py index 8fe2dbc..7077828 100755 --- a/fence/agents/amt/fence_amt.py +++ b/fence/agents/amt/fence_amt.py @@ -1,6 +1,6 @@ #!/usr/bin/python -import sys, subprocess, re +import sys, subprocess, re, os, stat from pipes import quote sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * @@ -21,12 +21,11 @@ def get_power_status(_, options): try: process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) except OSError: - fail(EC_TOOL_FAIL) + fail_usage("Amttool not found or not accessible") process.wait() output = process.communicate() - process.stdout.close() match = re.search('Powerstate:[\\s]*(..)', str(output)) @@ -51,19 +50,44 @@ def set_power_status(_, options): process = subprocess.Popen(cmd, stdout=null, stderr=null, shell=True) except OSError: null.close() - fail(EC_TOOL_FAIL) + fail_usage("Amttool not found or not accessible") process.wait() null.close() return +def reboot_cycle(_, options): + cmd = create_command(options, "cycle") + + if options["log"] >= LOG_MODE_VERBOSE: + options["debug_fh"].write("executing: " + cmd + "\n") + + null = open('/dev/null', 'w') + try: + process = subprocess.Popen(cmd, stdout=null, stderr=null, shell=True) + except OSError: + null.close() + fail_usage("Amttool not found or not accessible") + + status = process.wait() + null.close() + + return not bool(status) + +def is_executable(path): + if os.path.exists(path): + stats = os.stat(path) + if stat.S_ISREG(stats.st_mode) and os.access(path, os.X_OK): + return True + return False + def create_command(options, action): # --password / -p cmd = "AMT_PASSWORD=" + quote(options["--password"]) - cmd += " " + options["amttool_path"] + cmd += " " + options["--amttool-path"] # --ip / -a cmd += " " + options["--ip"] @@ -77,7 +101,10 @@ def create_command(options, action): elif action == "off": cmd = "echo \"y\"|" + cmd cmd += " powerdown" - if action in ["on", "off"] and options.has_key("--boot-options"): + elif action == "cycle": + cmd = "echo \"y\"|" + cmd + cmd += " powercycle" + if action in ["on", "off", "cycle"] and options.has_key("--boot-options"): cmd += options["--boot-options"] # --use-sudo / -d @@ -86,25 +113,40 @@ def create_command(options, action): return cmd -def main(): - - atexit.register(atexit_handler) - - device_opt = [ "ipaddr", "no_login", "passwd", "boot_option", "no_port", "sudo"] - +def define_new_opts(): all_opt["boot_option"] = { "getopt" : "b:", "longopt" : "boot-option", - "help":"-b, --boot-option=[option] Change the default boot behavior of the machine. (pxe|hd|hdsafe|cd|diag)", + "help":"-b, --boot-option=[option] Change the default boot behavior of the machine. (pxe|hd|hdsafe|cd|diag)", "required" : "0", "shortdesc" : "Change the default boot behavior of the machine.", "choices" : ["pxe", "hd", "hdsafe", "cd", "diag"], "order" : 1 } + all_opt["amttool_path"] = { + "getopt" : "i:", + "longopt" : "amttool-path", + "help" : "--amttool-path=[path] Path to amttool binary", + "required" : "0", + "shortdesc" : "Path to amttool binary", + "default" : "/usr/bin/amttool", + "order": 200 + } + + +def main(): + + atexit.register(atexit_handler) + + device_opt = [ "ipaddr", "no_login", "passwd", "boot_option", "no_port", + "sudo", "amttool_path", "method" ] + + define_new_opts() options = check_input(device_opt, process_input(device_opt)) - options["amttool_path"] = "/usr/bin/amttool" + if not is_executable(options["--amttool-path"]): + fail_usage("Amttool not found or not accessible") docs = { } docs["shortdesc"] = "Fence agent for AMT" @@ -112,7 +154,7 @@ def main(): docs["vendorurl"] = "http://www.intel.com/" show_docs(options, docs) - result = fence_action(None, options, set_power_status, get_power_status, None) + result = fence_action(None, options, set_power_status, get_power_status, None, reboot_cycle) sys.exit(result) -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [PATCH 3/3] fence_amt: option --method and new option --amttool-path 2013-11-29 16:32 ` [Cluster-devel] [PATCH 3/3] fence_amt: option --method and new option --amttool-path Ondrej Mular @ 2013-11-29 21:37 ` Fabio M. Di Nitto 0 siblings, 0 replies; 2+ messages in thread From: Fabio M. Di Nitto @ 2013-11-29 21:37 UTC (permalink / raw) To: cluster-devel.redhat.com On 11/29/2013 05:32 PM, Ondrej Mular wrote: > Add support for option --method and new option --amttool-path > > --- > fence/agents/amt/fence_amt.py | 72 ++++++++++++++++++++++++++++++++++--------- > 1 file changed, 57 insertions(+), 15 deletions(-) > > diff --git a/fence/agents/amt/fence_amt.py b/fence/agents/amt/fence_amt.py > index 8fe2dbc..7077828 100755 > --- a/fence/agents/amt/fence_amt.py > +++ b/fence/agents/amt/fence_amt.py > @@ -1,6 +1,6 @@ > #!/usr/bin/python > > -import sys, subprocess, re > +import sys, subprocess, re, os, stat > from pipes import quote > sys.path.append("@FENCEAGENTSLIBDIR@") > from fencing import * > @@ -21,12 +21,11 @@ def get_power_status(_, options): > try: > process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) > except OSError: > - fail(EC_TOOL_FAIL) > + fail_usage("Amttool not found or not accessible") > > process.wait() > > output = process.communicate() > - > process.stdout.close() > > match = re.search('Powerstate:[\\s]*(..)', str(output)) > @@ -51,19 +50,44 @@ def set_power_status(_, options): > process = subprocess.Popen(cmd, stdout=null, stderr=null, shell=True) > except OSError: > null.close() > - fail(EC_TOOL_FAIL) > + fail_usage("Amttool not found or not accessible") > > process.wait() > null.close() > > return > > +def reboot_cycle(_, options): > + cmd = create_command(options, "cycle") > + > + if options["log"] >= LOG_MODE_VERBOSE: > + options["debug_fh"].write("executing: " + cmd + "\n") > + > + null = open('/dev/null', 'w') > + try: > + process = subprocess.Popen(cmd, stdout=null, stderr=null, shell=True) > + except OSError: > + null.close() > + fail_usage("Amttool not found or not accessible") > + > + status = process.wait() > + null.close() > + > + return not bool(status) > + > +def is_executable(path): > + if os.path.exists(path): > + stats = os.stat(path) > + if stat.S_ISREG(stats.st_mode) and os.access(path, os.X_OK): > + return True > + return False > + > def create_command(options, action): > > # --password / -p > cmd = "AMT_PASSWORD=" + quote(options["--password"]) > > - cmd += " " + options["amttool_path"] > + cmd += " " + options["--amttool-path"] > > # --ip / -a > cmd += " " + options["--ip"] > @@ -77,7 +101,10 @@ def create_command(options, action): > elif action == "off": > cmd = "echo \"y\"|" + cmd > cmd += " powerdown" > - if action in ["on", "off"] and options.has_key("--boot-options"): > + elif action == "cycle": > + cmd = "echo \"y\"|" + cmd > + cmd += " powercycle" > + if action in ["on", "off", "cycle"] and options.has_key("--boot-options"): > cmd += options["--boot-options"] > > # --use-sudo / -d > @@ -86,25 +113,40 @@ def create_command(options, action): > > return cmd > > -def main(): > - > - atexit.register(atexit_handler) > - > - device_opt = [ "ipaddr", "no_login", "passwd", "boot_option", "no_port", "sudo"] > - > +def define_new_opts(): > all_opt["boot_option"] = { > "getopt" : "b:", > "longopt" : "boot-option", > - "help":"-b, --boot-option=[option] Change the default boot behavior of the machine. (pxe|hd|hdsafe|cd|diag)", > + "help":"-b, --boot-option=[option] Change the default boot behavior of the machine. (pxe|hd|hdsafe|cd|diag)", > "required" : "0", > "shortdesc" : "Change the default boot behavior of the machine.", > "choices" : ["pxe", "hd", "hdsafe", "cd", "diag"], > "order" : 1 > } > + all_opt["amttool_path"] = { > + "getopt" : "i:", > + "longopt" : "amttool-path", > + "help" : "--amttool-path=[path] Path to amttool binary", > + "required" : "0", > + "shortdesc" : "Path to amttool binary", > + "default" : "/usr/bin/amttool", similar here. Hardcoding paths is bad. Fabio ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-11-29 21:37 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1078693570.3048094.1385742338995.JavaMail.root@redhat.com> 2013-11-29 16:32 ` [Cluster-devel] [PATCH 3/3] fence_amt: option --method and new option --amttool-path Ondrej Mular 2013-11-29 21:37 ` Fabio M. Di Nitto
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).