def main():
    device_opt = ["ipaddr", "login", "passwd", "port", "telnet"]

    atexit.register(atexit_handler)

    opt = process_input(device_opt)

    all_opt["ipport"]["default"] = "23"

    opt["eol"] = "\r\n"
    options = check_input(device_opt, opt)

    docs = {}
    docs["shortdesc"] = "I/O Fencing agent for Raritan Dominion PX"
    docs["longdesc"] = "fence_raritan is an I/O Fencing agent which can be \
used with the Raritan DPXS12-20 Power Distribution Unit. It logs into \
device via telnet and reboots a specified outlet. Lengthy telnet connections \
should be avoided while a GFS cluster is running because the connection will \
block any necessary fencing actions."

    docs["vendorurl"] = "http://www.raritan.com/"
    show_docs(options, docs)

    #  add support also for delay before login which is very useful for 2-node clusters
    run_delay(options)

    # Convert pure port/plug number to /system1/outlet${plug}
    try:
        plug_int = int(options["--plug"])
        options["--plug"] = "/system1/outlet" + str(plug_int)
    except ValueError:
        pass
    ##
    ## Operate the fencing device
    ## We can not use fence_login(), username and passwd are sent on one line
    ####
    try:
        conn = fspawn(options, options["--telnet-path"], encoding="latin1")
        conn.send("set binary\n")
        conn.send("open %s -%s\n" % (options["--ip"], options["--ipport"]))
        conn.read_nonblocking(size=100,
                              timeout=int(options["--shell-timeout"]))
        conn.log_expect("Login.*", int(options["--shell-timeout"]))
        conn.send_eol("%s" % (options["--username"]))
        conn.log_expect("Password.*", int(options["--shell-timeout"]))
        conn.send_eol("%s" % (options["--password"]))
        conn.log_expect("clp.*", int(options["--shell-timeout"]))
    except pexpect.EOF:
        fail(EC_LOGIN_DENIED)
    except pexpect.TIMEOUT:
        fail(EC_LOGIN_DENIED)

    result = 0
    if options["--action"] != "monitor":
        result = fence_action(conn, options, set_power_status,
                              get_power_status)

    fence_logout(conn, "exit\n")
    sys.exit(result)
Beispiel #2
0
def main():
	device_opt = ["ipaddr", "login", "passwd", "port", "telnet"]

	atexit.register(atexit_handler)

	opt = process_input(device_opt)

	all_opt["ipport"]["default"] = "23"

	opt["eol"] = "\r\n"
	options = check_input(device_opt, opt)

	docs = {}
	docs["shortdesc"] = "I/O Fencing agent for Raritan Dominion PX"
	docs["longdesc"] = "fence_raritan is an I/O Fencing agent which can be \
used with the Raritan DPXS12-20 Power Distribution Unit. It logs into \
device via telnet and reboots a specified outlet. Lengthy telnet connections \
should be avoided while a GFS cluster is running because the connection will \
block any necessary fencing actions."
	docs["vendorurl"] = "http://www.raritan.com/"
	show_docs(options, docs)

	#  add support also for delay before login which is very useful for 2-node clusters
	run_delay(options)

	##
	## Operate the fencing device
	## We can not use fence_login(), username and passwd are sent on one line
	####
	try:
		conn = fspawn(options, options["--telnet-path"])
		conn.send("set binary\n")
		conn.send("open %s -%s\n"%(options["--ip"], options["--ipport"]))
		conn.read_nonblocking(size=100, timeout=int(options["--shell-timeout"]))
		conn.log_expect("Login.*", int(options["--shell-timeout"]))
		conn.send_eol("%s" % (options["--username"]))
		conn.log_expect("Password.*", int(options["--shell-timeout"]))
		conn.send_eol("%s" % (options["--password"]))
		conn.log_expect("clp.*", int(options["--shell-timeout"]))
	except pexpect.EOF:
		fail(EC_LOGIN_DENIED)
	except pexpect.TIMEOUT:
		fail(EC_LOGIN_DENIED)

	result = 0
	if options["--action"] != "monitor":
		result = fence_action(conn, options, set_power_status, get_power_status)

	fence_logout(conn, "exit\n")
	sys.exit(result)
