From 736db20c9f1e3b13893a14e51dad7eb516f9325e Mon Sep 17 00:00:00 2001 From: cody burkard <cody@onlab.us> Date: Thu, 2 Oct 2014 06:00:14 -0700 Subject: [PATCH] merge HostWithPrivateDirs into Host --- examples/bind.py | 11 ++++------ examples/miniedit.py | 33 ++++-------------------------- mininet/node.py | 48 ++++++++++++++++++-------------------------- 3 files changed, 27 insertions(+), 65 deletions(-) diff --git a/examples/bind.py b/examples/bind.py index 287c97ab..4bc30a87 100755 --- a/examples/bind.py +++ b/examples/bind.py @@ -35,7 +35,7 @@ """ from mininet.net import Mininet -from mininet.node import Host, HostWithPrivateDirs +from mininet.node import Host from mininet.cli import CLI from mininet.topo import SingleSwitchTopo from mininet.log import setLogLevel, info, debug @@ -51,15 +51,12 @@ def testHostWithPrivateDirs(): privateDirs = [ ( '/var/log', '/tmp/%(name)s/var/log' ), ( '/var/run', '/tmp/%(name)s/var/run' ), '/var/mn' ] - host = partial( HostWithPrivateDirs, + host = partial( Host, privateDirs=privateDirs ) net = Mininet( topo=topo, host=host ) net.start() - directories = [] - for directory in privateDirs: - directories.append( directory[ 0 ] - if isinstance( directory, tuple ) - else directory ) + directories = [ directory[ 0 ] if isinstance( directory, tuple ) + else directory for directory in privateDirs ] info( 'Private Directories:', directories, '\n' ) CLI( net ) net.stop() diff --git a/examples/miniedit.py b/examples/miniedit.py index 0fcae604..f0d84688 100755 --- a/examples/miniedit.py +++ b/examples/miniedit.py @@ -43,7 +43,7 @@ from mininet.util import custom, customConstructor from mininet.term import makeTerm, cleanUpScreens from mininet.node import Controller, RemoteController, NOX, OVSController -from mininet.node import CPULimitedHost, Host, Node, HostWithPrivateDirs +from mininet.node import CPULimitedHost, Host, Node from mininet.node import OVSKernelSwitch, OVSSwitch, UserSwitch from mininet.link import TCLink, Intf, Link from mininet.cli import CLI @@ -78,32 +78,6 @@ 'cfs': custom( CPULimitedHost, sched='cfs' ) } -class CPULimitedHostWithPrivateDirs( CPULimitedHost ): - "Host with private directories" - - def __init__( self, name, sched='cfs', **kwargs ): - "privateDirs: list of private directory strings or tuples" - self.name = name - self.privateDirs = kwargs.pop( 'privateDirs', [] ) - CPULimitedHost.__init__( self, name, sched, **kwargs ) - self.mountPrivateDirs() - - def mountPrivateDirs( self ): - "mount private directories" - for directory in self.privateDirs: - if isinstance( directory, tuple ): - # mount given private directory - privateDir = directory[ 1 ] % self.__dict__ - mountPoint = directory[ 0 ] - self.cmd( 'mkdir -p %s' % privateDir ) - self.cmd( 'mkdir -p %s' % mountPoint ) - self.cmd( 'mount --bind %s %s' % - ( privateDir, mountPoint ) ) - else: - # mount temporary filesystem on directory - self.cmd( 'mkdir -p %s' % directory ) - self.cmd( 'mount -n -t tmpfs tmpfs %s' % directory ) - class InbandController( RemoteController ): def checkListening( self ): @@ -2784,16 +2758,17 @@ def buildNodes( self, net): # Create the correct host class if 'cores' in opts or 'cpu' in opts: if ('privateDirectory' in opts): - hostCls = partial( CPULimitedHostWithPrivateDirs, + hostCls = partial( CPULimitedHost, privateDirs=opts['privateDirectory'] ) else: hostCls=CPULimitedHost else: if ('privateDirectory' in opts): - hostCls = partial( HostWithPrivateDirs, + hostCls = partial( Host, privateDirs=opts['privateDirectory'] ) else: hostCls=Host + print hostCls newHost = net.addHost( name, cls=hostCls, ip=ip, diff --git a/mininet/node.py b/mininet/node.py index c82d2932..d762b250 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -75,12 +75,14 @@ class Node( object ): def __init__( self, name, inNamespace=True, **params ): """name: name of node inNamespace: in network namespace? + privateDirs: list of private directory strings or tuples params: Node parameters (see config() for details)""" # Make sure class actually works self.checkSetup() self.name = params.get( 'name', name ) + self.privateDirs = params.get( 'privateDirs', [] ) self.inNamespace = params.get( 'inNamespace', inNamespace ) # Stash configuration parameters for future reference @@ -100,6 +102,7 @@ def __init__( self, name, inNamespace=True, **params ): # Start command interpreter shell self.startShell() + self.mountPrivateDirs() # File descriptor to node mapping support # Class variables and methods @@ -161,6 +164,22 @@ def startShell( self, mnopts=None ): self.cmd( 'stty -echo' ) self.cmd( 'set +m' ) + def mountPrivateDirs( self ): + "mount private directories" + for directory in self.privateDirs: + if isinstance( directory, tuple ): + # mount given private directory + privateDir = directory[ 1 ] % self.__dict__ + mountPoint = directory[ 0 ] + self.cmd( 'mkdir -p %s' % privateDir ) + self.cmd( 'mkdir -p %s' % mountPoint ) + self.cmd( 'mount --bind %s %s' % + ( privateDir, mountPoint ) ) + else: + # mount temporary filesystem on directory + self.cmd( 'mkdir -p %s' % directory ) + self.cmd( 'mount -n -t tmpfs tmpfs %s' % directory ) + def _popen( self, cmd, **params ): """Internal method: spawn and return a process cmd: command to run (list) @@ -590,12 +609,10 @@ def setup( cls ): "Make sure our class dependencies are available" pathCheck( 'mnexec', 'ifconfig', moduleName='Mininet') - class Host( Node ): "A host is simply a Node" pass - class CPULimitedHost( Host ): "CPU limited host" @@ -762,33 +779,6 @@ def init( cls ): mountCgroups() cls.inited = True -class HostWithPrivateDirs( Host ): - "Host with private directories" - - def __init__( self, name, *args, **kwargs ): - "privateDirs: list of private directory strings or tuples" - self.name = name - self.privateDirs = kwargs.pop( 'privateDirs', [] ) - Host.__init__( self, name, *args, **kwargs ) - self.mountPrivateDirs() - - def mountPrivateDirs( self ): - "mount private directories" - for directory in self.privateDirs: - if isinstance( directory, tuple ): - # mount given private directory - privateDir = directory[ 1 ] % self.__dict__ - mountPoint = directory[ 0 ] - self.cmd( 'mkdir -p %s' % privateDir ) - self.cmd( 'mkdir -p %s' % mountPoint ) - self.cmd( 'mount --bind %s %s' % - ( privateDir, mountPoint ) ) - else: - # mount temporary filesystem on directory - self.cmd( 'mkdir -p %s' % directory ) - self.cmd( 'mount -n -t tmpfs tmpfs %s' % directory ) - - # Some important things to note: # -- GitLab