fence-agents: RHEL6 - build: fix dist_man_* vs man_*
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=542786...
Commit: 54278678366ab2be264d634fe17a305236200188
Parent: 64a3c22205f7ee8cd1eb8dcc7ab9aafe1c8e9ee6
Author: Fabio M. Di Nitto <fdinitto(a)redhat.com>
AuthorDate: Mon Jun 4 15:43:15 2012 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Oct 4 10:47:00 2012 +0200
build: fix dist_man_* vs man_*
those man pages should be generated at build time and not part
of the release tarball
Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com>
---
fence/agents/baytech/Makefile.am | 2 +-
fence/agents/brocade/Makefile.am | 2 +-
fence/agents/bullpap/Makefile.am | 2 +-
fence/agents/cpint/Makefile.am | 2 +-
fence/agents/drac/Makefile.am | 2 +-
fence/agents/egenera/Makefile.am | 2 +-
fence/agents/ipmilan/Makefile.am | 2 +-
fence/agents/mcdata/Makefile.am | 2 +-
fence/agents/rackswitch/Makefile.am | 4 ++--
fence/agents/vixel/Makefile.am | 2 +-
fence/agents/xcat/Makefile.am | 2 +-
fence/agents/zvm/Makefile.am | 2 +-
12 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/fence/agents/baytech/Makefile.am b/fence/agents/baytech/Makefile.am
index 5288efa..c0b0b84 100644
--- a/fence/agents/baytech/Makefile.am
+++ b/fence/agents/baytech/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/brocade/Makefile.am b/fence/agents/brocade/Makefile.am
index ed3394d..3338804 100644
--- a/fence/agents/brocade/Makefile.am
+++ b/fence/agents/brocade/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/bullpap/Makefile.am b/fence/agents/bullpap/Makefile.am
index b454007..a602b5e 100644
--- a/fence/agents/bullpap/Makefile.am
+++ b/fence/agents/bullpap/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/cpint/Makefile.am b/fence/agents/cpint/Makefile.am
index e9fee26..c9680bd 100644
--- a/fence/agents/cpint/Makefile.am
+++ b/fence/agents/cpint/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/drac/Makefile.am b/fence/agents/drac/Makefile.am
index c9cdeda..392415f 100644
--- a/fence/agents/drac/Makefile.am
+++ b/fence/agents/drac/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/egenera/Makefile.am b/fence/agents/egenera/Makefile.am
index 6cd82a6..c69f805 100644
--- a/fence/agents/egenera/Makefile.am
+++ b/fence/agents/egenera/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/ipmilan/Makefile.am b/fence/agents/ipmilan/Makefile.am
index f237f92..17ac8f2 100644
--- a/fence/agents/ipmilan/Makefile.am
+++ b/fence/agents/ipmilan/Makefile.am
@@ -8,7 +8,7 @@ noinst_HEADERS = expect.h
fence_ipmilan_SOURCES = expect.c ipmilan.c
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencemanc.mk
diff --git a/fence/agents/mcdata/Makefile.am b/fence/agents/mcdata/Makefile.am
index f1a5939..54b64fc 100644
--- a/fence/agents/mcdata/Makefile.am
+++ b/fence/agents/mcdata/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/rackswitch/Makefile.am b/fence/agents/rackswitch/Makefile.am
index d2c9e1f..8c435c0 100644
--- a/fence/agents/rackswitch/Makefile.am
+++ b/fence/agents/rackswitch/Makefile.am
@@ -8,9 +8,9 @@ noinst_HEADERS = do_rack.h
fence_rackswitch_SOURCES = do_rack.c
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencemanc.mk
clean-local: clean-man
- rm -f $(TARGET)
\ No newline at end of file
+ rm -f $(TARGET)
diff --git a/fence/agents/vixel/Makefile.am b/fence/agents/vixel/Makefile.am
index 64d6010..3159e50 100644
--- a/fence/agents/vixel/Makefile.am
+++ b/fence/agents/vixel/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/xcat/Makefile.am b/fence/agents/xcat/Makefile.am
index 27c289c..ef99def 100644
--- a/fence/agents/xcat/Makefile.am
+++ b/fence/agents/xcat/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
diff --git a/fence/agents/zvm/Makefile.am b/fence/agents/zvm/Makefile.am
index 3ce3d82..2358d90 100644
--- a/fence/agents/zvm/Makefile.am
+++ b/fence/agents/zvm/Makefile.am
@@ -8,7 +8,7 @@ EXTRA_DIST = $(SRC)
sbin_SCRIPTS = $(TARGET)
-dist_man_MANS = $(TARGET).8
+man_MANS = $(TARGET).8
include $(top_srcdir)/make/fencebuild.mk
include $(top_srcdir)/make/fencemanperl.mk
11 years, 6 months
fence-agents: RHEL6 - fence_hpblade: Fence agent for HP BladeSystem
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=64a3c2...
Commit: 64a3c22205f7ee8cd1eb8dcc7ab9aafe1c8e9ee6
Parent: ff4b840516ca20fbe55a002d162d27c189261e4f
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Thu May 31 14:57:10 2012 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Oct 4 10:45:21 2012 +0200
fence_hpblade: Fence agent for HP BladeSystem
New fence agent for HP BladeSystem enclosures. Be aware that you will have to set -c / cmd_prompt as it vary a lot.
Resolves: rhbz#818337
---
configure.ac | 1 +
fence/agents/hpblade/Makefile.am | 17 +++++
fence/agents/hpblade/fence_hpblade.py | 115 +++++++++++++++++++++++++++++++++
fence/agents/lib/fencing.py.py | 3 +-
4 files changed, 135 insertions(+), 1 deletions(-)
diff --git a/configure.ac b/configure.ac
index e979675..3e71f43 100644
--- a/configure.ac
+++ b/configure.ac
@@ -262,6 +262,7 @@ AC_CONFIG_FILES([Makefile
fence/agents/eaton_snmp/Makefile
fence/agents/egenera/Makefile
fence/agents/eps/Makefile
+ fence/agents/hpblade/Makefile
fence/agents/ibmblade/Makefile
fence/agents/ifmib/Makefile
fence/agents/ilo/Makefile
diff --git a/fence/agents/hpblade/Makefile.am b/fence/agents/hpblade/Makefile.am
new file mode 100644
index 0000000..e8ae6ff
--- /dev/null
+++ b/fence/agents/hpblade/Makefile.am
@@ -0,0 +1,17 @@
+MAINTAINERCLEANFILES = Makefile.in
+
+TARGET = fence_hpblade
+
+SRC = $(TARGET).py
+
+EXTRA_DIST = $(SRC)
+
+sbin_SCRIPTS = $(TARGET)
+
+man_MANS = $(TARGET).8
+
+include $(top_srcdir)/make/fencebuild.mk
+include $(top_srcdir)/make/fenceman.mk
+
+clean-local: clean-man
+ rm -f $(TARGET)
diff --git a/fence/agents/hpblade/fence_hpblade.py b/fence/agents/hpblade/fence_hpblade.py
new file mode 100644
index 0000000..b4e9f1b
--- /dev/null
+++ b/fence/agents/hpblade/fence_hpblade.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+
+#####
+##
+## The Following Agent Has Been Tested On:
+## * BladeSystem c7000 Enclosure
+#####
+
+import sys, re, pexpect, exceptions
+sys.path.append("@FENCEAGENTSLIBDIR@")
+from fencing import *
+
+#BEGIN_VERSION_GENERATION
+RELEASE_VERSION="New Bladecenter Agent - test release on steroids"
+REDHAT_COPYRIGHT=""
+BUILD_DATE="March, 2008"
+#END_VERSION_GENERATION
+
+def get_power_status(conn, options):
+ try:
+ conn.send_eol("show server status " + options["-n"])
+ conn.log_expect(options, options["-c"] , int(options["-Y"]))
+
+ power_re = re.compile("^\s*Power: (.*?)\s*$")
+ status = "unknown"
+ for line in conn.before.splitlines():
+ res = power_re.search(line)
+ if res != None:
+ status = res.group(1)
+
+ if status == "unknown":
+ if options.has_key("-M"):
+ return "off"
+ else:
+ fail(EC_STATUS)
+ except pexpect.EOF:
+ fail(EC_CONNECTION_LOST)
+ except pexpect.TIMEOUT:
+ fail(EC_TIMED_OUT)
+
+ return status.lower().strip()
+
+def set_power_status(conn, options):
+ try:
+ if options["-o"] == "on":
+ conn.send_eol("poweron server " + options["-n"])
+ elif options["-o"] == "off":
+ conn.send_eol("poweroff server " + options["-n"] + " force")
+ conn.log_expect(options, options["-c"], int(options["-Y"]))
+ except pexpect.EOF:
+ fail(EC_CONNECTION_LOST)
+ except pexpect.TIMEOUT:
+ fail(EC_TIMED_OUT)
+
+def get_blades_list(conn, options):
+ outlets = { }
+ try:
+ conn.send_eol("show server list" )
+ conn.log_expect(options, options["-c"], int(options["-Y"]))
+
+ list_re = re.compile("^\s*(.*?)\s+(.*?)\s+(.*?)\s+OK\s+(.*?)\s+(.*?)\s*$")
+ for line in conn.before.splitlines():
+ res = list_re.search(line)
+ if res != None:
+ outlets[res.group(1)] = (res.group(2), res.group(4).lower())
+ except pexpect.EOF:
+ fail(EC_CONNECTION_LOST)
+ except pexpect.TIMEOUT:
+ fail(EC_TIMED_OUT)
+
+ return outlets
+
+def main():
+ device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug",
+ "action", "ipaddr", "login", "passwd", "passwd_script",
+ "cmd_prompt", "secure", "port", "identity_file", "separator",
+ "inet4_only", "inet6_only", "ipport", "missing_as_off",
+ "power_timeout", "shell_timeout", "login_timeout", "power_wait"]
+
+ atexit.register(atexit_handler)
+
+ all_opt["cmd_prompt"]["default"] = "c7000oa>"
+
+ options = check_input(device_opt, process_input(device_opt))
+
+ docs = { }
+ docs["shortdesc"] = "Fence agent for HP BladeSystem"
+ docs["longdesc"] = "fence_hpblade is an I/O Fencing agent \
+which can be used with HP BladeSystem. It logs into an enclosure via telnet or ssh \
+and uses the command line interface to power on and off blades."
+ docs["vendorurl"] = "http://www.hp.com"
+ show_docs(options, docs)
+
+ ##
+ ## Operate the fencing device
+ ######
+ options["eol"] = "\n"
+ conn = fence_login(options)
+ result = fence_action(conn, options, set_power_status, get_power_status, get_blades_list)
+
+ ##
+ ## Logout from system
+ ######
+ try:
+ conn.send_eol("exit")
+ conn.close()
+ except exceptions.OSError:
+ pass
+ except pexpect.ExceptionPexpect:
+ pass
+
+ sys.exit(result)
+
+if __name__ == "__main__":
+ main()
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 2a62242..a9c287a 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -867,7 +867,8 @@ def fence_login(options):
if (options.has_key("-4")):
force_ipvx="-4 "
- options["eol"] = "\r\n"
+ if (options.has_key("eol") == False):
+ options["eol"] = "\r\n"
## Do the delay of the fence device before logging in
## Delay is important for two-node clusters fencing but we do not need to delay 'status' operations
11 years, 6 months
fence-agents: RHEL6 - fence agents: autodetect of EOL in fence agents
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=ff4b84...
Commit: ff4b840516ca20fbe55a002d162d27c189261e4f
Parent: 79a412372c3ef67077d55908d5873a94f5a4a0e5
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Mon May 21 11:12:41 2012 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Oct 4 10:44:42 2012 +0200
fence agents: autodetect of EOL in fence agents
Fence agents diffes in EOL they accept. EOL \r\n is quite universal but in some cases
it is translated to \n\n what makes login process impossible to complete as it ends like
(capitals are fence agent response)
Login: USER\n
Password: \n
Login: PASSWORD\n
Until now there was a device option that handles that login_eol_lf but we found out that there are few
APC devices which does not work correctly with \r\n and needs \n. So we have to autodetect it, this feature was
added to standard library. As it can also helps with common problem when you have to write exactly
conn.send("message" + "\r\n"). Method conn.sendline("") uses EOL according to platform, so we have decided to create
new method conn.send_eol("message") which uses correct EOL. We need conn.sendline in communication with other local
application so we should not reuse it for this purpose.
Resolves: rhbz#842314
---
fence/agents/alom/fence_alom.py | 6 ++--
fence/agents/apc/fence_apc.py | 44 ++++++++++++------------
fence/agents/bladecenter/fence_bladecenter.py | 18 +++++-----
fence/agents/drac5/fence_drac5.py | 12 +++---
fence/agents/ilo_mp/fence_ilo_mp.py | 12 +++---
fence/agents/ldom/fence_ldom.py | 10 +++---
fence/agents/lib/fencing.py.py | 43 ++++++++++++++---------
fence/agents/rsa/fence_rsa.py | 6 ++--
fence/agents/rsb/fence_rsb.py | 10 +++---
fence/agents/sanbox2/fence_sanbox2.py | 32 +++++++++---------
fence/agents/wti/fence_wti.py | 2 +-
11 files changed, 102 insertions(+), 93 deletions(-)
diff --git a/fence/agents/alom/fence_alom.py b/fence/agents/alom/fence_alom.py
index 6223608..a964be5 100644
--- a/fence/agents/alom/fence_alom.py
+++ b/fence/agents/alom/fence_alom.py
@@ -18,7 +18,7 @@ BUILD_DATE=""
def get_power_status(conn, options):
result = ""
try:
- conn.sendline("showplatform")
+ conn.send_eol("showplatform")
conn.log_expect(options, options["-c"], int(options["-Y"]))
status = re.search("standby",conn.before.lower())
result=(status!=None and "off" or "on")
@@ -32,7 +32,7 @@ def get_power_status(conn, options):
def set_power_status(conn, options):
try:
cmd_line=(options["-o"]=="on" and "poweron" or "poweroff -f -y")
- conn.sendline(cmd_line)
+ conn.send_eol(cmd_line)
conn.log_expect(options, options["-c"],int(options["-g"]))
#Get the machine some time between poweron and poweroff
time.sleep(int(options["-g"]))
@@ -73,7 +73,7 @@ agent which can be used with ALOM connected machines."
# Logout from system
try:
- conn.sendline("logout")
+ conn.send_eol("logout")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py
index d10dd5f..61463d0 100644
--- a/fence/agents/apc/fence_apc.py
+++ b/fence/agents/apc/fence_apc.py
@@ -28,7 +28,7 @@ def get_power_status(conn, options):
exp_result = 0
outlets = {}
try:
- conn.send("1\r\n")
+ conn.send_eol("1")
conn.log_expect(options, options["-c"], int(options["-Y"]))
version = 0
@@ -57,15 +57,15 @@ def get_power_status(conn, options):
if switch == 0:
if version == 2:
if admin == 0:
- conn.send("2\r\n")
+ conn.send_eol("2")
else:
- conn.send("3\r\n")
+ conn.send_eol("3")
else:
- conn.send("2\r\n")
+ conn.send_eol("2")
conn.log_expect(options, options["-c"], int(options["-Y"]))
- conn.send("1\r\n")
+ conn.send_eol("1")
else:
- conn.send(options["-s"]+"\r\n")
+ conn.send_eol(options["-s"])
while True:
exp_result = conn.log_expect(options, [ options["-c"], "Press <ENTER>" ], int(options["-Y"]))
@@ -75,7 +75,7 @@ def get_power_status(conn, options):
res = show_re.search(x)
if (res != None):
outlets[res.group(2)] = (res.group(3), res.group(4))
- conn.send("\r\n")
+ conn.send_eol("")
if exp_result == 0:
break
conn.send(chr(03))
@@ -102,7 +102,7 @@ def set_power_status(conn, options):
}[options["-o"]]
try:
- conn.send("1\r\n")
+ conn.send_eol("1")
conn.log_expect(options, options["-c"], int(options["-Y"]))
version = 0
@@ -137,41 +137,41 @@ def set_power_status(conn, options):
if switch == 0:
if version == 2:
if admin2 == 0:
- conn.send("2\r\n")
+ conn.send_eol("2")
else:
- conn.send("3\r\n")
+ conn.send_eol("3")
else:
- conn.send("2\r\n")
+ conn.send_eol("2")
conn.log_expect(options, options["-c"], int(options["-Y"]))
if (None == re.compile('.*2- Outlet Restriction.*', re.IGNORECASE | re.S).match(conn.before)):
admin3 = 0
else:
admin3 = 1
- conn.send("1\r\n")
+ conn.send_eol("1")
else:
- conn.send(options["-s"] + "\r\n")
+ conn.send_eol(options["-s"])
while 1 == conn.log_expect(options, [ options["-c"], "Press <ENTER>" ], int(options["-Y"])):
- conn.send("\r\n")
- conn.send(options["-n"]+"\r\n")
+ conn.send_eol("")
+ conn.send_eol(options["-n"]+"")
conn.log_expect(options, options["-c"], int(options["-Y"]))
if switch == 0:
if admin2 == 1:
- conn.send("1\r\n")
+ conn.send_eol("1")
conn.log_expect(options, options["-c"], int(options["-Y"]))
if admin3 == 1:
- conn.send("1\r\n")
+ conn.send_eol("1")
conn.log_expect(options, options["-c"], int(options["-Y"]))
else:
- conn.send("1\r\n")
+ conn.send_eol("1")
conn.log_expect(options, options["-c"], int(options["-Y"]))
- conn.send(action+"\r\n")
+ conn.send_eol(action)
conn.log_expect(options, "Enter 'YES' to continue or <ENTER> to cancel :", int(options["-Y"]))
- conn.send("YES\r\n")
+ conn.send_eol("YES")
conn.log_expect(options, "Press <ENTER> to continue...", int(options["-Y"]))
- conn.send("\r\n")
+ conn.send_eol("")
conn.log_expect(options, options["-c"], int(options["-Y"]))
conn.send(chr(03))
conn.log_expect(options, "- Logout", int(options["-Y"]))
@@ -230,7 +230,7 @@ will block any necessary fencing actions."
## a problem because everything is checked before.
######
try:
- conn.sendline("4")
+ conn.send_eol("4")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/bladecenter/fence_bladecenter.py b/fence/agents/bladecenter/fence_bladecenter.py
index c699b75..958ceb0 100644
--- a/fence/agents/bladecenter/fence_bladecenter.py
+++ b/fence/agents/bladecenter/fence_bladecenter.py
@@ -26,7 +26,7 @@ def get_power_status(conn, options):
try:
node_cmd = "system:blade\[" + options["-n"] + "\]>"
- conn.send("env -T system:blade[" + options["-n"] + "]\r\n")
+ conn.send_eol("env -T system:blade[" + options["-n"] + "]")
i = conn.log_expect(options, [ node_cmd, "system>" ] , int(options["-Y"]))
if i == 1:
## Given blade number does not exist
@@ -34,10 +34,10 @@ def get_power_status(conn, options):
return "off"
else:
fail(EC_STATUS)
- conn.send("power -state\r\n")
+ conn.send_eol("power -state")
conn.log_expect(options, node_cmd, int(options["-Y"]))
status = conn.before.splitlines()[-1]
- conn.send("env -T system\r\n")
+ conn.send_eol("env -T system")
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -55,7 +55,7 @@ def set_power_status(conn, options):
try:
node_cmd = "system:blade\[" + options["-n"] + "\]>"
- conn.send("env -T system:blade[" + options["-n"] + "]\r\n")
+ conn.send_eol("env -T system:blade[" + options["-n"] + "]")
i = conn.log_expect(options, [ node_cmd, "system>" ] , int(options["-Y"]))
if i == 1:
## Given blade number does not exist
@@ -64,9 +64,9 @@ def set_power_status(conn, options):
else:
fail(EC_GENERIC_ERROR)
- conn.send("power -"+options["-o"]+"\r\n")
+ conn.send_eol("power -"+options["-o"])
conn.log_expect(options, node_cmd, int(options["-Y"]))
- conn.send("env -T system\r\n")
+ conn.send_eol("env -T system")
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -78,9 +78,9 @@ def get_blades_list(conn, options):
try:
node_cmd = "system>"
- conn.send("env -T system\r\n")
+ conn.send_eol("env -T system")
conn.log_expect(options, node_cmd, int(options["-Y"]))
- conn.send("list -l 2\r\n")
+ conn.send_eol("list -l 2")
conn.log_expect(options, node_cmd, int(options["-Y"]))
lines = conn.before.split("\r\n")
@@ -130,7 +130,7 @@ and uses the command line interface to power on and off blades."
## Logout from system
######
try:
- conn.send("exit\r\n")
+ conn.send_eol("exit")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/drac5/fence_drac5.py b/fence/agents/drac5/fence_drac5.py
index f3102cd..3e9a8d2 100644
--- a/fence/agents/drac5/fence_drac5.py
+++ b/fence/agents/drac5/fence_drac5.py
@@ -25,9 +25,9 @@ BUILD_DATE="March, 2008"
def get_power_status(conn, options):
try:
if options["model"] == "DRAC CMC":
- conn.sendline("racadm serveraction powerstatus -m " + options["-m"])
+ conn.send_eol("racadm serveraction powerstatus -m " + options["-m"])
elif options["model"] == "DRAC 5":
- conn.sendline("racadm serveraction powerstatus")
+ conn.send_eol("racadm serveraction powerstatus")
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
@@ -49,9 +49,9 @@ def set_power_status(conn, options):
try:
if options["model"] == "DRAC CMC":
- conn.sendline("racadm serveraction " + action + " -m " + options["-m"])
+ conn.send_eol("racadm serveraction " + action + " -m " + options["-m"])
elif options["model"] == "DRAC 5":
- conn.sendline("racadm serveraction " + action)
+ conn.send_eol("racadm serveraction " + action)
conn.log_expect(options, options["-c"], int(options["-g"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -63,7 +63,7 @@ def get_list_devices(conn, options):
try:
if options["model"] == "DRAC CMC":
- conn.sendline("getmodinfo")
+ conn.send_eol("getmodinfo")
list_re = re.compile("^([^\s]*?)\s+Present\s*(ON|OFF)\s*.*$")
conn.log_expect(options, options["-c"], int(options["-g"]))
@@ -133,7 +133,7 @@ By default, the telnet interface is not enabled."
## Logout from system
######
try:
- conn.sendline("exit")
+ conn.send_eol("exit")
time.sleep(1)
conn.close()
except exceptions.OSError:
diff --git a/fence/agents/ilo_mp/fence_ilo_mp.py b/fence/agents/ilo_mp/fence_ilo_mp.py
index 1618216..3af3048 100644
--- a/fence/agents/ilo_mp/fence_ilo_mp.py
+++ b/fence/agents/ilo_mp/fence_ilo_mp.py
@@ -12,7 +12,7 @@ BUILD_DATE=""
def get_power_status(conn, options):
try:
- conn.send("show /system1\r\n")
+ conn.send_eol("show /system1")
re_state = re.compile('EnabledState=(.*)', re.IGNORECASE)
conn.log_expect(options, re_state, int(options["-Y"]))
@@ -31,9 +31,9 @@ def get_power_status(conn, options):
def set_power_status(conn, options):
try:
if options["-o"] == "on":
- conn.send("start /system1\r\n")
+ conn.send_eol("start /system1")
else:
- conn.send("stop -f /system1\r\n")
+ conn.send_eol("stop -f /system1")
conn.log_expect(options, options["-c"], int(options["-g"]))
@@ -46,7 +46,7 @@ def set_power_status(conn, options):
def main():
device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug",
"action", "ipaddr", "login", "passwd", "passwd_script",
- "secure", "identity_file", "cmd_prompt", "ipport", "login_eol_lf",
+ "secure", "identity_file", "cmd_prompt", "ipport",
"separator", "inet4_only", "inet6_only",
"power_timeout", "shell_timeout", "login_timeout", "power_wait" ]
@@ -64,7 +64,7 @@ def main():
show_docs(options, docs)
conn = fence_login(options)
- conn.send("SMCLP\r\n")
+ conn.send_eol("SMCLP")
##
## Fence operations
@@ -72,7 +72,7 @@ def main():
result = fence_action(conn, options, set_power_status, get_power_status)
try:
- conn.send("exit\r\n")
+ conn.send_eol("exit")
except exceptions.OSError:
pass
except pexpect.ExceptionPexpect:
diff --git a/fence/agents/ldom/fence_ldom.py b/fence/agents/ldom/fence_ldom.py
index 507a97a..c971c04 100644
--- a/fence/agents/ldom/fence_ldom.py
+++ b/fence/agents/ldom/fence_ldom.py
@@ -22,11 +22,11 @@ COMMAND_PROMPT_NEW="[PEXPECT]"
# Start comunicating after login. Prepare good environment.
def start_communication(conn, options):
- conn.sendline ("PS1='"+COMMAND_PROMPT_NEW+"'")
+ conn.send_eol ("PS1='"+COMMAND_PROMPT_NEW+"'")
res=conn.expect([pexpect.TIMEOUT, COMMAND_PROMPT_REG],int(options["-Y"]))
if res==0:
#CSH stuff
- conn.sendline("set prompt='"+COMMAND_PROMPT_NEW+"'")
+ conn.send_eol("set prompt='"+COMMAND_PROMPT_NEW+"'")
conn.log_expect(options, COMMAND_PROMPT_REG,int(options["-Y"]))
@@ -34,7 +34,7 @@ def get_power_status(conn, options):
try:
start_communication(conn,options)
- conn.sendline("ldm ls")
+ conn.send_eol("ldm ls")
conn.log_expect(options,COMMAND_PROMPT_REG,int(options["-Y"]))
@@ -71,7 +71,7 @@ def set_power_status(conn, options):
cmd_line="ldm "+(options["-o"]=="on" and "start" or "stop -f")+" \""+options["-n"]+"\""
- conn.sendline(cmd_line)
+ conn.send_eol(cmd_line)
conn.log_expect(options,COMMAND_PROMPT_REG,int(options["-g"]))
@@ -126,7 +126,7 @@ root. Than prompt is $, so again, you must use parameter -c."
## Logout from system
######
try:
- conn.sendline("logout")
+ conn.send_eol("logout")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 5748391..2a62242 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -175,11 +175,6 @@ all_opt = {
"required" : "0",
"shortdesc" : "Force ribcl version to use",
"order" : 1 },
- "login_eol_lf" : {
- "getopt" : "",
- "help" : "",
- "order" : 1
- },
"cmd_prompt" : {
"getopt" : "c:",
"longopt" : "command-prompt",
@@ -407,12 +402,20 @@ all_opt = {
common_opt = [ "retry_on", "delay" ]
class fspawn(pexpect.spawn):
+ def __init__(self, options, command):
+ pexpect.spawn.__init__(self, command)
+ self.opt = options
+
def log_expect(self, options, pattern, timeout):
result = self.expect(pattern, timeout)
if options["log"] >= LOG_MODE_VERBOSE:
options["debug_fh"].write(self.before + self.after)
return result
+ # send EOL according to what was detected in login process (telnet)
+ def send_eol(self, message):
+ self.send(message + self.opt["eol"])
+
def atexit_handler():
try:
sys.stdout.close()
@@ -864,10 +867,7 @@ def fence_login(options):
if (options.has_key("-4")):
force_ipvx="-4 "
- if (options["device_opt"].count("login_eol_lf")):
- login_eol = "\n"
- else:
- login_eol = "\r\n"
+ options["eol"] = "\r\n"
## Do the delay of the fence device before logging in
## Delay is important for two-node clusters fencing but we do not need to delay 'status' operations
@@ -881,7 +881,7 @@ def fence_login(options):
if options.has_key("-z"):
command = '%s %s %s %s' % (SSL_PATH, force_ipvx, options["-a"], options["-u"])
try:
- conn = fspawn(command)
+ conn = fspawn(options, command)
except pexpect.ExceptionPexpect, ex:
## SSL telnet is part of the fencing package
sys.stderr.write(str(ex) + "\n")
@@ -891,7 +891,7 @@ def fence_login(options):
if options.has_key("ssh_options"):
command += ' ' + options["ssh_options"]
try:
- conn = fspawn(command)
+ conn = fspawn(options, command)
except pexpect.ExceptionPexpect, ex:
sys.stderr.write(str(ex) + "\n")
sys.stderr.write("Due to limitations, binary dependencies on fence agents "
@@ -920,7 +920,7 @@ def fence_login(options):
if options.has_key("ssh_options"):
command += ' ' + options["ssh_options"]
try:
- conn = fspawn(command)
+ conn = fspawn(options, command)
except pexpect.ExceptionPexpect, ex:
sys.stderr.write(str(ex) + "\n")
sys.stderr.write("Due to limitations, binary dependencies on fence agents "
@@ -939,7 +939,7 @@ def fence_login(options):
fail_usage("Failed: You have to enter passphrase (-p) for identity file")
else:
try:
- conn = fspawn(TELNET_PATH)
+ conn = fspawn(options, TELNET_PATH)
conn.send("set binary\n")
conn.send("open %s -%s\n"%(options["-a"], options["-u"]))
except pexpect.ExceptionPexpect, ex:
@@ -948,11 +948,20 @@ def fence_login(options):
"are not in the spec file and must be installed separately." + "\n")
sys.exit(EC_GENERIC_ERROR)
- conn.log_expect(options, re_login, int(options["-y"]))
- conn.send(options["-l"] + login_eol)
- conn.log_expect(options, re_pass, int(options["-Y"]))
+ result = conn.log_expect(options, re_login, int(options["-y"]))
+ conn.send_eol(options["-l"])
+
+ ## automatically change end of line separator
+ screen = conn.read_nonblocking(size=100, timeout=int(options["-Y"]))
+ if (re_login.search(screen) != None):
+ options["eol"] = "\n"
+ conn.send_eol(options["-l"])
+ result = conn.log_expect(options, re_pass, int(options["-y"]))
+ elif (re_pass.search(screen) == None):
+ conn.log_expect(options, re_pass, int(options["-Y"]))
+
try:
- conn.send(options["-p"] + login_eol)
+ conn.send_eol(options["-p"])
conn.log_expect(options, options["-c"], int(options["-Y"]))
except KeyError:
fail(EC_PASSWORD_MISSING)
diff --git a/fence/agents/rsa/fence_rsa.py b/fence/agents/rsa/fence_rsa.py
index 845bddb..e9f87cd 100644
--- a/fence/agents/rsa/fence_rsa.py
+++ b/fence/agents/rsa/fence_rsa.py
@@ -19,7 +19,7 @@ BUILD_DATE=""
def get_power_status(conn, options):
try:
- conn.send("power state\r\n")
+ conn.send_eol("power state")
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -36,7 +36,7 @@ def get_power_status(conn, options):
def set_power_status(conn, options):
try:
- conn.send("power " + options["-o"] + "\r\n")
+ conn.send_eol("power " + options["-o"])
conn.log_expect(options, options["-c"], int(options["-g"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -84,7 +84,7 @@ will block any necessary fencing actions."
## Logout from system
######
try:
- conn.sendline("exit")
+ conn.send_eol("exit")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/rsb/fence_rsb.py b/fence/agents/rsb/fence_rsb.py
index fe1ec60..7ce1906 100755
--- a/fence/agents/rsb/fence_rsb.py
+++ b/fence/agents/rsb/fence_rsb.py
@@ -33,13 +33,13 @@ def set_power_status(conn, options):
try:
conn.send("2")
conn.log_expect(options, options["-c"], int(options["-Y"]))
- conn.sendline(action)
+ conn.send_eol(action)
conn.log_expect(options, ["want to power off", "'yes' or 'no'"], int(options["-Y"]))
- conn.send("yes\r")
+ conn.send_eol("yes")
conn.log_expect(options, "any key to continue", int(options["-g"]))
- conn.send("\r")
+ conn.send_eol("")
conn.log_expect(options, options["-c"], int(options["-Y"]))
- conn.sendline("0")
+ conn.send_eol("0")
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
@@ -100,7 +100,7 @@ will block any necessary fencing actions."
## a problem because everything is checked before.
######
try:
- conn.sendline("0")
+ conn.send_eol("0")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/sanbox2/fence_sanbox2.py b/fence/agents/sanbox2/fence_sanbox2.py
index 47f3bc8..92c5d4a 100644
--- a/fence/agents/sanbox2/fence_sanbox2.py
+++ b/fence/agents/sanbox2/fence_sanbox2.py
@@ -24,14 +24,14 @@ def get_power_status(conn, options):
'offline' : "off"
}
try:
- conn.send("show port " + options["-n"] + "\n")
+ conn.send_eol("show port " + options["-n"])
conn.log_expect(options, options["-c"], int(options["-Y"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
except pexpect.TIMEOUT:
try:
- conn.send("admin end\n")
- conn.send("exit\n")
+ conn.send_eol("admin end")
+ conn.send_eol("exit")
conn.close()
except:
pass
@@ -51,28 +51,28 @@ def set_power_status(conn, options):
}[options["-o"]]
try:
- conn.send("set port " + options["-n"] + " state " + action + "\n")
+ conn.send_eol("set port " + options["-n"] + " state " + action)
conn.log_expect(options, options["-c"], int(options["-g"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
except pexpect.TIMEOUT:
try:
- conn.send("admin end\n")
- conn.send("exit\n")
+ conn.send_eol("admin end")
+ conn.send_eol("exit")
conn.close()
except:
pass
fail(EC_TIMED_OUT)
try:
- conn.send("set port " + options["-n"] + " state " + action + "\n")
+ conn.send_eol("set port " + options["-n"] + " state " + action)
conn.log_expect(options, options["-c"], int(options["-g"]))
except pexpect.EOF:
fail(EC_CONNECTION_LOST)
except pexpect.TIMEOUT:
try:
- conn.send("admin end\n")
- conn.send("exit\n")
+ conn.send_eol("admin end")
+ conn.send_eol("exit")
conn.close()
except:
pass
@@ -82,7 +82,7 @@ def get_list_devices(conn, options):
outlets = { }
try:
- conn.send("show port" + "\n")
+ conn.send_eol("show port")
conn.log_expect(options, options["-c"], int(options["-Y"]))
list_re = re.compile("^\s+(\d+?)\s+(Online|Offline)\s+", re.IGNORECASE)
@@ -98,8 +98,8 @@ def get_list_devices(conn, options):
fail(EC_CONNECTION_LOST)
except pexpect.TIMEOUT:
try:
- conn.send("admin end\n")
- conn.send("exit\n")
+ conn.send_eol("admin end")
+ conn.send_eol("exit")
conn.close()
except:
pass
@@ -110,7 +110,7 @@ def get_list_devices(conn, options):
def main():
device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug",
"io_fencing", "ipaddr", "login", "passwd", "passwd_script",
- "cmd_prompt", "port", "ipport", "login_eol_lf", "separator",
+ "cmd_prompt", "port", "ipport", "separator",
"power_timeout", "shell_timeout", "login_timeout", "power_wait" ]
atexit.register(atexit_handler)
@@ -138,7 +138,7 @@ because the connection will block any necessary fencing actions."
##
conn = fence_login(options)
- conn.send("admin start\n")
+ conn.send_eol("admin start")
conn.log_expect(options, options["-c"], int(options["-Y"]))
if (re.search("\(admin\)", conn.before, re.MULTILINE) == None):
@@ -153,8 +153,8 @@ because the connection will block any necessary fencing actions."
## Logout from system
######
try:
- conn.send("admin end\n")
- conn.send("exit\n")
+ conn.send_eol("admin end")
+ conn.send_eol("exit\n")
conn.close()
except exceptions.OSError:
pass
diff --git a/fence/agents/wti/fence_wti.py b/fence/agents/wti/fence_wti.py
index 8caa4c2..b7c41f3 100644
--- a/fence/agents/wti/fence_wti.py
+++ b/fence/agents/wti/fence_wti.py
@@ -124,7 +124,7 @@ is running because the connection will block any necessary fencing actions."
if 0 == options.has_key("-x"):
try:
try:
- conn = fspawn(TELNET_PATH)
+ conn = fspawn(options, TELNET_PATH)
conn.send("set binary\n")
conn.send("open %s -%s\n"%(options["-a"], options["-u"]))
except pexpect.ExceptionPexpect, ex:
11 years, 6 months
fence-agents: RHEL6 - fence agents: Fix unique attribute for agents which are not based on fencing library
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=79a412...
Commit: 79a412372c3ef67077d55908d5873a94f5a4a0e5
Parent: fdb96874c75600864048a752c08aa1e45d2cc534
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Mon May 21 10:16:02 2012 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Oct 4 10:41:25 2012 +0200
fence agents: Fix unique attribute for agents which are not based on fencing library
Resolves: rhbz#822507
---
fence/agents/brocade/fence_brocade.pl | 14 +++++++-------
fence/agents/drac/fence_drac.pl | 22 +++++++++++-----------
fence/agents/egenera/fence_egenera.pl | 14 +++++++-------
fence/agents/kdump/fence_kdump.c | 16 ++++++++--------
fence/agents/scsi/fence_scsi.pl | 12 ++++++------
5 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/fence/agents/brocade/fence_brocade.pl b/fence/agents/brocade/fence_brocade.pl
index c820779..e3d1612 100644
--- a/fence/agents/brocade/fence_brocade.pl
+++ b/fence/agents/brocade/fence_brocade.pl
@@ -84,37 +84,37 @@ After a fence operation has taken place the fenced machine can no longer connec
</longdesc>
<vendor-url>http://www.brocade.com</vendor-url>
<parameters>
- <parameter name="action" unique="1" required="1">
+ <parameter name="action" unique="0" required="1">
<getopt mixed="-o <action>" />
<content type="string" default="disable" />
<shortdesc lang="en">Fencing Action</shortdesc>
</parameter>
- <parameter name="ipaddr" unique="1" required="1">
+ <parameter name="ipaddr" unique="0" required="1">
<getopt mixed="-a <ip>" />
<content type="string" />
<shortdesc lang="en">IP Address or Hostname</shortdesc>
</parameter>
- <parameter name="login" unique="1" required="1">
+ <parameter name="login" unique="0" required="1">
<getopt mixed="-l <name>" />
<content type="string" />
<shortdesc lang="en">Login Name</shortdesc>
</parameter>
- <parameter name="passwd" unique="1" required="0">
+ <parameter name="passwd" unique="0" required="0">
<getopt mixed="-p <password>" />
<content type="string" />
<shortdesc lang="en">Login password or passphrase</shortdesc>
</parameter>
- <parameter name="passwd_script" unique="1" required="0">
+ <parameter name="passwd_script" unique="0" required="0">
<getopt mixed="-S <script>" />
<content type="string" />
<shortdesc lang="en">Script to retrieve password</shortdesc>
</parameter>
- <parameter name="port" unique="1" required="1">
+ <parameter name="port" unique="0" required="1">
<getopt mixed="-n <id>" />
<content type="string" />
<shortdesc lang="en">Physical plug number or name of virtual machine</shortdesc>
</parameter>
- <parameter name="help" unique="1" required="0">
+ <parameter name="help" unique="0" required="0">
<getopt mixed="-h" />
<content type="string" />
<shortdesc lang="en">Display help and exit</shortdesc>
diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl
index 5e1b966..825391f 100644
--- a/fence/agents/drac/fence_drac.pl
+++ b/fence/agents/drac/fence_drac.pl
@@ -143,57 +143,57 @@ fence_drac is an I/O Fencing agent which can be used with the Dell Remote Access
</longdesc>
<vendor-url>http://www.dell.com</vendor-url>
<parameters>
- <parameter name="action" unique="1" required="1">
+ <parameter name="action" unique="0" required="1">
<getopt mixed="-o <action>" />
<content type="string" default="reboot" />
<shortdesc lang="en">Fencing Action</shortdesc>
</parameter>
- <parameter name="ipaddr" unique="1" required="1">
+ <parameter name="ipaddr" unique="0" required="1">
<getopt mixed="-a <ip>" />
<content type="string" />
<shortdesc lang="en">IP Address or Hostname</shortdesc>
</parameter>
- <parameter name="login" unique="1" required="1">
+ <parameter name="login" unique="0" required="1">
<getopt mixed="-l <name>" />
<content type="string" />
<shortdesc lang="en">Login Name</shortdesc>
</parameter>
- <parameter name="passwd" unique="1" required="0">
+ <parameter name="passwd" unique="0" required="0">
<getopt mixed="-p <password>" />
<content type="string" />
<shortdesc lang="en">Login password or passphrase</shortdesc>
</parameter>
- <parameter name="passwd_script" unique="1" required="0">
+ <parameter name="passwd_script" unique="0" required="0">
<getopt mixed="-S <script>" />
<content type="string" />
<shortdesc lang="en">Script to retrieve password</shortdesc>
</parameter>
- <parameter name="cmd_prompt" unique="1" required="0">
+ <parameter name="cmd_prompt" unique="0" required="0">
<getopt mixed="-c <prompt>" />
<content type="string" />
<shortdesc lang="en">Force fence_drac to use cmd_prompt as the command prompt</shortdesc>
</parameter>
- <parameter name="drac_version" unique="1" required="0">
+ <parameter name="drac_version" unique="0" required="0">
<getopt mixed="-d <version>" />
<content type="string" />
<shortdesc lang="en">Force fence_drac to treat the device as though it was for the specified drac version</shortdesc>
</parameter>
- <parameter name="module_name" unique="1" required="0">
+ <parameter name="module_name" unique="0" required="0">
<getopt mixed="-m <modulename>" />
<content type="string"/>
<shortdesc lang="en">The module name of the blade when using DRAC/MC firmware.</shortdesc>
</parameter>
- <parameter name="debug" unique="1" required="0">
+ <parameter name="debug" unique="0" required="0">
<getopt mixed="-D <dumpfile>" />
<content type="string"/>
<shortdesc lang="en">Debug file of the telnet interaction</shortdesc>
</parameter>
- <parameter name="delay" unique="1" required="0">
+ <parameter name="delay" unique="0" required="0">
<getopt mixed="-f <seconds>" />
<content type="string" default="0"/>
<shortdesc lang="en">Wait X seconds before fencing is started</shortdesc>
</parameter>
- <parameter name="help" unique="1" required="0">
+ <parameter name="help" unique="0" required="0">
<getopt mixed="-h" />
<content type="string" />
<shortdesc lang="en">Display help and exit</shortdesc>
diff --git a/fence/agents/egenera/fence_egenera.pl b/fence/agents/egenera/fence_egenera.pl
index 6270cee..30eaca1 100644
--- a/fence/agents/egenera/fence_egenera.pl
+++ b/fence/agents/egenera/fence_egenera.pl
@@ -83,37 +83,37 @@ fence_egenera is an I/O Fencing agent which can be used with the Egenera Blade
</longdesc>
<vendor-url>http://www.bull.com</vendor-url>
<parameters>
- <parameter name="action" unique="1" required="1">
+ <parameter name="action" unique="0" required="1">
<getopt mixed="-o <action>" />
<content type="string" default="reboot" />
<shortdesc lang="en">Fencing Action</shortdesc>
</parameter>
- <parameter name="cserver" unique="1" required="1">
+ <parameter name="cserver" unique="0" required="1">
<getopt mixed="-c <cserver>" />
<content type="string" />
<shortdesc lang="en">The cserver to ssh to. cserver can be in the form user@hostname to specify a different user to login as.</shortdesc>
</parameter>
- <parameter name="pserver" unique="1" required="1">
+ <parameter name="pserver" unique="0" required="1">
<getopt mixed="-p <pserver>" />
<content type="string" />
<shortdesc lang="en">The pserver to operate on.</shortdesc>
</parameter>
- <parameter name="user" unique="1" required="1">
+ <parameter name="user" unique="0" required="1">
<getopt mixed="-u <name>" />
<content type="string" default="root" />
<shortdesc lang="en">Login Name</shortdesc>
</parameter>
- <parameter name="lpan" unique="1" required="1">
+ <parameter name="lpan" unique="0" required="1">
<getopt mixed="-l <lpan>" />
<content type="string" />
<shortdesc lang="en">The lpan to operate on.</shortdesc>
</parameter>
- <parameter name="delay" unique="1" required="0">
+ <parameter name="delay" unique="0" required="0">
<getopt mixed="-f <seconds>" />
<content type="string" default="0"/>
<shortdesc lang="en">Wait X seconds before fencing is started</shortdesc>
</parameter>
- <parameter name="help" unique="1" required="0">
+ <parameter name="help" unique="0" required="0">
<getopt mixed="-h" />
<content type="string" />
<shortdesc lang="en">Display help and exit</shortdesc>
diff --git a/fence/agents/kdump/fence_kdump.c b/fence/agents/kdump/fence_kdump.c
index e224db3..fa1f6a4 100644
--- a/fence/agents/kdump/fence_kdump.c
+++ b/fence/agents/kdump/fence_kdump.c
@@ -181,56 +181,56 @@ do_action_metadata (const char *self)
fprintf (stdout, "<parameters>\n");
- fprintf (stdout, "\t<parameter name=\"nodename\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"nodename\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-n, --nodename\" />\n");
fprintf (stdout, "\t\t<content type=\"string\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Name or IP address of node to be fenced");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"ipport\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"ipport\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-p, --ipport\" />\n");
fprintf (stdout, "\t\t<content type=\"string\" default=\"7410\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Port number");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"family\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"family\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-f, --family\" />\n");
fprintf (stdout, "\t\t<content type=\"string\" default=\"auto\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Network family");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"action\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"action\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-o, --action\" />\n");
fprintf (stdout, "\t\t<content type=\"string\" default=\"off\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Fencing action");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"timeout\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"timeout\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-t, --timeout\" />\n");
fprintf (stdout, "\t\t<content type=\"string\" default=\"60\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Timeout in seconds");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"verbose\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"verbose\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-v, --verbose\" />\n");
fprintf (stdout, "\t\t<content type=\"boolean\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Print verbose output");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"version\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"version\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-V, --version\" />\n");
fprintf (stdout, "\t\t<content type=\"boolean\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
"Print version");
fprintf (stdout, "\t</parameter>\n");
- fprintf (stdout, "\t<parameter name=\"usage\" unique=\"1\" required=\"0\">\n");
+ fprintf (stdout, "\t<parameter name=\"usage\" unique=\"0\" required=\"0\">\n");
fprintf (stdout, "\t\t<getopt mixed=\"-h, --help\" />\n");
fprintf (stdout, "\t\t<content type=\"boolean\" />\n");
fprintf (stdout, "\t\t<shortdesc lang=\"en\">%s</shortdesc>\n",
diff --git a/fence/agents/scsi/fence_scsi.pl b/fence/agents/scsi/fence_scsi.pl
index 87a599c..ef7d14d 100644
--- a/fence/agents/scsi/fence_scsi.pl
+++ b/fence/agents/scsi/fence_scsi.pl
@@ -702,42 +702,42 @@ sub print_metadata ()
" shortdesc=\"fence agent for SCSI-3 persistent reservations\">\n";
print "<longdesc>fence_scsi</longdesc>\n";
print "<parameters>\n";
- print "\t<parameter name=\"aptpl\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"aptpl\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-a\"/>\n";
print "\t\t<content type=\"boolean\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
"Use APTPL flag for registrations" .
"</shortdesc>\n";
print "\t</parameter>\n";
- print "\t<parameter name=\"devices\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"devices\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-d\"/>\n";
print "\t\t<content type=\"string\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
"List of devices to be used for fencing action" .
"</shortdesc>\n";
print "\t</parameter>\n";
- print "\t<parameter name=\"logfile\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"logfile\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-f\"/>\n";
print "\t\t<content type=\"string\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
"File to write error/debug messages" .
"</shortdesc>\n";
print "\t</parameter>\n";
- print "\t<parameter name=\"key\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"key\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-k\"/>\n";
print "\t\t<content type=\"string\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
"Key value to be used for fencing action" .
"</shortdesc>\n";
print "\t</parameter>\n";
- print "\t<parameter name=\"action\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"action\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-o\"/>\n";
print "\t\t<content type=\"string\" default=\"off\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
"Fencing action" .
"</shortdesc>\n";
print "\t</parameter>\n";
- print "\t<parameter name=\"nodename\" unique=\"1\" required=\"0\">\n";
+ print "\t<parameter name=\"nodename\" unique=\"0\" required=\"0\">\n";
print "\t\t<getopt mixed=\"-n\"/>\n";
print "\t\t<content type=\"string\"/>\n";
print "\t\t<shortdesc lang=\"en\">" .
11 years, 6 months
cluster: RHEL6 - rgmanager: Fix for deadlock
by Ryan McCabe
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=8d3265089fc...
Commit: 8d3265089fcb45cb6653c2c6947f78ab9e996be5
Parent: de3d3adfc52c0872e9576dc3119fc61d6fc414bb
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Thu Sep 27 15:08:52 2012 -0400
Committer: Ryan McCabe <rmccabe(a)redhat.com>
CommitterDate: Wed Oct 3 02:31:56 2012 -0400
rgmanager: Fix for deadlock
This patch fixes a deadlock in rgmanager that could occur when a node
starts rgmanager while a service is recovering.
Resolves: rhbz#861157
Acked-by: Lon Hohberger <lhh(a)redhat.com>
Signed-off-by: Ryan McCabe <rmccabe(a)redhat.com>
---
rgmanager/src/daemons/rg_state.c | 1 +
rgmanager/src/daemons/rg_thread.c | 19 ++++++++++++++++++-
rgmanager/src/daemons/service_op.c | 1 +
3 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 8c5af5b..80e8667 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -1963,6 +1963,7 @@ retry:
/* Deliberate */
case RG_EDEPEND:
case RG_EFAIL:
+ case RG_EDEADLCK:
/* Uh oh - we failed to relocate to this node.
ensure that we tell the next node to start it from
the 'recovering' state. */
diff --git a/rgmanager/src/daemons/rg_thread.c b/rgmanager/src/daemons/rg_thread.c
index 72b5f96..5e551c3 100644
--- a/rgmanager/src/daemons/rg_thread.c
+++ b/rgmanager/src/daemons/rg_thread.c
@@ -9,6 +9,8 @@
#include <rg_queue.h>
#include <assert.h>
#include <members.h>
+#include <liblogthread.h>
+
/**
* Resource thread list entry.
@@ -735,13 +737,28 @@ rt_enqueue_request(const char *resgroupname, int request,
ret = 0;
break;
}
- fprintf(stderr, "Failed to queue request: Would block\n");
/* EWOULDBLOCK */
pthread_mutex_unlock(resgroup->rt_queue_mutex);
pthread_mutex_unlock(&reslist_mutex);
+ logt_print(LOG_DEBUG,
+ "Failed to queue %d request for %s: Would block\n",
+ request, resgroupname);
return ret;
}
+ if (resgroup->rt_request == RG_START &&
+ (request == RG_START_REMOTE || request == RG_START_RECOVER)) {
+ send_ret(response_ctx, resgroup->rt_name, RG_EDEADLCK,
+ request, 0);
+ msg_free_ctx(response_ctx);
+ pthread_mutex_unlock(resgroup->rt_queue_mutex);
+ pthread_mutex_unlock(&reslist_mutex);
+ logt_print(LOG_DEBUG,
+ "Failed to queue %d request for %s: Would block\n",
+ request, resgroupname);
+ return -1;
+ }
+
ret = rq_queue_request(resgroup->rt_queue, resgroup->rt_name,
request, 0, 0, response_ctx, 0, target,
arg0, arg1);
diff --git a/rgmanager/src/daemons/service_op.c b/rgmanager/src/daemons/service_op.c
index f094129..4b74427 100644
--- a/rgmanager/src/daemons/service_op.c
+++ b/rgmanager/src/daemons/service_op.c
@@ -62,6 +62,7 @@ service_op_start(char *svcName,
++dep;
continue;
case RG_EFAIL:
+ case RG_EDEADLCK:
++fail;
continue;
case RG_EABORT:
11 years, 6 months
cluster: STABLE32 - Revert "rgmanager: Fix for services stuck in recovery"
by Ryan McCabe
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=13b5aea8fb2...
Commit: 13b5aea8fb2fe7f7e59b049dc4c45e8777b2fbbb
Parent: b17d6ffc82e75553cfee7c2fd21d3bbdac0d1e86
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Tue Oct 2 13:59:45 2012 -0400
Committer: Ryan McCabe <rmccabe(a)redhat.com>
CommitterDate: Tue Oct 2 13:59:45 2012 -0400
Revert "rgmanager: Fix for services stuck in recovery"
This reverts commit 03e2215bd277fd79b8a6ee70a49de711e0f343ad.
Commit b17d6ffc82e75553cfee7c2fd21d3bbdac0d1e86 contains a better fix
for the problem this was trying to solve.
Signed-off-by: Ryan McCabe <rmccabe(a)redhat.com>
---
rgmanager/src/daemons/groups.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c
index 0caa33e..4a22dca 100644
--- a/rgmanager/src/daemons/groups.c
+++ b/rgmanager/src/daemons/groups.c
@@ -736,8 +736,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
(svcStatus.rs_state == RG_STATE_STARTED ||
svcStatus.rs_state == RG_STATE_RECOVER ||
svcStatus.rs_state == RG_STATE_STARTING ||
- svcStatus.rs_state == RG_STATE_STOPPING ||
- svcStatus.rs_state == RG_STATE_ERROR)) {
+ svcStatus.rs_state == RG_STATE_STOPPING )) {
logt_print(LOG_DEBUG,
"Marking %s on down member %d as stopped",
@@ -779,8 +778,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
/* Disabled/failed/in recovery? Do nothing */
if ((svcStatus.rs_state == RG_STATE_DISABLED) ||
(svcStatus.rs_state == RG_STATE_FAILED) ||
- (svcStatus.rs_state == RG_STATE_RECOVER) ||
- (svcStatus.rs_state == RG_STATE_ERROR)) {
+ (svcStatus.rs_state == RG_STATE_RECOVER)) {
continue;
}
11 years, 7 months
cluster: RHEL59 - Revert "rgmanager: Fix for services stuck in recovery"
by Ryan McCabe
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=432045a49e4...
Commit: 432045a49e4930e6f1c406f6f279c608655dac04
Parent: 321427f22fba4a073e814db3468ade553d6dac24
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Tue Oct 2 11:42:15 2012 -0400
Committer: Ryan McCabe <rmccabe(a)redhat.com>
CommitterDate: Tue Oct 2 11:42:15 2012 -0400
Revert "rgmanager: Fix for services stuck in recovery"
This reverts commit 467d015c53e5e2d00025708cda95b3df41ebda1f.
The patch in commit 321427f22fba4a073e814db3468ade553d6dac24 better
solves the issue this patch tried to address.
Signed-off-by: Ryan McCabe <rmccabe(a)redhat.com>
---
rgmanager/src/daemons/groups.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c
index bd406c8..20ed2e1 100644
--- a/rgmanager/src/daemons/groups.c
+++ b/rgmanager/src/daemons/groups.c
@@ -747,8 +747,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
(svcStatus.rs_state == RG_STATE_STARTED ||
svcStatus.rs_state == RG_STATE_RECOVER ||
svcStatus.rs_state == RG_STATE_STARTING ||
- svcStatus.rs_state == RG_STATE_STOPPING ||
- svcStatus.rs_state == RG_STATE_ERROR)) {
+ svcStatus.rs_state == RG_STATE_STOPPING )) {
clulog(LOG_DEBUG,
"Marking %s on down member %d as stopped",
@@ -790,8 +789,7 @@ eval_groups(int local, uint32_t nodeid, int nodeStatus)
/* Disabled/failed/in recovery? Do nothing */
if ((svcStatus.rs_state == RG_STATE_DISABLED) ||
(svcStatus.rs_state == RG_STATE_FAILED) ||
- (svcStatus.rs_state == RG_STATE_RECOVER) ||
- (svcStatus.rs_state == RG_STATE_ERROR)) {
+ (svcStatus.rs_state == RG_STATE_RECOVER)) {
continue;
}
11 years, 7 months
cluster: RHEL59 - rgmanager: Fix for deadlock
by Ryan McCabe
Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=321427f22fb...
Commit: 321427f22fba4a073e814db3468ade553d6dac24
Parent: c404f3305d156a89232c1f8294aadd23fdd2a15f
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Mon Oct 1 11:28:35 2012 -0400
Committer: Ryan McCabe <rmccabe(a)redhat.com>
CommitterDate: Mon Oct 1 11:31:55 2012 -0400
rgmanager: Fix for deadlock
This patch fixes a deadlock in rgmanager that could occur when a node
starts rgmanager while a service is recovering.
Resolves: rhbz#834459
Acked-by: Lon Hohberger <lhh(a)redhat.com>
Signed-off-by: Ryan McCabe <rmccabe(a)redhat.com>
---
rgmanager/src/daemons/rg_state.c | 1 +
rgmanager/src/daemons/rg_thread.c | 17 ++++++++++++++++-
rgmanager/src/daemons/service_op.c | 1 +
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 9000f1b..b447cb3 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -2009,6 +2009,7 @@ retry:
/* Deliberate */
case RG_EDEPEND:
case RG_EFAIL:
+ case RG_EDEADLCK:
/* Uh oh - we failed to relocate to this node.
ensure that we tell the next node to start it from
the 'recovering' state. */
diff --git a/rgmanager/src/daemons/rg_thread.c b/rgmanager/src/daemons/rg_thread.c
index 769ca1e..60bf0c6 100644
--- a/rgmanager/src/daemons/rg_thread.c
+++ b/rgmanager/src/daemons/rg_thread.c
@@ -23,6 +23,7 @@
#include <rg_queue.h>
#include <assert.h>
#include <members.h>
+#include <clulog.h>
/**
* Resource thread list entry.
@@ -749,13 +750,27 @@ rt_enqueue_request(const char *resgroupname, int request,
msg_free_ctx(response_ctx);
break;
}
- fprintf(stderr, "Failed to queue request: Would block\n");
+ pthread_mutex_unlock(resgroup->rt_queue_mutex);
+ pthread_mutex_unlock(&reslist_mutex);
+ clulog(LOG_DEBUG, "Failed to queue request: Would block\n");
/* EWOULDBLOCK */
+ return -1;
+ }
+
+ if (resgroup->rt_request == RG_START &&
+ (request == RG_START_REMOTE || request == RG_START_RECOVER)) {
+ send_ret(response_ctx, resgroup->rt_name, RG_EDEADLCK,
+ request, 0);
+ msg_free_ctx(response_ctx);
pthread_mutex_unlock(resgroup->rt_queue_mutex);
pthread_mutex_unlock(&reslist_mutex);
+ clulog(LOG_DEBUG,
+ "Failed to queue %d request for %s: Would block\n",
+ request, resgroupname);
return -1;
}
+
ret = rq_queue_request(resgroup->rt_queue, resgroup->rt_name,
request, 0, 0, response_ctx, 0, target,
arg0, arg1);
diff --git a/rgmanager/src/daemons/service_op.c b/rgmanager/src/daemons/service_op.c
index 2ea59f9..bf0e1fc 100644
--- a/rgmanager/src/daemons/service_op.c
+++ b/rgmanager/src/daemons/service_op.c
@@ -82,6 +82,7 @@ service_op_start(char *svcName,
++dep;
continue;
case RG_EFAIL:
+ case RG_EDEADLCK:
++fail;
continue;
case RG_EABORT:
11 years, 7 months