summaryrefslogtreecommitdiffstats
path: root/agents/rsb/fence_rsb.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 06:50:17 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 06:50:17 +0000
commit86ed03f8adee56c050c73018537371c230a664a6 (patch)
treeeae3d04cdf1c49848e5a671327ab38297f4acb0d /agents/rsb/fence_rsb.py
parentInitial commit. (diff)
downloadfence-agents-fb571b7c89d25dc39569886fc83b92e1c2b4bb08.tar.xz
fence-agents-fb571b7c89d25dc39569886fc83b92e1c2b4bb08.zip
Adding upstream version 4.12.1.upstream/4.12.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'agents/rsb/fence_rsb.py')
-rwxr-xr-xagents/rsb/fence_rsb.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/agents/rsb/fence_rsb.py b/agents/rsb/fence_rsb.py
new file mode 100755
index 0000000..45355f5
--- /dev/null
+++ b/agents/rsb/fence_rsb.py
@@ -0,0 +1,70 @@
+#!@PYTHON@ -tt
+
+import sys, re
+import atexit
+sys.path.append("@FENCEAGENTSLIBDIR@")
+from fencing import *
+
+def get_power_status(conn, options):
+ conn.send("2")
+ conn.log_expect(options["--command-prompt"], int(options["--shell-timeout"]))
+ status = re.compile(r"Power Status[\s]*: (on|off)", re.IGNORECASE).search(conn.before).group(1)
+ conn.send("0")
+ conn.log_expect(options["--command-prompt"], int(options["--shell-timeout"]))
+
+ return status.lower().strip()
+
+def set_power_status(conn, options):
+ action = {
+ 'on' : "4",
+ 'off': "1"
+ }[options["--action"]]
+
+ conn.send("2")
+ conn.log_expect(options["--command-prompt"], int(options["--shell-timeout"]))
+ conn.send_eol(action)
+ conn.log_expect(["want to power " + options["--action"],
+ "yes/no", "'yes' or 'no'"], int(options["--shell-timeout"]))
+ conn.send_eol("yes")
+ conn.log_expect("any key to continue", int(options["--power-timeout"]))
+ conn.send_eol("")
+ conn.log_expect(options["--command-prompt"], int(options["--shell-timeout"]))
+ conn.send_eol("0")
+ conn.log_expect(options["--command-prompt"], int(options["--shell-timeout"]))
+
+def main():
+ device_opt = ["ipaddr", "login", "passwd", "secure", "cmd_prompt", "telnet"]
+
+ atexit.register(atexit_handler)
+
+ all_opt["cmd_prompt"]["default"] = ["to quit:"]
+
+ opt = process_input(device_opt)
+
+ if "--ssh" not in opt and "--ipport" not in opt:
+ # set default value like it should be set as usually
+ all_opt["ipport"]["default"] = "3172"
+ opt["--ipport"] = all_opt["ipport"]["default"]
+
+ options = check_input(device_opt, opt)
+
+ docs = {}
+ docs["shortdesc"] = "I/O Fencing agent for Fujitsu-Siemens RSB"
+ docs["longdesc"] = "fence_rsb is an I/O Fencing agent \
+which can be used with the Fujitsu-Siemens RSB management interface. It logs \
+into device via telnet/ssh and reboots a specified outlet. Lengthy telnet/ssh \
+connections should be avoided while a GFS cluster is running because the connection \
+will block any necessary fencing actions."
+ docs["vendorurl"] = "http://www.fujitsu.com"
+ show_docs(options, docs)
+
+ ##
+ ## Operate the fencing device
+ ####
+ conn = fence_login(options)
+ result = fence_action(conn, options, set_power_status, get_power_status, None)
+ fence_logout(conn, "0")
+ sys.exit(result)
+
+if __name__ == "__main__":
+ main()