#!/usr/bin/python

# The Following Agent Has Been Tested On:
#
# Virsh 0.3.3 on RHEL 5.2 with xen-3.0.3-51
#

import sys, time, random
sys.path.append("/usr/share/fence")
from fencing import *

#BEGIN_VERSION_GENERATION
RELEASE_VERSION="3.1.6"
BUILD_DATE="(built Mon Oct 24 12:14:08 UTC 2011)"
REDHAT_COPYRIGHT="Copyright (C) Red Hat, Inc. 2004-2010 All rights reserved."
#END_VERSION_GENERATION
plug_status="on"

def get_outlets_status(conn, options):
    result={}

    # This fake agent has no port data to list, so we have to make
    # something up for the list action.
    if options.has_key("-o") and options["-o"] == "list":
        result["fake_port_1"]=[plug_status, "fake"]
        result["fake_port_2"]=[plug_status, "fake"]
    elif (options.has_key("-n") == 0):
        fail_usage("Failed: You have to enter existing machine!")
    else:
        port=options["-n"]
        result[port]=[plug_status, "fake"]

    return result

def get_power_status(conn, options):
    outlets=get_outlets_status(conn,options)

    if len(outlets) == 0 or options.has_key("-n") == 0:
        fail_usage("Failed: You have to enter existing machine!")
    else:
        return outlets[options["-n"]][0]

def set_power_status(conn, options):
    global plug_status
    plug_status = "off"
    if options.has_key("-o") and options["-o"] == "on":
        plug_status = "on"

def main():
    global all_opt
    device_opt = [  "help", "version", "agent", "quiet", "verbose", "debug", "action", "port",
            "no_password", "power_wait", "power_timeout", "random_sleep_range"]

    all_opt["random_sleep_range"] = {
        "getopt" : "R:",
        "longopt" : "random_sleep_range",
        "help" : "--random_sleep-range=<seconds>Issue a sleep between 1 and <seconds>. Used for testing.",
        "order" : 1 }

    atexit.register(atexit_handler)

    pinput = process_input(device_opt)

    # Fake options to keep the library happy
    #pinput["-p"] = "none"
    pinput["-a"] = "localhost"
    pinput["-C"] = ","

    options = check_input(device_opt, pinput)

    # random sleep for testing
    if options.has_key("-R"):
        val = int(options["-R"])
        ran = random.randint(1, val)
        print "random sleep for %d seconds" % ran
        time.sleep(ran)

    if options.has_key("-o") and (options["-o"] == "monitor"):
        sys.exit(0)

    ## Defaults for fence agent
    docs = { }
    docs["shortdesc"] = "Fake fence agent"
    docs["longdesc"] = "fence_true is a fake Fencing agent which always reports success without doing anything."
    show_docs(options, docs)

    ## Operate the fencing device
    result = fence_action(None, options, set_power_status, get_power_status, get_outlets_status)
    sys.exit(result)

if __name__ == "__main__":
    main()
