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!"))
Esempio n. 2
0
    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!"))
Esempio n. 4
0
    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>')