Allow use of onos docker for existing tests

- Allow Cluster to pull/build onos docker
- Connect clidriver to cli runnning in docker
- Some changes for debugability in components
- To use, set the useDocker and diffCliHosts tags in the cluster
  component to True, then define parameters in the params file
- Update all SR Stratum tests to use the tost docker image
- NOTE: Since the tost-onos image doesn't have openflow installe, we are
  currently only using docker for the bmv2 and tofino switches

Change-Id: If900b0bdbf9a41b8885c692ccba18a3b1bc580cc
diff --git a/TestON/drivers/common/cli/onosclusterdriver.py b/TestON/drivers/common/cli/onosclusterdriver.py
index 83d4295..520250b 100755
--- a/TestON/drivers/common/cli/onosclusterdriver.py
+++ b/TestON/drivers/common/cli/onosclusterdriver.py
@@ -56,27 +56,19 @@
 
         We will look into each of the node's component handles to try to find the attreibute, looking at REST first
         """
-        usedDriver = False
         if hasattr( self.REST, name ):
-            if not usedDriver:
-                usedDriver = True
-                main.log.debug( "%s: Using Rest driver's attribute for '%s'" % ( self.name, name ) )
-                f = getattr( self.REST, name )
+            main.log.debug( "%s: Using Rest driver's attribute for '%s'" % ( self.name, name ) )
+            return getattr( self.REST, name )
         if hasattr( self.CLI, name ):
-            if not usedDriver:
-                usedDriver = True
-                main.log.debug( "%s: Using CLI driver's attribute for '%s'" % ( self.name, name ) )
-                f = getattr( self.CLI, name )
+            main.log.debug( "%s: Using CLI driver's attribute for '%s'" % ( self.name, name ) )
+            return getattr( self.CLI, name )
         if hasattr( self.Bench, name ):
-            if not usedDriver:
-                usedDriver = True
-                main.log.debug( "%s: Using Bench driver's attribute for '%s'" % ( self.name, name ) )
-                f = getattr( self.Bench, name )
-        if usedDriver:
-            return f
+            main.log.debug( "%s: Using Bench driver's attribute for '%s'" % ( self.name, name ) )
+            return getattr( self.Bench, name )
         raise AttributeError( "Could not find the attribute %s in %r or it's component handles" % ( name, self ) )
 
-    def __init__( self, name, ipAddress, CLI=None, REST=None, Bench=None, pos=None, userName=None, server=None ):
+    def __init__( self, name, ipAddress, CLI=None, REST=None, Bench=None, pos=None,
+                  userName=None, server=None, dockerPrompt=None ):
         # TODO: validate these arguments
         self.name = str( name )
         self.ipAddress = ipAddress
@@ -88,6 +80,7 @@
         self.ip_address = ipAddress
         self.user_name = userName
         self.server = server
+        self.dockerPrompt = dockerPrompt
 
 class OnosClusterDriver( CLI ):
 
@@ -98,6 +91,8 @@
         self.name = None
         self.home = None
         self.handle = None
+        self.useDocker = False
+        self.dockerPrompt = None
         self.nodes = []
         super( OnosClusterDriver, self ).__init__()
 
@@ -127,11 +122,17 @@
                     self.karafPass = self.options[ key ]
                 elif key == "cluster_name":
                     prefix = self.options[ key ]
+                elif key == "useDocker":
+                    self.useDocker = "True" == self.options[ key ]
+                elif key == "docker_prompt":
+                    self.dockerPrompt = self.options[ key ]
 
             self.home = self.checkOptions( self.home, "~/onos" )
             self.karafUser = self.checkOptions( self.karafUser, self.user_name )
             self.karafPass = self.checkOptions( self.karafPass, self.pwd )
             prefix = self.checkOptions( prefix, "ONOS" )
+            self.useDocker = self.checkOptions( self.useDocker, False )
+            self.dockerPrompt = self.checkOptions( self.dockerPrompt, "~/onos#" )
 
             self.name = self.options[ 'name' ]
 
@@ -435,4 +436,6 @@
             rest = self.createRestComponent( restName, ip )
             bench = self.createBenchComponent( benchName )
             server = self.createServerComponent( serverName, ip ) if createServer else None
-            self.nodes.append( Controller( prefix + str( i ), ip, cli, rest, bench, i - 1, self.user_name, server=server ) )
+            self.nodes.append( Controller( prefix + str( i ), ip, cli, rest, bench, i - 1,
+                                           self.user_name, server=server,
+                                           dockerPrompt=self.dockerPrompt ) )