Ejemplo n.º 1
0
    def _refreshInfo(self, iou_device):

        self.uiIOUDeviceInfoTreeWidget.clear()

        # fill out the General section
        section_item = self._createSectionItem("General")
        QtGui.QTreeWidgetItem(section_item, ["Name:", iou_device["name"]])
        QtGui.QTreeWidgetItem(section_item, ["Server:", iou_device["server"]])
        QtGui.QTreeWidgetItem(section_item, ["Image:", iou_device["image"]])
        if iou_device["initial_config"]:
            QtGui.QTreeWidgetItem(section_item, ["Initial config:", iou_device["initial_config"]])

        if iou_device["use_default_iou_values"]:
            QtGui.QTreeWidgetItem(section_item, ["RAM:", "default"])
            QtGui.QTreeWidgetItem(section_item, ["NVRAM:", "default"])
        else:
            QtGui.QTreeWidgetItem(section_item, ["RAM:", "{} MiB".format(iou_device["ram"])])
            QtGui.QTreeWidgetItem(section_item, ["NVRAM:", "{} KiB".format(iou_device["nvram"])])

        # fill out the Network section
        section_item = self._createSectionItem("Network")
        QtGui.QTreeWidgetItem(section_item, ["Ethernet adapters:", "{} ({} interfaces)".format(iou_device["ethernet_adapters"],
                                                                                               iou_device["ethernet_adapters"] * 4)])
        QtGui.QTreeWidgetItem(section_item, ["Serial adapters:", "{} ({} interfaces)".format(iou_device["serial_adapters"],
                                                                                             iou_device["serial_adapters"] * 4)])

        self.uiIOUDeviceInfoTreeWidget.expandAll()
        self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(0)
        self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(1)
Ejemplo n.º 2
0
    def _refreshInfo(self, vbox_vm):

        self.uiVirtualBoxVMInfoTreeWidget.clear()

        # fill out the General section
        section_item = self._createSectionItem("General")
        QtGui.QTreeWidgetItem(section_item, ["VM name:", vbox_vm["vmname"]])
        QtGui.QTreeWidgetItem(section_item, ["RAM:", str(vbox_vm["ram"])])
        QtGui.QTreeWidgetItem(section_item, ["Server:", vbox_vm["server"]])
        QtGui.QTreeWidgetItem(section_item, [
            "Remote console enabled:", "{}".format(
                vbox_vm["enable_remote_console"])
        ])
        QtGui.QTreeWidgetItem(
            section_item,
            ["Headless mode enabled:", "{}".format(vbox_vm["headless"])])
        QtGui.QTreeWidgetItem(
            section_item,
            ["Linked base VM:", "{}".format(vbox_vm["linked_base"])])

        # fill out the Network section
        section_item = self._createSectionItem("Network")
        QtGui.QTreeWidgetItem(
            section_item, ["Adapters:", str(vbox_vm["adapters"])])
        QtGui.QTreeWidgetItem(
            section_item,
            ["Use any adapter:", "{}".format(vbox_vm["use_any_adapter"])])
        QtGui.QTreeWidgetItem(section_item, ["Type:", vbox_vm["adapter_type"]])

        self.uiVirtualBoxVMInfoTreeWidget.expandAll()
        self.uiVirtualBoxVMInfoTreeWidget.resizeColumnToContents(0)
        self.uiVirtualBoxVMInfoTreeWidget.resizeColumnToContents(1)
Ejemplo n.º 3
0
    def loadSettings(self, settings, node, group=False):
        """
        Loads the ATM bridge settings.

        :param settings: the settings (dictionary)
        :param node: Node instance
        :param group: indicates the settings apply to a group
        """

        if not group:
            self.uiNameLineEdit.setText(settings["name"])
        else:
            self.uiNameLineEdit.setEnabled(False)

        self.uiMappingTreeWidget.clear()
        self._mapping = {}
        self._node = node

        for ethernet_port, destination in settings["mappings"].items():
            item = QtGui.QTreeWidgetItem(self.uiMappingTreeWidget)
            item.setText(0, ethernet_port)
            item.setText(1, destination)
            self.uiMappingTreeWidget.addTopLevelItem(item)
            self._mapping[ethernet_port] = destination

        self.uiMappingTreeWidget.resizeColumnToContents(0)
        self.uiMappingTreeWidget.resizeColumnToContents(1)
    def _addPortSlot(self):
        """
        Adds a new port.
        """

        port = self.uiPortSpinBox.value()
        vlan = self.uiVlanSpinBox.value()
        port_type = self.uiPortTypeComboBox.currentText()

        if port in self._ports:
            # update a given entry in the tree widget
            item = self.uiPortsTreeWidget.findItems(
                str(port), QtCore.Qt.MatchFixedString)[0]
            item.setText(1, str(vlan))
            item.setText(2, port_type)

        else:
            # add a new entry in the tree widget
            item = QtGui.QTreeWidgetItem(self.uiPortsTreeWidget)
            item.setText(0, str(port))
            item.setText(1, str(vlan))
            item.setText(2, port_type)
            self.uiPortsTreeWidget.addTopLevelItem(item)

        self._ports[port] = {"type": port_type, "vlan": vlan}

        self.uiPortSpinBox.setValue(max(self._ports) + 1)
        self.uiPortsTreeWidget.resizeColumnToContents(0)
