* [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).