import os
-import copy
+import re
+import utils
+import xmlrpclib
from Remote import Remote
from Table import Table
+from logger import Logfile
class PLC(dict, Remote):
fields = {
'name': 'TestPLC', # PLC Name
'host': 'localhost', # Node Hostname
'ip': '127.0.0.1', # IP
- 'chroot': None,
+ 'chroot': None, # Path to the chroot
'vserver': None, # Vserver where this PLC lives
- 'rootkey': '/home/tmack/.ssh/plc-root', # Root Key
- 'api_path': '/PLCAPI/', # PLCAPI path
+ 'host_rootkey': None, # Root Key
+ 'api_path': '/PLCAPI/', # PLCAPI path
'port': '443' # PLCAPI port
}
# init config
self.config = config
- self.config.update_api(self)
+ self.__init_logfile__()
- def start_xmlrpc_server(self):
- """
- PLCAPI comes with a SimpleServer script that allows you to run a
- standalone http server that listens on the specified port.
- This is useful for running multiple api servers on the same machine.
- """
- if 'host' in self and not host in ['localhost', None]:
- server_script = "/usr/share/plc_api/Server.py"
- self.commands("%s -p %s" % (server_script, self['port']))
-
+ def __init_logfile__(self, filename = None):
+ if not filename:
+ filename = '%s/qaapi.log' % (self.config.logdir)
+ self.logfile = Logfile(filename)
-class PLCs(list, Table):
+ def update_ip(self):
+ try:
+ command = "/sbin/ifconfig eth0 | grep -v inet6 | grep inet | awk '{print$2;}'"
+ (status, output) = self.commands(command)
+ ip = re.findall(r'[0-9\.]+', output)[0]
+ except:
+ ip = "127.0.0.1"
+ self['ip'] = ip.strip()
+ return self['ip']
+
+ def update_api(self):
+ # Set up API acccess
+ # If plc is specified, find its configuration
+ # and use its API
+ self.update_ip()
+ name, ip, port, path = self['name'], self['ip'], self['port'], self['api_path']
+ if self.config.verbose:
+ utils.header("Updating %(name)s's api to https://%(ip)s:%(port)s/%(path)s" % locals(), logfile = self.config.logfile)
+ api_server = "https://%(ip)s:%(port)s/%(path)s" % locals()
+ self.config.api = xmlrpclib.Server(api_server, allow_none = 1)
+ self.config.api_type = 'xmlrpc'
+
+ def update_node_images(self):
+ pass
+
+ def scp_to_webroot(self, localfiles, recursive = False):
+ if self.config.verbose:
+ utils.header("Copying %s to %s webroot" % (localfiles, self['name']), logfile = self.config.logfile)
+ self.scp_to("%(localfiles)s" % locals(), "/var/www/html/")
+ url = 'http://%s/%s' % (self['ip'], localfiles)
+
+ return url
+
+class PLCs(Table):
def __init__(self, config, plcs):
plclist = [PLC(config, plc) for plc in plcs]
- list.__init__(self, plclist)
+ Table.__init__(self, plclist)