summaryrefslogtreecommitdiffstats
path: root/agents/dummy/fence_dummy.py
diff options
context:
space:
mode:
Diffstat (limited to 'agents/dummy/fence_dummy.py')
-rw-r--r--agents/dummy/fence_dummy.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/agents/dummy/fence_dummy.py b/agents/dummy/fence_dummy.py
new file mode 100644
index 0000000..8fa2d9a
--- /dev/null
+++ b/agents/dummy/fence_dummy.py
@@ -0,0 +1,133 @@
+#!@PYTHON@ -tt
+
+import sys, random
+import logging
+import time
+import atexit
+sys.path.append("@FENCEAGENTSLIBDIR@")
+from fencing import *
+from fencing import fail_usage, run_delay
+
+plug_status = "on"
+
+def get_power_status_file(conn, options):
+ del conn
+
+ try:
+ status_file = open(options["--status-file"], 'r')
+ except Exception:
+ return "off"
+
+ status = status_file.read()
+ status_file.close()
+
+ return status.lower()
+
+def set_power_status_file(conn, options):
+ del conn
+
+ if not (options["--action"] in ["on", "off"]):
+ return
+
+ status_file = open(options["--status-file"], 'w')
+ status_file.write(options["--action"])
+ status_file.close()
+
+def get_power_status_fail(conn, options):
+ outlets = get_outlets_fail(conn, options)
+
+ if len(outlets) == 0 or "--plug" not in options:
+ fail_usage("Failed: You have to enter existing machine!")
+ else:
+ return outlets[options["--plug"]][0]
+
+def set_power_status_fail(conn, options):
+ global plug_status
+ del conn
+
+ plug_status = "unknown"
+ if options["--action"] == "on":
+ plug_status = "off"
+
+def get_outlets_fail(conn, options):
+ del conn
+
+ result = {}
+ global plug_status
+
+ if options["--action"] == "on":
+ plug_status = "off"
+
+ # This fake agent has no port data to list, so we have to make
+ # something up for the list action.
+ if options.get("--action", None) == "list":
+ result["fake_port_1"] = [plug_status, "fake"]
+ result["fake_port_2"] = [plug_status, "fake"]
+ elif "--plug" not in options:
+ fail_usage("Failed: You have to enter existing machine!")
+ else:
+ port = options["--plug"]
+ result[port] = [plug_status, "fake"]
+
+ return result
+
+def main():
+ device_opt = ["no_password", "status_file", "random_sleep_range", "type", "no_port"]
+
+ atexit.register(atexit_handler)
+
+ all_opt["status_file"] = {
+ "getopt" : ":",
+ "longopt" : "status-file",
+ "help":"--status-file=[file] Name of file that holds current status",
+ "required" : "0",
+ "shortdesc" : "File with status",
+ "default" : "/tmp/fence_dummy.status",
+ "order": 1
+ }
+
+ all_opt["random_sleep_range"] = {
+ "getopt" : ":",
+ "longopt" : "random_sleep_range",
+ "help":"--random_sleep_range=[seconds] Issue a sleep between 1 and [seconds]",
+ "required" : "0",
+ "shortdesc" : "Issue a sleep between 1 and X seconds. Used for testing.",
+ "order": 1
+ }
+
+ all_opt["type"] = {
+ "getopt" : ":",
+ "longopt" : "type",
+ "help":"--type=[type] Possible types are: file and fail",
+ "required" : "0",
+ "shortdesc" : "Type of the dummy fence agent",
+ "default" : "file",
+ "order": 1
+ }
+
+ options = check_input(device_opt, process_input(device_opt))
+
+ docs = {}
+ docs["shortdesc"] = "Dummy fence agent"
+ docs["longdesc"] = "fence_dummy"
+ docs["vendorurl"] = "http://www.example.com"
+ show_docs(options, docs)
+
+ run_delay(options)
+
+ # random sleep for testing
+ if "--random_sleep_range" in options:
+ val = int(options["--random_sleep_range"])
+ ran = random.randint(1, val)
+ logging.info("Random sleep for %d seconds\n", ran)
+ time.sleep(ran)
+
+ if options["--type"] == "fail":
+ result = fence_action(None, options, set_power_status_fail, get_power_status_fail, get_outlets_fail)
+ else:
+ result = fence_action(None, options, set_power_status_file, get_power_status_file, None)
+
+ sys.exit(result)
+
+if __name__ == "__main__":
+ main()