Ejemplo n.º 5
0
    def _addMappingSlot(self):
        """
        Adds a new mapping.
        """

        source_port = self.uiSourcePortSpinBox.value()
        source_dlci = self.uiSourceDLCISpinBox.value()
        destination_port = self.uiDestinationPortSpinBox.value()
        destination_dlci = self.uiDestinationDLCISpinBox.value()

        if source_port == destination_port:
            QtGui.QMessageBox.critical(self, self._node.name(),
                                       "Same source and destination ports")
            return

        source = "{port}:{dlci}".format(port=source_port, dlci=source_dlci)
        destination = "{port}:{dlci}".format(port=destination_port,
                                             dlci=destination_dlci)

        if source in self._mapping or destination in self._mapping:
            QtGui.QMessageBox.critical(self, self._node.name(),
                                       "Mapping already defined")
            return

        item = QtGui.QTreeWidgetItem(self.uiMappingTreeWidget)
        item.setText(0, source)
        item.setText(1, destination)
        self.uiMappingTreeWidget.addTopLevelItem(item)
        self.uiSourcePortSpinBox.setValue(source_port + 1)
        self.uiSourceDLCISpinBox.setValue(source_dlci + 1)
        self.uiDestinationPortSpinBox.setValue(destination_port + 1)
        self.uiDestinationDLCISpinBox.setValue(destination_dlci + 1)
        self._mapping[source] = destination
Ejemplo n.º 6
0
    def _remoteServerAddSlot(self):
        """
        Adds a new remote server.
        """

        if len(self._remote_servers) == 1:
            QtGui.QMessageBox.critical(
                self, "Remote server",
                "Sorry we do not support multiple remote servers yet!")
            return

        host = self.uiRemoteServerPortLineEdit.text()
        port = self.uiRemoteServerPortSpinBox.value()

        # check if the remote server is already defined
        remote_server = "{host}:{port}".format(host=host, port=port)
        if remote_server in self._remote_servers:
            QtGui.QMessageBox.critical(
                self, "Remote server",
                "Remote server {} is already defined.".format(remote_server))
            return

        # add a new entry in the tree widget
        item = QtGui.QTreeWidgetItem(self.uiRemoteServersTreeWidget)
        item.setText(0, host)
        item.setText(1, str(port))

        # keep track of this remote server
        self._remote_servers[remote_server] = {"host": host, "port": port}

        self.uiRemoteServerPortSpinBox.setValue(
            self.uiRemoteServerPortSpinBox.value() + 1)
        self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
Ejemplo n.º 7
0
    def _addMappingSlot(self):
        """
        Adds a new mapping.
        """

        source_port = self.uiSourcePortSpinBox.value()
        source_vpi = self.uiSourceVPISpinBox.value()
        source_vci = self.uiSourceVCISpinBox.value()
        destination_port = self.uiDestinationPortSpinBox.value()
        destination_vpi = self.uiDestinationVPISpinBox.value()
        destination_vci = self.uiDestinationVCISpinBox.value()

        if self.uiVPICheckBox.checkState() == QtCore.Qt.Unchecked:
            source = "{port}:{vpi}:{vci}".format(port=source_port,
                                                 vpi=source_vpi,
                                                 vci=source_vci)

            destination = "{port}:{vpi}:{vci}".format(port=destination_port,
                                                      vpi=destination_vpi,
                                                      vci=destination_vci)
        else:
            source = "{port}:{vpi}".format(port=source_port, vpi=source_vpi)
            destination = "{port}:{vpi}".format(port=destination_port, vpi=destination_vpi)

        if source in self._mapping or destination in self._mapping:
            QtGui.QMessageBox.critical(self, self._node.name(), "Mapping already defined")
            return

        item = QtGui.QTreeWidgetItem(self.uiMappingTreeWidget)
        item.setText(0, source)
        item.setText(1, destination)
        self.uiMappingTreeWidget.addTopLevelItem(item)
        self.uiSourcePortSpinBox.setValue(source_port + 1)
        self.uiDestinationPortSpinBox.setValue(destination_port + 1)
        self._mapping[source] = destination
