diff --git a/fence/agents/rcd_serial/Makefile.am b/fence/agents/rcd_serial/Makefile.am index 6e568a5f..5a1786fa 100644 --- a/fence/agents/rcd_serial/Makefile.am +++ b/fence/agents/rcd_serial/Makefile.am @@ -1,26 +1,20 @@ MAINTAINERCLEANFILES = Makefile.in TARGET = fence_rcd_serial SRC = $(TARGET).py EXTRA_DIST = $(SRC) -scsidatadir = $(CLUSTERDATA) -scsidata_SCRIPTS = fence_rcd_serial_check - sbin_SCRIPTS = $(TARGET) man_MANS = $(TARGET).8 FENCE_TEST_ARGS = -k 1 fence_rcd_serial_check: $(TARGET) - cp $^ $@ include $(top_srcdir)/make/fencebuild.mk include $(top_srcdir)/make/fenceman.mk include $(top_srcdir)/make/agentpycheck.mk -clean-local: clean-man - rm -f $(TARGET) $(SYMTARGET) fence_rcd_serial_check diff --git a/fence/agents/rcd_serial/fence_rcd_serial.py b/fence/agents/rcd_serial/fence_rcd_serial.py index 6b573472..4285a0d1 100644 --- a/fence/agents/rcd_serial/fence_rcd_serial.py +++ b/fence/agents/rcd_serial/fence_rcd_serial.py @@ -1,98 +1,102 @@ #!/usr/bin/python -tt # Copyright 2015 Infoxchange, Danielle Madeley, Sam McLeod-Jones # Controls an RCD serial device # Ported from stonith/rcd_serial.c # The Following Agent Has Been Tested On: # CentOS Linux release 7.1.1503 # Resource example: # primitive stonith_node_1 ocf:rcd_serial_py params port="/dev/ttyS0" time=1000 hostlist=stonith_node_1 stonith-timeout=5s import sys import atexit import os import struct import logging from fcntl import ioctl from termios import TIOCMBIC, TIOCMBIS, TIOCM_RTS, TIOCM_DTR from time import sleep sys.path.append("@FENCEAGENTSLIBDIR@") from fencing import * #BEGIN_VERSION_GENERATION RELEASE_VERSION="rcd_serial (serial reset) fence agent" REDHAT_COPYRIGHT="" BUILD_DATE="22 Jul 2015" #END_VERSION_GENERATION class RCDSerial(object): """Control class for serial device""" def __init__(self, port='/dev/ttyS0'): self.fd = fd = os.open(port, os.O_RDONLY | os.O_NDELAY) logging.debug("Opened %s on fd %i", port, fd) ioctl(fd, TIOCMBIC, struct.pack('I', TIOCM_RTS | TIOCM_DTR)) def close(self): """Close the serial device""" logging.debug("Closing serial device") ret = os.close(self.fd) return ret def toggle_pin(self, pin=TIOCM_DTR, time=1000): """Toggle the pin high for the time specified""" logging.debug("Set pin high") ioctl(self.fd, TIOCMBIS, struct.pack('I', pin)) sleep(float(time) / 1000.) logging.debug("Set pin low") ioctl(self.fd, TIOCMBIC, struct.pack('I', pin)) def reboot_device(conn, options): conn.toggle_pin(time=options["--power-wait"]) return True def main(): device_opt = ["serial_port", "no_status", "no_password", "no_login", "method", "no_on", "no_off"] atexit.register(atexit_handler) all_opt["serial_port"] = { "getopt" : ":", "longopt" : "serial-port", "help":"--serial-port=[port] Port of the serial device (e.g. /dev/ttyS0)", "required" : "1", "shortdesc" : "Port of the serial device", "default" : "/dev/ttyS0", "order": 1 } all_opt["method"]["default"] = "cycle" all_opt["power_wait"]["default"] = "2" options = check_input(device_opt, process_input(device_opt)) docs = {} docs["shortdesc"] = "rcd_serial fence agent" - docs["longdesc"] = "fence_rcd_serial" + docs["longdesc"] = "fence_rcd_serial operates a serial cable that toggles a \ +reset of an opposing server using the reset switch on its motherboard. The \ +cable itself is simple with no power, network or moving parts. An example of \ +the cable is available here: https://smcleod.net/rcd-stonith/ & the circuit \ +design is available in the fence-agents src as SVG" docs["vendorurl"] = "http://www.scl.co.uk/rcd_serial/" show_docs(options, docs) ## Operate the fencing device conn = RCDSerial(port=options["--serial-port"]) result = fence_action(conn, options, None, None, reboot_cycle_fn=reboot_device) conn.close() sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/rcd_serial/rcd_serial_cable_diagram.svg b/fence/agents/rcd_serial/rcd_serial_cable_diagram.svg new file mode 100644 index 00000000..36f219ff --- /dev/null +++ b/fence/agents/rcd_serial/rcd_serial_cable_diagram.svg @@ -0,0 +1,276 @@ + + + + + + + + + +1N4148 + + + + + + + +1N4148. + + + + + + + +10k + + + + + + + +10k + + + + + + + +20k + + + + + + + +120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +100k + + + + + + +100uF + + + + + + + + + + + + + + + + + + + + + + + + + +Red LED + + + + + + + + + + + + + + + + + + +PS2501 Optocoupler + + + + +1 + + + + +1 +RWL + + + + +2 +RWG + + + + +7 +RTS + + + + +4 +DTR + + + + +5 +SG + + + + + + + + + + + + + + + + + + +4 + + + +3 + + + + +RS232 +Serial +Connector + + + + +Motherboard +Reset +Pins + + + + + + + + + + + +6512A-ND1 + + + + + + + + + + + + + + + + + + + + + +2 + + + + + + + + + + + + + + + +Delayed Serial Cable For STONITH + + + + + + + +