Since in WLST we don't have the option to use "subprocess" (please Oracle there is no need to upgrade WLST to more recent versions of Python, you could sprain an ankle doing that and it's too dangerous), we must use os.popen(command).
Problem with popen is that stderr is not captured, so I found it easier to redirect stderr to stdout
import os def pingHost(hostname): cmd = 'ping -c 4 ' + hostname + ' 2>&1' success = False result = '' for line in os.popen(cmd).readlines(): result = result + line if "4 packets transmitted, 4 received" in line: success = True return success, result
To test the actual connection, we should use a socket Since I don't have netcat or nmap, I am using plain old stinky telnet.
export HOST='myhost.acme.com' export PORT=1522 sleep 5 | telnet $HOST $PORTthis will ensure that the process will be terminated (no hanging, no need to inject a CTRL-] and quit via expect) within 5 seconds.
this will return 1 if connection was successful, 0 otherwise:
sleep 5 | telnet $HOST $PORT | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
The alternative (faster, no need for timeouts) is using Python sockets:
import socket host = 'myhost.acme.com' port = 1522 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect=s.connect((host,port))
so this function works very well:
import socket def connectToHost(hostname, port): try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect=s.connect((hostname, int(port))) s.close() return True except: return False
Make sure you cast port into a int, otherwise you will get the infamous "Address must be a tuple of (hostname, port)" error.
No comments:
Post a Comment