def __init__(self, image_path, port=None, tempdir=None, debug_level=logging.DEBUG): """Initializes VMWrapper with a VM image path. Args: image_path: Path to the VM image. port: SSH port of the VM. tempdir: Temporary working directory. debug_level: Debug level for logging. """ self.image_path = image_path self.tempdir = tempdir self._tempdir_obj = None if not self.tempdir: self._tempdir_obj = osutils.TempDir(prefix='vm_wrapper', sudo_rm=True) self.tempdir = self._tempdir_obj.tempdir self.kvm_pid_path = os.path.join(self.tempdir, 'kvm.pid') self.port = (remote_access.GetUnusedPort() if port is None else remote_access.NormalizePort(port)) self.debug_level = debug_level self.ssh_settings = remote_access.CompileSSHConnectSettings( ConnectTimeout=self.SSH_CONNECT_TIMEOUT) self.agent = remote_access.RemoteAccess( remote_access.LOCALHOST, self.tempdir, self.port, debug_level=self.debug_level, interactive=False) self.device_addr = 'ssh://%s:%d' % (remote_access.LOCALHOST, self.port)
def main(argv): options = ParseArguments(argv) options.Freeze() # Configure logger. SetupLogging(options.logdir) # Configure global cherrypy parameters. cherrypy.config.update({ 'server.socket_host': '0.0.0.0', 'server.socket_port': remote_access.NormalizePort(options.port) }) mobmon_appconfig = { '/': { 'tools.staticdir.root': options.staticdir }, '/static': { 'tools.staticdir.on': True, 'tools.staticdir.dir': '' }, '/static/css': { 'tools.staticdir.dir': 'css' }, '/static/js': { 'tools.staticdir.dir': 'js' } } # Setup the mobmonitor checkfile_manager = manager.CheckFileManager(checkdir=options.checkdir) mobmonitor = MobMonitorRoot(checkfile_manager, staticdir=options.staticdir) # Start the checkfile collection and execution background task. checkfile_manager.StartCollectionExecution() # Start the Mob* Monitor. cherrypy.quickstart(mobmonitor, config=mobmon_appconfig)
def _GetPortList(desired_protocol, appc_port_list): """Get the list of ports opened for |desired_protocol| from |appc_port_list|. Args: desired_protocol: one of VALID_PROTOCOLS. appc_port_list: list of port specifications from a appc pod manifest. Returns: Instance of PortSpec. """ # The port specification is optional. if appc_port_list is None: return PortSpec(False, []) json_lib.AssertIsInstance(appc_port_list, list, 'port specification list') allow_all = False port_list = [] for port_dict in appc_port_list: json_lib.AssertIsInstance(port_dict, dict, 'port specification') port_dict = copy.deepcopy(port_dict) # By default, we open a single specified port. port_dict.setdefault(PORT_SPEC_COUNT, 1) # By default, don't set socket activated. port_dict.setdefault(PORT_SPEC_SOCKET_ACTIVATED, False) # We don't actually use the port name, but it's handy for documentation # and standard adherence to enforce its existence. port_name = json_lib.PopValueOfType( port_dict, PORT_SPEC_NAME, unicode, 'port name') logging.debug('Validating appc specifcation of "%s"', port_name) port = json_lib.PopValueOfType(port_dict, PORT_SPEC_PORT, int, 'port') protocol = json_lib.PopValueOfType( port_dict, PORT_SPEC_PROTOCOL, unicode, 'protocol') count = json_lib.PopValueOfType( port_dict, PORT_SPEC_COUNT, int, 'port range count') # We also don't use the socketActivated flag, but we should tolerate safe # values. socket_activated = json_lib.PopValueOfType( port_dict, PORT_SPEC_SOCKET_ACTIVATED, bool, 'socket activated flag') # Validate everything before acting on it. if protocol not in VALID_PROTOCOLS: raise ValueError('Port protocol must be in %r, not "%s"' % (VALID_PROTOCOLS, protocol)) if protocol != desired_protocol: continue if socket_activated != False: raise ValueError('No support for socketActivated==True in %s' % port_name) if port_dict: raise ValueError('Unknown keys found in port spec %s: %r' % (port_name, port_dict.keys())) if port == -1: # Remember that we're going to return that all ports are opened, but # continue validating all the remaining specifications. allow_all = True continue # Now we know it's not the wildcard port, and that we've never declared # a wildcard for this protocol. port = remote_access.NormalizePort(port) if count < 1: raise ValueError('May only specify positive port ranges for %s' % port_name) if port + count >= 65536: raise ValueError('Port range extends past max port number for %s' % port_name) for effective_port in xrange(port, port + count): port_list.append(effective_port) return PortSpec(allow_all, port_list)
def testNormalizePortStrOK(self): """Tests that string will be converted to integer.""" self.assertEqual(remote_access.NormalizePort('123'), 123)
def __init__(self, host='localhost', port=9991): self.host = host self.port = remote_access.NormalizePort(port)
def __init__(self, host='localhost', port=9991): self.host = 'http://%s:%s' % (host, remote_access.NormalizePort(port))