Ejemplo n.º 8
0
    def loadPreferences(self):
        """
        Loads the server preferences.
        """

        servers = Servers.instance()

        # load the local server preferences
        local_server = servers.localServer()
        index = self.uiLocalServerHostComboBox.findData(local_server.host)
        if index != -1:
            self.uiLocalServerHostComboBox.setCurrentIndex(index)

        self.uiLocalServerPortSpinBox.setValue(local_server.port)
        self.uiLocalServerPathLineEdit.setText(servers.localServerPath())
        self.uiLocalServerAutoStartCheckBox.setChecked(
            servers.localServerAutoStart())

        # load remote server preferences
        self._remote_servers.clear()
        self.uiRemoteServersTreeWidget.clear()
        for server_id, server in servers.remoteServers().items():
            host = server.host
            port = server.port
            self._remote_servers[server_id] = {"host": host, "port": port}
            item = QtGui.QTreeWidgetItem(self.uiRemoteServersTreeWidget)
            item.setText(0, host)
            item.setText(1, str(port))

        self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
Ejemplo n.º 9
0
    def _qemuVMNewSlot(self):
        """
        Creates a new VM.
        """

        wizard = QemuVMWizard(self._qemu_vms, parent=self)
        wizard.show()
        if wizard.exec_():

            new_vm_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_vm_settings["server"],
                                           name=new_vm_settings["name"])
            if key in self._qemu_vms:
                QtGui.QMessageBox.critical(
                    self, "New QEMU VM", "VM name {} already exists".format(
                        new_vm_settings["name"]))
                return
            self._qemu_vms[key] = QEMU_VM_SETTINGS.copy()
            self._qemu_vms[key].update(new_vm_settings)

            item = QtGui.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
            item.setText(0, self._qemu_vms[key]["name"])
            item.setIcon(0, QtGui.QIcon(self._qemu_vms[key]["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiQemuVMsTreeWidget.setCurrentItem(item)

            if self._qemu_vms[key]["server"] == 'cloud':
                self._qemu_vms[key]["options"] = "-nographic"
                self._uploadImages(new_vm_settings)
Ejemplo n.º 10
0
    def _addMappingSlot(self):
        """
        Adds a new mapping.
        """

        ethernet_port = self.uiEthernetPortSpinBox.value()
        atm_port = self.uiATMPortSpinBox.value()
        atm_vpi = self.uiATMVPISpinBox.value()
        atm_vci = self.uiATMVCISpinBox.value()

        if ethernet_port == atm_port:
            QtGui.QMessageBox.critical(self, self._node.name(),
                                       "Same source and destination ports")
            return

        destination = "{port}:{vpi}:{vci}".format(port=atm_port,
                                                  vpi=atm_vpi,
                                                  vci=atm_vci)

        if destination in self._mapping:
            QtGui.QMessageBox.critical(self, self._node.name(),
                                       "Mapping already defined")
            return

        item = QtGui.QTreeWidgetItem(self.uiMappingTreeWidget)
        item.setText(0, str(ethernet_port))
        item.setText(1, destination)
        self.uiMappingTreeWidget.addTopLevelItem(item)
        self.uiEthernetPortSpinBox.setValue(ethernet_port + 1)
        self.uiATMPortSpinBox.setValue(atm_port + 1)
        self._mapping[ethernet_port] = destination
    def loadSettings(self, settings, node, group=False):
        """
        Loads the Ethernet switch settings.

        :param settings: the settings (dictionary)
        :param node: Node instance
        :param group: indicates the settings apply to a group
        """

        if not group:
            self.uiNameLineEdit.setText(settings["name"])
        else:
            self.uiNameLineEdit.setEnabled(False)

        self.uiPortsTreeWidget.clear()
        self._ports = {}
        self._node = node

        for port, info in settings["ports"].items():
            item = QtGui.QTreeWidgetItem(self.uiPortsTreeWidget)
            item.setText(0, str(port))
            item.setText(1, str(info["vlan"]))
            item.setText(2, info["type"])
            self.uiPortsTreeWidget.addTopLevelItem(item)
            self._ports[port] = info

        self.uiPortsTreeWidget.resizeColumnToContents(0)
        self.uiPortsTreeWidget.resizeColumnToContents(1)
        if len(self._ports) > 0:
            self.uiPortSpinBox.setValue(max(self._ports) + 1)
Ejemplo n.º 12
0
    def _createSectionItem(self, name):

        section_item = QtGui.QTreeWidgetItem(self.uiQemuVMInfoTreeWidget)
        section_item.setText(0, name)
        font = section_item.font(0)
        font.setBold(True)
        section_item.setFont(0, font)
        return section_item
    def _iouImageSaveSlot(self):
        """
        Adds/Saves an IOU image.
        """

        path = self.uiIOUPathLineEdit.text()
        startup_config = self.uiStartupConfigLineEdit.text()
        use_default_iou_values = self.uiDefaultValuesCheckBox.isChecked()
        nvram = self.uiNVRAMSpinBox.value()
        ram = self.uiRAMSpinBox.value()

        # basename doesn't work on Unix with Windows paths
        if not sys.platform.startswith(
                'win') and len(path) > 2 and path[1] == ":":
            import ntpath
            image = ntpath.basename(path)
        else:
            image = os.path.basename(path)

        #TODO: mutiple remote server
        if IOU.instance().settings()["use_local_server"]:
            server = "local"
        else:
            server = next(iter(Servers.instance()))
            if not server:
                QtGui.QMessageBox.critical(self, "IOU image",
                                           "No remote server available!")
                return
            server = server.host

        key = "{server}:{image}".format(server=server, image=image)
        item = self.uiIOUImagesTreeWidget.currentItem()

        if key in self._iou_images and item and item.text(0) == image:
            item.setText(0, image)
            item.setText(1, server)
        elif key in self._iou_images:
            return
        else:
            # add a new entry in the tree widget
            item = QtGui.QTreeWidgetItem(self.uiIOUImagesTreeWidget)
            item.setText(0, image)
            item.setText(1, server)
            self.uiIOUImagesTreeWidget.setCurrentItem(item)

        self._iou_images[key] = {
            "path": path,
            "image": image,
            "startup_config": startup_config,
            "use_default_iou_values": use_default_iou_values,
            "ram": ram,
            "nvram": nvram,
            "server": server
        }

        self.uiIOUImagesTreeWidget.resizeColumnToContents(0)
        self.uiIOUImagesTreeWidget.resizeColumnToContents(1)
Ejemplo n.º 14
0
    def _iouDeviceNewSlot(self):
        """
        Creates a new IOU device.
        """

        wizard = IOUDeviceWizard(self._iou_devices, parent=self)
        wizard.show()
        if wizard.exec_():

            new_device_settings = wizard.getSettings()
            key = "{server}:{name}".format(
                server=new_device_settings["server"],
                name=new_device_settings["name"])
            self._iou_devices[key] = IOU_DEVICE_SETTINGS.copy()
            self._iou_devices[key].update(new_device_settings)

            item = QtGui.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
            item.setText(0, self._iou_devices[key]["name"])
            item.setIcon(0,
                         QtGui.QIcon(self._iou_devices[key]["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOUDevicesTreeWidget.setCurrentItem(item)

            if new_device_settings["server"] == 'cloud':
                import logging
                log = logging.getLogger(__name__)

                # Start uploading the image to cloud files
                self._upload_image_progress_dialog = QtGui.QProgressDialog(
                    "Uploading image file {}".format(
                        new_device_settings['image']),
                    "Cancel",
                    0,
                    0,
                    parent=self)
                self._upload_image_progress_dialog.setWindowModality(
                    QtCore.Qt.WindowModal)
                self._upload_image_progress_dialog.setWindowTitle(
                    "IOU image upload")
                self._upload_image_progress_dialog.show()
                try:
                    src = self._iou_devices[key]['path']
                    # Eg: images/IOU/i86.bin
                    dst = 'images/IOU/{}'.format(
                        self._iou_devices[key]['image'])
                    upload_thread = UploadFilesThread(
                        self,
                        MainWindow.instance().cloudSettings(), [(src, dst)])
                    upload_thread.completed.connect(self._imageUploadComplete)
                    upload_thread.start()
                except Exception as e:
                    self._upload_image_progress_dialog.reject()
                    log.error(e)
                    QtGui.QMessageBox.critical(
                        self, "IOU image upload",
                        "Error uploading IOU image: {}".format(e))
Ejemplo n.º 15
0
    def _updateRemoteServersSlot(self):
        """
        Adds/Updates the available remote servers.
        """

        servers = Servers.instance()
        self.uiRemoteServersTreeWidget.clear()
        for server in servers.remoteServers().values():
            host = server.host
            port = server.port
            item = QtGui.QTreeWidgetItem(self.uiRemoteServersTreeWidget)
            item.setText(0, host)
            item.setText(1, str(port))

        self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
    def loadPreferences(self):
        """
        Loads the IOU image & device preferences.
        """

        self._iou_images.clear()
        self.uiIOUImagesTreeWidget.clear()

        iou_images = IOU.instance().iouImages()
        for iou_image in iou_images.values():
            item = QtGui.QTreeWidgetItem(self.uiIOUImagesTreeWidget)
            item.setText(0, iou_image["image"])
            item.setText(1, iou_image["server"])

        self.uiIOUImagesTreeWidget.resizeColumnToContents(0)
        self.uiIOUImagesTreeWidget.resizeColumnToContents(1)
        self._iou_images.update(iou_images)
    def loadPreferences(self):
        """
        Loads the IOS image & router preferences.
        """

        self._ios_images.clear()
        self.uiIOSImagesTreeWidget.clear()
        ios_images = Dynamips.instance().iosImages()
        for ios_image in ios_images.values():
            item = QtGui.QTreeWidgetItem(self.uiIOSImagesTreeWidget)
            item.setText(0, ios_image["image"])
            item.setText(1, ios_image["platform"])
            item.setText(2, ios_image["server"])

        self.uiIOSImagesTreeWidget.resizeColumnToContents(0)
        self.uiIOSImagesTreeWidget.resizeColumnToContents(1)
        self._ios_images.update(ios_images)
Ejemplo n.º 18
0
    def loadPreferences(self):
        """
        Loads the IOU devices preferences.
        """

        iou_module = IOU.instance()
        self._iou_devices = copy.deepcopy(iou_module.iouDevices())
        self._items.clear()

        for key, iou_device in self._iou_devices.items():
            item = QtGui.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
            item.setText(0, iou_device["name"])
            item.setIcon(0, QtGui.QIcon(iou_device["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiIOUDevicesTreeWidget.setCurrentItem(self._items[0])
            self.uiIOUDevicesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
Ejemplo n.º 19
0
    def loadPreferences(self):
        """
        Loads the QEMU VM preferences.
        """

        qemu_module = Qemu.instance()
        self._qemu_vms = copy.deepcopy(qemu_module.qemuVMs())
        self._items.clear()

        for key, qemu_vm in self._qemu_vms.items():
            item = QtGui.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
            item.setText(0, qemu_vm["name"])
            item.setIcon(0, QtGui.QIcon(qemu_vm["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiQemuVMsTreeWidget.setCurrentItem(self._items[0])
            self.uiQemuVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
Ejemplo n.º 20
0
    def loadPreferences(self):
        """
        Loads the IOS router preferences.
        """

        dynamips_module = Dynamips.instance()
        self._ios_routers = copy.deepcopy(dynamips_module.iosRouters())
        self._items.clear()

        for key, ios_router in self._ios_routers.items():
            item = QtGui.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
            item.setText(0, ios_router["name"])
            item.setIcon(0, QtGui.QIcon(ios_router["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiIOSRoutersTreeWidget.setCurrentItem(self._items[0])
            self.uiIOSRoutersTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
Ejemplo n.º 21
0
    def loadPreferences(self):
        """
        Loads the VirtualBox VM preferences.
        """

        vbox_module = VirtualBox.instance()
        self._virtualbox_vms = copy.deepcopy(vbox_module.virtualBoxVMs())
        self._items.clear()

        for key, vbox_vm in self._virtualbox_vms.items():
            item = QtGui.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, vbox_vm["vmname"])
            item.setIcon(0, QtGui.QIcon(vbox_vm["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiVirtualBoxVMsTreeWidget.setCurrentItem(self._items[0])
            self.uiVirtualBoxVMsTreeWidget.sortByColumn(
                0, QtCore.Qt.AscendingOrder)
    def _remoteServerAddSlot(self):
        """
        Adds a new remote server.
        """

        host = self.uiRemoteServerPortLineEdit.text().strip()
        port = self.uiRemoteServerPortSpinBox.value()

        if not re.match(
                r"^[a-zA-Z0-9\.{}-]+$".format(
                    "\u0370-\u1CDF\u2C00-\u30FF\u4E00-\u9FBF"), host):
            QtGui.QMessageBox.critical(
                self, "Remote server",
                "Invalid remote server hostname {}".format(host))
            return
        if port is None or port < 1:
            QtGui.QMessageBox.critical(
                self, "Remote server",
                "Invalid remote server port {}".format(port))
            return

        # check if the remote server is already defined
        remote_server = "{host}:{port}".format(host=host, port=port)
        if remote_server in self._remote_servers:
            QtGui.QMessageBox.critical(
                self, "Remote server",
                "Remote server {} is already defined.".format(remote_server))
            return

        # add a new entry in the tree widget
        item = QtGui.QTreeWidgetItem(self.uiRemoteServersTreeWidget)
        item.setText(0, host)
        item.setText(1, str(port))

        # keep track of this remote server
        self._remote_servers[remote_server] = {"host": host, "port": port}

        self.uiRemoteServerPortSpinBox.setValue(
            self.uiRemoteServerPortSpinBox.value() + 1)
        self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
Ejemplo n.º 23
0
    def _vboxVMNewSlot(self):
        """
        Creates a new VirtualBox VM.
        """

        wizard = VirtualBoxVMWizard(self._virtualbox_vms, parent=self)
        wizard.show()
        if wizard.exec_():

            new_vm_settings = wizard.getSettings()
            key = "{server}:{vmname}".format(server=new_vm_settings["server"],
                                             vmname=new_vm_settings["vmname"])
            self._virtualbox_vms[key] = VBOX_VM_SETTINGS.copy()
            self._virtualbox_vms[key].update(new_vm_settings)

            item = QtGui.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, self._virtualbox_vms[key]["vmname"])
            item.setIcon(
                0, QtGui.QIcon(self._virtualbox_vms[key]["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiVirtualBoxVMsTreeWidget.setCurrentItem(item)
Ejemplo n.º 24
0
    def loadPreferences(self):
        """
        Loads the server preferences.
        """

        servers = Servers.instance()

        # load the local server preferences
        local_server_settings = servers.localServerSettings()
        self._populateWidgets(local_server_settings)

        # load remote server preferences
        self._remote_servers.clear()
        self.uiRemoteServersTreeWidget.clear()
        for server_id, server in servers.remoteServers().items():
            host = server.host
            port = server.port
            self._remote_servers[server_id] = {"host": host, "port": port}
            item = QtGui.QTreeWidgetItem(self.uiRemoteServersTreeWidget)
            item.setText(0, host)
            item.setText(1, str(port))

        self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
Ejemplo n.º 25
0
    def _refreshInfo(self, qemu_vm):

        self.uiQemuVMInfoTreeWidget.clear()

        # fill out the General section
        section_item = self._createSectionItem("General")
        QtGui.QTreeWidgetItem(section_item, ["VM name:", qemu_vm["name"]])
        QtGui.QTreeWidgetItem(section_item, ["Server:", qemu_vm["server"]])
        QtGui.QTreeWidgetItem(section_item,
                              ["Memory:", "{} MB".format(qemu_vm["ram"])])
        if qemu_vm["qemu_path"]:
            QtGui.QTreeWidgetItem(
                section_item,
                ["QEMU binary:",
                 os.path.basename(qemu_vm["qemu_path"])])

        # fill out the Hard disks section
        if qemu_vm["hda_disk_image"] or qemu_vm["hdb_disk_image"] or qemu_vm[
                "hdc_disk_image"] or qemu_vm["hdd_disk_image"]:
            section_item = self._createSectionItem("Hard disks")
            if qemu_vm["hda_disk_image"]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Disk image (hda):", qemu_vm["hda_disk_image"]])
            if qemu_vm["hdb_disk_image"]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Disk image (hdb):", qemu_vm["hdb_disk_image"]])
            if qemu_vm["hdc_disk_image"]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Disk image (hdc):", qemu_vm["hdc_disk_image"]])
            if qemu_vm["hdd_disk_image"]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Disk image (hdd):", qemu_vm["hdd_disk_image"]])

        # fill out the Network section
        section_item = self._createSectionItem("Network")
        QtGui.QTreeWidgetItem(
            section_item, ["Adapters:", str(qemu_vm["adapters"])])
        QtGui.QTreeWidgetItem(section_item, ["Type:", qemu_vm["adapter_type"]])

        # fill out the Linux boot section
        if qemu_vm["initrd"] or qemu_vm["kernel_image"] or qemu_vm[
                "kernel_command_line"]:
            section_item = self._createSectionItem("Linux boot")
            if qemu_vm["initrd"]:
                QtGui.QTreeWidgetItem(section_item,
                                      ["Initial RAM disk:", qemu_vm["initrd"]])
            if qemu_vm["kernel_image"]:
                QtGui.QTreeWidgetItem(
                    section_item, ["Kernel image:", qemu_vm["kernel_image"]])
            if qemu_vm["kernel_command_line"]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Kernel command line:", qemu_vm["kernel_command_line"]])

        # performance section
        section_item = self._createSectionItem("Optimizations")
        if qemu_vm["cpu_throttling"]:
            QtGui.QTreeWidgetItem(
                section_item,
                ["CPU throttling:", "{}%".format(qemu_vm["cpu_throttling"])])
        else:
            QtGui.QTreeWidgetItem(section_item,
                                  ["CPU throttling:", "disabled"])
        QtGui.QTreeWidgetItem(
            section_item, ["Process priority:", qemu_vm["process_priority"]])

        # fill out the Additional options section
        if qemu_vm["options"]:
            section_item = self._createSectionItem("Additional options")
            QtGui.QTreeWidgetItem(section_item,
                                  ["Options:", qemu_vm["options"]])

        self.uiQemuVMInfoTreeWidget.expandAll()
        self.uiQemuVMInfoTreeWidget.resizeColumnToContents(0)
        self.uiQemuVMInfoTreeWidget.resizeColumnToContents(1)
    def _iosImageSaveSlot(self):
        """
        Adds/Saves an IOS image.
        """

        path = self.uiIOSPathLineEdit.text()
        startup_config = self.uiStartupConfigLineEdit.text()
        private_config = self.uiPrivateConfigLineEdit.text()
        platform = self.uiPlatformComboBox.currentText()
        chassis = self.uiChassisComboBox.currentText()
        idlepc = self.uiIdlePCLineEdit.text()
        ram = self.uiRAMSpinBox.value()

        # basename doesn't work on Unix with Windows paths
        if not sys.platform.startswith('win') and len(path) > 2 and path[1] == ":":
            import ntpath
            image = ntpath.basename(path)
        else:
            image = os.path.basename(path)

        if image.startswith("c7200p"):
            QtGui.QMessageBox.warning(self, "IOS image", "This IOS image is for the c7200 platform with NPE-G2 and using it is not recommended.\nPlease use an IOS image that do not start with c7200p.")

        #TODO: mutiple remote server
        if Dynamips.instance().settings()["use_local_server"]:
            server = "local"
        else:
            server = next(iter(Servers.instance()))
            if not server:
                QtGui.QMessageBox.critical(self, "IOS image", "No remote server available!")
                return
            server = server.host

        #ios_images = Dynamips.instance().iosImages()
        key = "{server}:{image}".format(server=server, image=image)
        item = self.uiIOSImagesTreeWidget.currentItem()

        if key in self._ios_images and item and item.text(0) == image:
            item.setText(0, image)
            item.setText(1, platform)
            item.setText(2, server)
        elif key in self._ios_images:
            print("Image already added")
            return
        else:
            # add a new entry in the tree widget
            item = QtGui.QTreeWidgetItem(self.uiIOSImagesTreeWidget)
            item.setText(0, image)
            item.setText(1, platform)
            item.setText(2, server)
            self.uiIOSImagesTreeWidget.setCurrentItem(item)

        self._ios_images[key] = {"path": path,
                                 "image": image,
                                 "startup_config": startup_config,
                                 "private_config": private_config,
                                 "platform": platform,
                                 "chassis": chassis,
                                 "idlepc": idlepc,
                                 "ram": ram,
                                 "server": server}

        self.uiIOSImagesTreeWidget.resizeColumnToContents(0)
        self.uiIOSImagesTreeWidget.resizeColumnToContents(1)
    def _refreshInfo(self, ios_router):

        self.uiIOSRouterInfoTreeWidget.clear()

        # fill out the General section
        section_item = self._createSectionItem("General")
        QtGui.QTreeWidgetItem(section_item, ["Name:", ios_router["name"]])
        QtGui.QTreeWidgetItem(section_item, ["Server:", ios_router["server"]])
        QtGui.QTreeWidgetItem(section_item,
                              ["Platform:", ios_router["platform"]])
        if ios_router["chassis"]:
            QtGui.QTreeWidgetItem(section_item,
                                  ["Chassis:", ios_router["chassis"]])
        QtGui.QTreeWidgetItem(section_item, ["Image:", ios_router["image"]])
        if ios_router["idlepc"]:
            QtGui.QTreeWidgetItem(section_item,
                                  ["Idle-PC:", ios_router["idlepc"]])
        if ios_router["startup_config"]:
            QtGui.QTreeWidgetItem(
                section_item,
                ["Startup-config:", ios_router["startup_config"]])
        if ios_router["private_config"]:
            QtGui.QTreeWidgetItem(
                section_item,
                ["Private-config:", ios_router["private_config"]])
        if ios_router["platform"] == "c7200":
            QtGui.QTreeWidgetItem(section_item,
                                  ["Midplane:", ios_router["midplane"]])
            QtGui.QTreeWidgetItem(section_item, ["NPE:", ios_router["npe"]])

        # fill out the Memories and disk section
        section_item = self._createSectionItem("Memories and disks")
        QtGui.QTreeWidgetItem(section_item,
                              ["RAM:", "{} MiB".format(ios_router["ram"])])
        QtGui.QTreeWidgetItem(section_item,
                              ["NVRAM:", "{} KiB".format(ios_router["nvram"])])
        if "iomem" in ios_router and ios_router["iomem"]:
            QtGui.QTreeWidgetItem(
                section_item,
                ["I/O memory:", "{}%".format(ios_router["iomem"])])
        QtGui.QTreeWidgetItem(
            section_item,
            ["PCMCIA disk0:", "{} MiB".format(ios_router["disk0"])])
        QtGui.QTreeWidgetItem(
            section_item,
            ["PCMCIA disk1:", "{} MiB".format(ios_router["disk1"])])

        # fill out the Adapters section
        section_item = self._createSectionItem("Adapters")
        for slot_id in range(0, 7):
            slot = "slot{}".format(slot_id)
            if slot in ios_router and ios_router[slot]:
                QtGui.QTreeWidgetItem(
                    section_item,
                    ["Slot {}:".format(slot_id), ios_router[slot]])
        if section_item.childCount() == 0:
            self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(
                self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(
                    section_item))

        # fill out the WICs section
        section_item = self._createSectionItem("WICs")
        for wic_id in range(0, 3):
            wic = "wic{}".format(wic_id)
            if wic in ios_router and ios_router[wic]:
                QtGui.QTreeWidgetItem(
                    section_item, ["WIC {}:".format(wic_id), ios_router[wic]])
        if section_item.childCount() == 0:
            self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(
                self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(
                    section_item))

        self.uiIOSRouterInfoTreeWidget.expandAll()
        self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(0)
        self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(1)
    def _iosRouterNewSlot(self):
        """
        Creates a new IOS router.
        """

        wizard = IOSRouterWizard(self._ios_routers, parent=self)
        wizard.show()
        if wizard.exec_():

            ios_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=ios_settings["server"],
                                           name=ios_settings["name"])

            self._ios_routers[key] = IOS_ROUTER_SETTINGS.copy()
            self._ios_routers[key].update(ios_settings)

            if ios_settings["server"] == 'cloud':
                import logging
                log = logging.getLogger(__name__)

                log.debug(ios_settings["image"])
                # Start uploading the image to cloud files

                self._upload_image_progress_dialog = QtGui.QProgressDialog(
                    "Uploading image file {}".format(ios_settings['image']),
                    "Cancel",
                    0,
                    0,
                    parent=self)
                self._upload_image_progress_dialog.setWindowModality(
                    QtCore.Qt.WindowModal)
                self._upload_image_progress_dialog.setWindowTitle(
                    "IOS image upload")
                self._upload_image_progress_dialog.show()
                try:
                    upload_thread = UploadFilesThread(
                        self,
                        cloud_settings=MainWindow.instance().cloudSettings(),
                        files_to_upload=[
                            (self._ios_routers[key]["image"],
                             'images/' + os.path.relpath(
                                 self._ios_routers[key]["image"],
                                 self._main_window.settings().imagesDirPath()))
                        ])
                    upload_thread.completed.connect(self._imageUploadComplete)
                    upload_thread.start()
                except Exception as e:
                    self._upload_image_progress_dialog.reject()
                    log.error(e)
                    QtGui.QMessageBox.critical(
                        self, "IOS image upload",
                        "Error uploading IOS image: {}".format(e))

            if ios_settings["platform"] == "c7200":
                self._ios_routers[key]["midplane"] = "vxr"
                self._ios_routers[key]["npe"] = "npe-400"
            else:
                self._ios_routers[key]["iomem"] = 5

            for slot_id in range(0, 7):
                slot = "slot{}".format(slot_id)
                if slot in ios_settings:
                    self._ios_routers[key][slot] = ios_settings[slot]

            for wic_id in range(0, 3):
                wic = "wic{}".format(wic_id)
                if wic in ios_settings:
                    self._ios_routers[key][wic] = ios_settings[wic]

            self._ios_routers[key].update(ios_settings)
            item = QtGui.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
            item.setText(0, self._ios_routers[key]["name"])
            item.setIcon(0,
                         QtGui.QIcon(self._ios_routers[key]["default_symbol"]))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOSRoutersTreeWidget.setCurrentItem(item)