public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* cluster: RHEL4 - [FENCE] Fixes ##485065 - Add support for LPAR/HMC v3
@ 2009-02-16 14:05 Marek Grác
  0 siblings, 0 replies; only message in thread
From: Marek Grác @ 2009-02-16 14:05 UTC (permalink / raw)
  To: cluster-cvs-relay

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=23d6ea4163025570f5e7f63b4305afc16124134a
Commit:        23d6ea4163025570f5e7f63b4305afc16124134a
Parent:        6c4a959a07ed7563cce3a38248cb60befae9bf97
Author:        Marek 'marx' Grac <mgrac@redhat.com>
AuthorDate:    Mon Feb 16 15:02:54 2009 +0100
Committer:     Marek 'marx' Grac <mgrac@redhat.com>
CommitterDate: Mon Feb 16 15:02:54 2009 +0100

[FENCE] Fixes ##485065 - Add support for LPAR/HMC v3

New options for LPAR agent: (-H; hmc-version) and (-c; command-prompt). HMC version
have to be set because v3 and v4 are not compatibile. It is possible to auto-detect
version (lshmc -V) but this is quite slow to do it in each fencing operation. Default
value is '4' because we don't want to change previous behaviour. It does not mean
that it should not work with HMC v5, v6 - we just need to mark them.

Command prompt option was set to default value but missing in device's options. Older
LPAR has different prompt so it was added to default one. If you wish to add your own
prompt that remember that $ has to be written as '\$'.
---
 fence/agents/lib/fencing.py.py  |    6 +++
 fence/agents/lpar/fence_lpar.py |   76 +++++++++++++++++++++++++-------------
 2 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 69dea07..52f1afd 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -98,6 +98,12 @@ all_opt = {
 		"getopt" : "d:",
 		"help" : "-D <version>   Force DRAC version to use",
 		"order" : 1 },
