ee414dc81346ab7d998971a70a7efbeab7b97a9a
[pcucontrol.git] / pcucontrol / models / BlackBoxPSMaverick.py
1 from pcucontrol.reboot import *
2
3 ### rebooting european BlackBox PSE boxes
4 # Thierry Parmentelat - May 11 2005
5 # tested on 4-ports models known as PSE505-FR
6 # uses http to POST a data 'P<port>=r'
7 # relies on basic authentication within http1.0
8 # first curl-based script was
9 # curl --http1.0 --basic --user <username>:<password> --data P<port>=r \
10 #       http://<hostname>:<http_port>/cmd.html && echo OK
11
12 # log in:
13
14 ## BB PSMaverick
15 class BlackBoxPSMaverick(PCUControl):
16         supported_ports = [80]
17
18         def run_http(self, node_port, dryrun):
19                 if not dryrun:
20                         # send reboot signal.
21                         cmd = "curl -s --data 'P%s=r' --anyauth --user '%s:%s' http://%s/config/home_f.html" % ( node_port, self.username, self.password, self.host)
22                 else:
23                         # else, just try to log in
24                         cmd = "curl -s --anyauth --user '%s:%s' http://%s/config/home_f.html" % ( self.username, self.password, self.host)
25
26                 p = os.popen(cmd)
27                 result = p.read()
28                 print "RESULT: ", result
29
30                 if len(result.split()) > 3:
31                         return 0
32                 else:
33                         return result
34
35 def bbpse_reboot (pcu_ip,username,password,port_in_pcu,http_port, dryrun):
36
37         global verbose
38
39         url = "http://%s:%d/cmd.html" % (pcu_ip,http_port)
40         data= "P%d=r" % port_in_pcu
41         if verbose:
42                 logger.debug("POSTing '%s' on %s" % (data,url))
43
44         authinfo = urllib2.HTTPPasswordMgrWithDefaultRealm()
45         uri = "%s:%d" % (pcu_ip,http_port)
46         authinfo.add_password (None, uri, username, password)
47         authhandler = urllib2.HTTPBasicAuthHandler( authinfo )
48
49         opener = urllib2.build_opener(authhandler)
50         urllib2.install_opener(opener)
51
52         if (dryrun):
53                 return 0
54
55         try:
56                 f = urllib2.urlopen(url,data)
57
58                 r= f.read()
59                 if verbose:
60                         logger.debug(r)
61                 return 0
62
63         except urllib2.URLError,err:
64                 logger.info('Could not open http connection', err)
65                 return "bbpse error"