Beispiel #3
0
def main():
    device_opt = ["ipaddr", "login", "passwd", "port", "telnet"]

    atexit.register(atexit_handler)

    all_opt["ipport"]["default"] = "1234"

    opt = process_input(device_opt)
    opt["eol"] = "\r\n"
    options = check_input(device_opt, opt)

    docs = {}
    docs["shortdesc"] = "I/O Fencing agent for Koukaam NETIO-230B"
    docs["longdesc"] = "fence_netio is an I/O Fencing agent which can be \
used with the Koukaam NETIO-230B Power Distribution Unit. It logs into \
device via telnet and reboots a specified outlet. Lengthy telnet connections \
should be avoided while a GFS cluster is running because the connection will \
block any necessary fencing actions."

    docs["vendorurl"] = "http://www.koukaam.se/"
    show_docs(options, docs)

    ##
    ## Operate the fencing device
    ## We can not use fence_login(), username and passwd are sent on one line
    ####
    run_delay(options)
    try:
        conn = fspawn(options, options["--telnet-path"])
        conn.send("set binary\n")
        conn.send("open %s -%s\n" % (options["--ip"], options["--ipport"]))

        conn.read_nonblocking(size=100,
                              timeout=int(options["--shell-timeout"]))
        conn.log_expect("100 HELLO .*", int(options["--shell-timeout"]))
        conn.send_eol("login %s %s" %
                      (options["--username"], options["--password"]))
        conn.log_expect("250 OK", int(options["--shell-timeout"]))
    except pexpect.EOF:
        fail(EC_LOGIN_DENIED)
    except pexpect.TIMEOUT:
        fail(EC_LOGIN_DENIED)

    result = fence_action(conn, options, set_power_status, get_power_status,
                          get_outlet_list)
    fence_logout(conn, "quit\n")
    sys.exit(result)
Beispiel #4
0
def detect_login_telnet(options):
    options["--ipport"] = 23
    re_login_string = r"([\r\n])((?!Last )login\s*:)|((?!Last )Login Name:  )|(username: )|(User Name :)"
    re_login = re.compile(re_login_string, re.IGNORECASE)
    re_pass = re.compile("(password)|(pass phrase)", re.IGNORECASE)

    options["eol"] = "\r\n"
    conn = fencing.fspawn(options, options["--telnet-path"])
    conn.send("set binary\n")
    conn.send("open %s -%s\n" % (options["--ip"], options["--ipport"]))

    conn.log_expect(re_login, int(options["--login-timeout"]))
    conn.send_eol(options["--username"])

    ## automatically change end of line separator
    screen = conn.read_nonblocking(size=100,
                                   timeout=int(options["--shell-timeout"]))
    if re_login.search(screen) != None:
        options["eol"] = "\n"
        conn.send_eol(options["--username"])
        conn.log_expect(re_pass, int(options["--login-timeout"]))
    elif re_pass.search(screen) == None:
        conn.log_expect(re_pass, int(options["--shell-timeout"]))

    try:
        conn.send_eol(options["--password"])
        valid_password = conn.log_expect([re_login] + \
                [pexpect.TIMEOUT], int(options["--shell-timeout"]))
        if valid_password == 0:
            ## password is invalid or we have to change EOL separator
            options["eol"] = "\r"
            conn.send_eol("")
            screen = conn.read_nonblocking(size=100,
                                           timeout=int(
                                               options["--shell-timeout"]))
            ## after sending EOL the fence device can either show 'Login' or 'Password'
            if re_login.search(conn.after + screen) != None:
                conn.send_eol("")
            conn.send_eol(options["--username"])
            conn.log_expect(re_pass, int(options["--login-timeout"]))
            conn.send_eol(options["--password"])
            conn.log_expect(pexpect.TIMEOUT, int(options["--login-timeout"]))
    except KeyError:
        fencing.fail(fencing.EC_PASSWORD_MISSING)

    found_cmd_prompt = guess_prompt(conn, options, conn.before)
    return (found_cmd_prompt, conn)
Beispiel #5
0
def detect_login_ssh(options, version=2):
    options["--ipport"] = 22
    if version == "1":
        command = '%s %s@%s -p %s -1 -c blowfish -o PubkeyAuthentication=no' % (options["--ssh-path"], options["--username"], options["--ip"], options["--ipport"])
    else:
        command = '%s %s@%s -p %s -o PubkeyAuthentication=no' % (options["--ssh-path"], options["--username"], options["--ip"], options["--ipport"])

    conn = fencing.fspawn(options, command)
    result = conn.log_expect(["ssword:", "Are you sure you want to continue connecting (yes/no)?"], int(options["--login-timeout"]))
    if result == 1:
        conn.send("yes\n")
        conn.log_expect("ssword:", int(options["--login-timeout"]))

    conn.send(options["--password"] + "\n")

    found_cmd_prompt = guess_prompt(conn, options, conn.before)
    return (found_cmd_prompt, conn)
