run lxc-enter-namespace with --noseclabel
[tests.git] / qaapi / qa / PLCs.py
index dacee1b..287aac9 100644 (file)
@@ -1,18 +1,20 @@
 import os
-import copy
-import qa.utils        
+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
        
        }
@@ -26,22 +28,48 @@ class PLC(dict, Remote):
        
        # init config
        self.config = config
-       self.config.update_api(self)
-
-    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']))    
-           if self.config.verbose:
-               utils.header("Starting api server at %s on listening on port %s" % (self['host'], self['port']))     
-
-class PLCs(list, Table):
+       self.__init_logfile__()
+
+    def __init_logfile__(self, filename = None):
+        if not filename:
+            filename = '%s/qaapi.log' % (self.config.logdir)
+        self.logfile = Logfile(filename)
+
+    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)