def __setCaptureWorkdir(self): """ Open a file dialog for choosing the location of local hypervisor working directory """ capture_default_working_directory = '.' if os.environ.has_key("TEMP"): capture_default_working_directory = os.environ["TEMP"] elif os.environ.has_key("TMP"): capture_default_working_directory = os.environ["TMP"] elif os.path.exists('/tmp'): capture_default_working_directory = unicode('/tmp') fb = fileBrowser(translate('UiConfig_PreferencesCapture', 'Local capture working directory'), directory=capture_default_working_directory, parent=globals.preferencesWindow) path = fb.getDir() if path: path = os.path.normpath(path) self.CaptureWorkingDirectory.setText(path) if sys.platform.startswith('win'): try: path.encode('ascii') except: QtGui.QMessageBox.warning(globals.preferencesWindow, translate("Page_PreferencesCapture", "Capture directory"), translate("Page_PreferencesCapture", "The path you have selected should contains only ascii (English) characters. Dynamips (Cygwin DLL) doesn't support unicode on Windows!")) if not testIfWritableDir(path): QtGui.QMessageBox.critical(globals.preferencesWindow, translate("Page_PreferencesCapture", "Capture directory"), translate("Page_PreferencesCapture", "Capture directory must be writable!"))
def __setDynamipsWorkdir(self): """ Open a file dialog for choosing the location of local hypervisor working directory """ dynamips_default_working_directory = '.' if os.environ.has_key("TEMP"): dynamips_default_working_directory = os.environ["TEMP"] elif os.environ.has_key("TMP"): dynamips_default_working_directory = os.environ["TMP"] elif os.path.exists('/tmp'): dynamips_default_working_directory = unicode('/tmp') fb = fileBrowser(translate('UiConfig_PreferencesDynamips', 'Local hypervisor working directory'), directory=dynamips_default_working_directory, parent=globals.preferencesWindow) path = fb.getDir() if path: self.dynamips_workdir.setText(os.path.normpath(path)) if sys.platform.startswith('win'): try: path.encode('ascii') except: QtGui.QMessageBox.warning( globals.preferencesWindow, translate("UiConfig_PreferencesDynamips", "Working directory"), translate( "UiConfig_PreferencesDynamips", "The path you have selected should contains only ascii (English) characters. Dynamips (Cygwin DLL) doesn't support unicode on Windows!" )) if not testIfWritableDir(path): QtGui.QMessageBox.critical( globals.preferencesWindow, translate("UiConfig_PreferencesDynamips", "Working directory"), translate("UiConfig_PreferencesDynamips", "Dynamips working directory must be writable!"))
def slotSelectVBoxWrapperWorkdir(self): """ Get a working directory for VBoxwrapper from the file system """ vboxwrapper_default_working_directory = '.' if os.environ.has_key("TEMP"): vboxwrapper_default_working_directory = os.environ["TEMP"] elif os.environ.has_key("TMP"): vboxwrapper_default_working_directory = os.environ["TMP"] elif os.path.exists('/tmp'): vboxwrapper_default_working_directory = unicode('/tmp') fb = fileBrowser(translate('UiConfig_PreferencesVirtualBox', 'Local VirtualBox working directory'), directory=vboxwrapper_default_working_directory, parent=globals.preferencesWindow) path = fb.getDir() if path: path = os.path.normpath(path) self.lineEditVBoxwrapperWorkdir.setText(path) if not testIfWritableDir(path): QtGui.QMessageBox.critical(globals.preferencesWindow, translate("UiConfig_PreferencesVirtualBox", "Working directory"), translate("UiConfig_PreferencesVirtualBox", "Vbox working directory must be writable!"))
def __testDynamips(self): if len(globals.GApp.topology.nodes): reply = QtGui.QMessageBox.question( self, translate("UiConfig_PreferencesDynamips", "Message"), translate( "UiConfig_PreferencesDynamips", "This action is going to delete your current topology, would you like to continue?" ), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.No: return self.saveConf() if globals.GApp.systconf['dynamips'].path: if os.path.exists(globals.GApp.systconf['dynamips'].path) == False: self.labelDynamipsStatus.setText( '<font color="red">' + translate("UiConfig_PreferencesDynamips", "Dynamips path doesn't exist") + '</font>') return if not sys.platform.startswith('win') and not os.access( globals.GApp.systconf['dynamips'].path, os.X_OK): self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Dynamips path isn't marked as executable.<br>Please fix using the following command:<br>chmod +x path_to_dynamips" ) + '</font>') return try: p = sub.Popen([globals.GApp.systconf['dynamips'].path, '--help'], stdout=sub.PIPE) dynamips_stdout = p.communicate() except OSError: self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Failed to start Dynamips") + '</font>') return try: if not dynamips_stdout[0].splitlines()[0].__contains__('version'): self.labelDynamipsStatus.setText( '<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to determine version of Dynamips.") + '</font>') return version_raw = dynamips_stdout[0].splitlines()[0].split( 'version')[1].lstrip() version_1st = int(version_raw.split('.')[0]) version_2nd = int(version_raw.split('.')[1]) version_3rd = int(version_raw.split('.')[2].split('-')[0]) dynamips_ver = str(version_1st) + '.' + str( version_2nd) + '.' + str( version_3rd) + '-' + version_raw.split('.')[2].split( '-')[1] globals.GApp.systconf['dynamips'].detected_version = unicode( dynamips_ver) ConfDB().sync() except: self.labelDynamipsStatus.setText( '<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to determine version of Dynamips.") + '</font>') return if version_2nd < 2 or version_3rd < 8: self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Found Dynamips %s, which is not supported. Use 0.2.8+ instead." ) % dynamips_ver + '</font>') return if not testIfWritableDir(globals.GApp.systconf['dynamips'].workdir): self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Dynamips working directory does not exist or is not writable") + '</font>') return track = tracker.portTracker() # Check if any of the first 10 ports are free to use by hypervisors not_free_ports = track.getNotAvailableTcpPortRange( globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.hypervisor_baseport, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base port value<br>or close these ports" % str(not_free_ports)) + '</font>') return # Check if any of the first 10 ports are free to use for dynamips console ports not_free_ports = track.getNotAvailableTcpPortRange( globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.GApp.systconf['dynamips'].baseConsole, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base console value<br>or close these ports" % str(not_free_ports)) + '</font>') return # Check if any of the first 10 ports are free to use for dynamips aux ports not_free_ports = track.getNotAvailableTcpPortRange( globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.GApp.systconf['dynamips'].baseAUX, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate( "UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base AUX value<br>or close these ports" % str(not_free_ports)) + '</font>') return if globals.GApp.systconf['dynamips'].path: globals.GApp.workspace.clear() globals.GApp.HypervisorManager = HypervisorManager() if globals.GApp.HypervisorManager.preloadDynamips(): self.labelDynamipsStatus.setText( '<font color="green">' + translate("UiConfig_PreferencesDynamips", "Dynamips %s successfully started") % dynamips_ver + '</font>') else: self.labelDynamipsStatus.setText( '<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to start Dynamips") + '</font>')
def __testDynamips(self): if len(globals.GApp.topology.nodes): reply = QtGui.QMessageBox.question(self, translate("UiConfig_PreferencesDynamips", "Message"), translate("UiConfig_PreferencesDynamips", "This action is going to delete your current topology, would you like to continue?"), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.No: return self.saveConf() if globals.GApp.systconf['dynamips'].path: if os.path.exists(globals.GApp.systconf['dynamips'].path) == False: self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Dynamips path doesn't exist") + '</font>') return if not sys.platform.startswith('win') and not os.access(globals.GApp.systconf['dynamips'].path, os.X_OK): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Dynamips path isn't marked as executable.<br>Please fix using the following command:<br>chmod +x path_to_dynamips") + '</font>') return try: p = sub.Popen([globals.GApp.systconf['dynamips'].path, '--help'], stdout=sub.PIPE) dynamips_stdout = p.communicate() except OSError: self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to start Dynamips") + '</font>') return try: if not dynamips_stdout[0].splitlines()[0].__contains__('version'): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to determine version of Dynamips.") + '</font>') return version_raw = dynamips_stdout[0].splitlines()[0].split('version')[1].lstrip() version_1st = int(version_raw.split('.')[0]) version_2nd = int(version_raw.split('.')[1]) version_3rd = int(version_raw.split('.')[2].split('-')[0]) dynamips_ver = str(version_1st)+'.'+str(version_2nd)+'.'+str(version_3rd)+'-'+version_raw.split('.')[2].split('-')[1] globals.GApp.systconf['dynamips'].detected_version = unicode(dynamips_ver) ConfDB().sync() except: self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to determine version of Dynamips.") + '</font>') return if version_2nd < 2 or version_3rd < 8: self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Found Dynamips %s, which is not supported. Use 0.2.8+ instead.") % dynamips_ver + '</font>') return if not testIfWritableDir(globals.GApp.systconf['dynamips'].workdir): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Dynamips working directory does not exist or is not writable") + '</font>') return track = tracker.portTracker() # Check if any of the first 10 ports are free to use by hypervisors not_free_ports = track.getNotAvailableTcpPortRange(globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.hypervisor_baseport, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base port value<br>or close these ports" % str(not_free_ports)) + '</font>') return # Check if any of the first 10 ports are free to use for dynamips console ports not_free_ports = track.getNotAvailableTcpPortRange(globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.GApp.systconf['dynamips'].baseConsole, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base console value<br>or close these ports" % str(not_free_ports)) + '</font>') return # Check if any of the first 10 ports are free to use for dynamips aux ports not_free_ports = track.getNotAvailableTcpPortRange(globals.GApp.systconf['dynamips'].HypervisorManager_binding, globals.GApp.systconf['dynamips'].baseAUX, 10) if len(not_free_ports): self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Ports already in use %s<br>Please choose another base AUX value<br>or close these ports" % str(not_free_ports)) + '</font>') return if globals.GApp.systconf['dynamips'].path: globals.GApp.workspace.clear() globals.GApp.HypervisorManager = HypervisorManager() if globals.GApp.HypervisorManager.preloadDynamips(): self.labelDynamipsStatus.setText('<font color="green">' + translate("UiConfig_PreferencesDynamips", "Dynamips %s successfully started") % dynamips_ver + '</font>') else: self.labelDynamipsStatus.setText('<font color="red">' + translate("UiConfig_PreferencesDynamips", "Failed to start Dynamips") + '</font>')