+	"hmc_version" : {
+		"getopt" : "H:",
+		"longopt" : "hmc-version",
+		"help" : "-H, --hmc-version=<version>   Force HMC version to use: 3, 4 (default)",
+		"default" : 4, 
+		"order" : 1 },
 	"ribcl" : {
 		"getopt" : "r:",
 		"help" : "-r <version>   Force ribcl version to use",
diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py
index 33ab92b..c87184c 100755
--- a/fence/agents/lpar/fence_lpar.py
+++ b/fence/agents/lpar/fence_lpar.py
@@ -22,19 +22,30 @@ BUILD_DATE=""
 #END_VERSION_GENERATION
 
 def get_power_status(conn, options):
-	try:
-		conn.send("lssyscfg -r lpar -m "+ options["-s"] +" --filter 'lpar_names=" + options["-n"] + "'\n")
-		conn.log_expect(options, options["-c"], SHELL_TIMEOUT)
-	except pexpect.EOF:
-		fail(EC_CONNECTION_LOST)
-	except pexpect.TIMEOUT:
-		fail(EC_TIMED_OUT)
+	if options["-H"] == "3":
+		try:
+			conn.send("lssyscfg -r lpar -m " + options["-s"] + " -n " + options["-n"] + " -F name,state\n")
+			conn.log_expect(options, options["-c"], SHELL_TIMEOUT)
+		except pexpect.EOF:
+			fail(EC_CONNECTION_LOST)
+		except pexpect.TIMEOUT:
+			fail(EC_TIMED_OUT)
+
+		status = re.compile("^" + options["-n"] + ",(.*?),.*$", re.IGNORECASE | re.MULTILINE).search(conn.before).group(1)
+	elif options["-H"] == "4":
+		try:
+			conn.send("lssyscfg -r lpar -m "+ options["-s"] +" --filter 'lpar_names=" + options["-n"] + "'\n")
+			conn.log_expect(options, options["-c"], SHELL_TIMEOUT)
+		except pexpect.EOF:
+			fail(EC_CONNECTION_LOST)
+		except pexpect.TIMEOUT:
+			fail(EC_TIMED_OUT)
 				
-	status = re.compile(",state=(.*?),", re.IGNORECASE).search(conn.before).group(1)
+		status = re.compile(",state=(.*?),", re.IGNORECASE).search(conn.before).group(1)
 
 	##
 	## Transformation to standard ON/OFF status if possible
-	if status in ["Running", "Open Firmware", "Shutting Down"]:
+	if status in ["Running", "Open Firmware", "Shutting Down", "Starting"]:
 		status = "on"
 	else:
 		status = "off"
@@ -42,26 +53,36 @@ def get_power_status(conn, options):
 	return status
 
 def set_power_status(conn, options):
-	try:
-		if options["-o"] == "on":
-			conn.send("chsysstate -o on -r lpar -m " + options["-s"] + 
-				" -n " + options["-n"] + 
-				" -f `lssyscfg -r lpar -F curr_profile " +
-				" -m " + options["-s"] +
-				" --filter \"lpar_names="+ options["-n"] +"\"`\n" )
-		else:
-			conn.send("chsysstate -o shutdown -r lpar --immed" +
-				" -m " + options["-s"] + " -n " + options["-n"] + "\n")		
-		conn.log_expect(options, options["-c"], POWER_TIMEOUT)
-	except pexpect.EOF:
-		fail(EC_CONNECTION_LOST)
-	except pexpect.TIMEOUT:
-		fail(EC_TIMED_OUT)
+	if options["-H"] == "3":
+		try:
+			conn.send("chsysstate -o " + options["-o"] + " -r lpar -m " + options["-s"]
+				+ " -n " + options["-n"] + "\n")
+			conn.log_expect(options, options["-c"], POWER_TIMEOUT)
+		except pexpect.EOF:
+			fail(EC_CONNECTION_LOST)
+		except pexpect.TIMEOUT:
+			fail(EC_TIMED_OUT)		
+	elif options["-H"] == "4":
+		try:
+			if options["-o"] == "on":
+				conn.send("chsysstate -o on -r lpar -m " + options["-s"] + 
+					" -n " + options["-n"] + 
+					" -f `lssyscfg -r lpar -F curr_profile " +
+					" -m " + options["-s"] +
+					" --filter \"lpar_names="+ options["-n"] +"\"`\n" )
+			else:
+				conn.send("chsysstate -o shutdown -r lpar --immed" +
+					" -m " + options["-s"] + " -n " + options["-n"] + "\n")		
+			conn.log_expect(options, options["-c"], POWER_TIMEOUT)
+		except pexpect.EOF:
+			fail(EC_CONNECTION_LOST)
+		except pexpect.TIMEOUT:
+			fail(EC_TIMED_OUT)
 
 def main():
 	device_opt = [  "help", "version", "agent", "quiet", "verbose", "debug",
 			"action", "ipaddr", "login", "passwd", "passwd_script",
-			"secure", "partition", "managed" ]
+			"secure", "partition", "managed", "hmc_version", "cmd_prompt" ]
 
 	options = check_input(device_opt, process_input(device_opt))
 
@@ -69,7 +90,7 @@ def main():
 	## Fence agent specific defaults
 	#####
 	if 0 == options.has_key("-c"):
-		options["-c"] = ":~>"
+		options["-c"] = [ ":~>", "]\$" ]
 
 	if 0 == options.has_key("-x"):
 		fail_usage("Failed: You have to use ssh connection (-x) to fence device")
@@ -80,6 +101,9 @@ def main():
         if 0 == options.has_key("-n"):
                 fail_usage("Failed: You have to enter name of the partition")
 
+	if 1 == options.has_key("-H") and (options["-H"] != "3" and options["-H"] != "4"):
+		fail_usage("Failed: You have to enter valid version number: 3 or 4")
+
 	##
 	## Operate the fencing device
 	####


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-02-16 14:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-16 14:05 cluster: RHEL4 - [FENCE] Fixes ##485065 - Add support for LPAR/HMC v3 Marek Grác

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 read-only IMAP folder(s) and NNTP newsgroup(s).