def main():
	device_opt = ["ipaddr", "login", "passwd", "port"]

	atexit.register(atexit_handler)

	opt = process_input(device_opt)

	# set default port for telnet only
	if not opt.has_key("--ipport"):
		opt["--ipport"] = "1234"

	opt["eol"] = "\r\n"
	options = check_input(device_opt, opt)

	docs = {}
	docs["shortdesc"] = "I/O Fencing agent for Koukaam NETIO-230B"
	docs["longdesc"] = "fence_netio is an I/O Fencing agent which can be \
used with the Koukaam NETIO-230B Power Distribution Unit. It logs into \
device via telnet and reboots a specified outlet. Lengthy telnet connections \
should be avoided while a GFS cluster is running because the connection will \
block any necessary fencing actions."
	docs["vendorurl"] = "http://www.koukaam.se/"
	show_docs(options, docs)

	##
	## Operate the fencing device
	## We can not use fence_login(), username and passwd are sent on one line
	####
	run_delay(options)
	try:
		conn = fspawn(options, TELNET_PATH)
		conn.send("set binary\n")
		conn.send("open %s -%s\n"%(options["--ip"], options["--ipport"]))

		conn.read_nonblocking(size=100, timeout=int(options["--shell-timeout"]))
		conn.log_expect(options, "100 HELLO .*", int(options["--shell-timeout"]))
		conn.send_eol("login %s %s" % (options["--username"], options["--password"]))
		conn.log_expect(options, "250 OK", int(options["--shell-timeout"]))
	except pexpect.EOF:
		fail(EC_LOGIN_DENIED)
	except pexpect.TIMEOUT:
		fail(EC_LOGIN_DENIED)

	result = fence_action(conn, options, set_power_status, get_power_status, get_outlet_list)
	fence_logout(conn, "quit\n")
	sys.exit(result)
Beispiel #7
0
def detect_login_telnet(options):
    options["--ipport"] = 23
    re_login_string = r"([\r\n])((?!Last )login\s*:)|((?!Last )Login Name:  )|(username: )|(User Name :)"
    re_login = re.compile(re_login_string, re.IGNORECASE)
    re_pass = re.compile("(password)|(pass phrase)", re.IGNORECASE)

    options["eol"] = "\r\n"
    conn = fencing.fspawn(options, options["--telnet-path"])
    conn.send("set binary\n")
    conn.send("open %s -%s\n"%(options["--ip"], options["--ipport"]))

    conn.log_expect(re_login, int(options["--login-timeout"]))
    conn.send_eol(options["--username"])

    ## automatically change end of line separator
    screen = conn.read_nonblocking(size=100, timeout=int(options["--shell-timeout"]))
    if re_login.search(screen) != None:
        options["eol"] = "\n"
        conn.send_eol(options["--username"])
        conn.log_expect(re_pass, int(options["--login-timeout"]))
    elif re_pass.search(screen) == None:
        conn.log_expect(re_pass, int(options["--shell-timeout"]))

    try:
        conn.send_eol(options["--password"])
        valid_password = conn.log_expect([re_login] + \
                [pexpect.TIMEOUT], int(options["--shell-timeout"]))
        if valid_password == 0:
            ## password is invalid or we have to change EOL separator
            options["eol"] = "\r"
            conn.send_eol("")
            screen = conn.read_nonblocking(size=100, timeout=int(options["--shell-timeout"]))
            ## after sending EOL the fence device can either show 'Login' or 'Password'
            if re_login.search(conn.after + screen) != None:
                conn.send_eol("")
            conn.send_eol(options["--username"])
            conn.log_expect(re_pass, int(options["--login-timeout"]))
            conn.send_eol(options["--password"])
            conn.log_expect(pexpect.TIMEOUT, int(options["--login-timeout"]))
    except KeyError:
        fencing.fail(fencing.EC_PASSWORD_MISSING)

    found_cmd_prompt = guess_prompt(conn, options, conn.before)
    return (found_cmd_prompt, conn)
Beispiel #8
0
def detect_login_ssh(options, version=2):
    options["--ipport"] = 22
    if version == "1":
        command = '%s %s@%s -p %s -1 -c blowfish -o PubkeyAuthentication=no' % (
            options["--ssh-path"], options["--username"], options["--ip"],
            options["--ipport"])
    else:
        command = '%s %s@%s -p %s -o PubkeyAuthentication=no' % (
            options["--ssh-path"], options["--username"], options["--ip"],
            options["--ipport"])

    conn = fencing.fspawn(options, command)
    result = conn.log_expect(
        ["ssword:", "Are you sure you want to continue connecting (yes/no)?"],
        int(options["--login-timeout"]))
    if result == 1:
        conn.send("yes\n")
        conn.log_expect("ssword:", int(options["--login-timeout"]))

    conn.send(options["--password"] + "\n")

    found_cmd_prompt = guess_prompt(conn, options, conn.before)
    return (found_cmd_prompt, conn)
Beispiel #9
0
def main():
    device_opt = ["ipaddr", "login", "passwd", "no_login", "no_password", \
      "cmd_prompt", "secure", "port", "telnet"]

    atexit.register(atexit_handler)

    all_opt["cmd_prompt"]["default"] = [
        "RSM>", "MPC>", "IPS>", "TPS>", "NBB>", "NPS>", "VMR>"
    ]

    options = check_input(device_opt, process_input(device_opt))

    docs = {}
    docs["shortdesc"] = "Fence agent for WTI"
    docs["longdesc"] = "fence_wti is an I/O Fencing agent \
which can be used with the WTI Network Power Switch (NPS). It logs \
into an NPS via telnet or ssh and boots a specified plug. \
Lengthy telnet connections to the NPS should be avoided while a GFS cluster \
is running because the connection will block any necessary fencing actions."

    docs["vendorurl"] = "http://www.wti.com"
    show_docs(options, docs)

    ##
    ## Operate the fencing device
    ##
    ## @note: if it possible that this device does not need either login, password or both of them
    #####
    if "--ssh" not in options:
        try:
            if options["--action"] in ["off", "reboot"]:
                time.sleep(int(options["--delay"]))

            options["eol"] = "\r\n"

            conn = fspawn(options, options["--telnet-path"])
            conn.send("set binary\n")
            conn.send("open %s -%s\n" % (options["--ip"], options["--ipport"]))

            re_login = re.compile(
                "(login: )|(Login Name:  )|(username: )|(User Name :)",
                re.IGNORECASE)
            re_prompt = re.compile(
                "|".join(["(" + x + ")" for x in options["--command-prompt"]]),
                re.IGNORECASE)

            result = conn.log_expect([re_login, "Password: "******"--shell-timeout"]))
            if result == 0:
                if "--username" in options:
                    conn.send_eol(options["--username"])
                    result = conn.log_expect(
                        [re_login, "Password: "******"--shell-timeout"]))
                else:
                    fail_usage("Failed: You have to set login name")

            if result == 1:
                if "--password" in options:
                    conn.send_eol(options["--password"])
                    conn.log_expect(options["--command-prompt"],
                                    int(options["--shell-timeout"]))
                else:
                    fail_usage(
                        "Failed: You have to enter password or password script"
                    )
        except pexpect.EOF:
            fail(EC_LOGIN_DENIED)
        except pexpect.TIMEOUT:
            fail(EC_LOGIN_DENIED)
    else:
        conn = fence_login(options)

    result = fence_action(conn, options, set_power_status, get_power_status,
                          get_power_status)
    fence_logout(conn, "/X")
    sys.exit(result)
Beispiel #10
0
def main():
	device_opt = [  "ipaddr", "login", "passwd", "no_login", "no_password", \
			"cmd_prompt", "secure", "port" ]

	atexit.register(atexit_handler)

	all_opt["cmd_prompt"]["default"] = [ "RSM>", "MPC>", "IPS>", "TPS>", "NBB>", "NPS>", "VMR>" ]

	options = check_input(device_opt, process_input(device_opt))

	docs = { }
	docs["shortdesc"] = "Fence agent for WTI"
	docs["longdesc"] = "fence_wti is an I/O Fencing agent \
which can be used with the WTI Network Power Switch (NPS). It logs \
into an NPS via telnet or ssh and boots a specified plug. \
Lengthy telnet connections to the NPS should be avoided while a GFS cluster \
is running because the connection will block any necessary fencing actions."
	docs["vendorurl"] = "http://www.wti.com"
	show_docs(options, docs)

	##
	## Operate the fencing device
	##
	## @note: if it possible that this device does not need either login, password or both of them
	#####
	if 0 == options.has_key("--ssh"):
		try:
			if options["--action"] in ["off", "reboot"]:
				time.sleep(int(options["--delay"]))

			conn = fspawn(options, TELNET_PATH)
			conn.send("set binary\n")
			conn.send("open %s -%s\n"%(options["--ip"], options["--ipport"]))

			re_login = re.compile("(login: )|(Login Name:  )|(username: )|(User Name :)", re.IGNORECASE)
			re_prompt = re.compile("|".join(["(" + x + ")" for x in options["--command-prompt"]]), re.IGNORECASE)

			result = conn.log_expect(options, [ re_login, "Password: "******"--shell-timeout"]))
			if result == 0:
				if options.has_key("--username"):
					conn.send(options["--username"]+"\r\n")
					result = conn.log_expect(options, [ re_login, "Password: "******"--shell-timeout"]))
				else:
					fail_usage("Failed: You have to set login name")

			if result == 1:
				if options.has_key("--password"):
					conn.send(options["--password"]+"\r\n")
					conn.log_expect(options, options["--command-prompt"], int(options["--shell-timeout"]))
				else:
					fail_usage("Failed: You have to enter password or password script")
		except pexpect.EOF:
			fail(EC_LOGIN_DENIED)
		except pexpect.TIMEOUT:
			fail(EC_LOGIN_DENIED)
	else:
		conn = fence_login(options)

	result = fence_action(conn, options, set_power_status, get_power_status, get_power_status)
	fence_logout(conn, "/X\r\n")
	sys.exit(result)