def _editVPCSSlot(self):
        """
        Edits a VPCS node template.
        """

        item = self.uiVPCSTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            vpcs_node = self._vpcs_nodes[key]
            dialog = ConfigurationDialog(vpcs_node["name"], vpcs_node, VPCSNodeConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(vpcs_node["symbol"], qpartial(self._setItemIcon, item))
                if vpcs_node["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=vpcs_node["server"], name=vpcs_node["name"])
                    if new_key in self._vpcs_nodes:
                        QtWidgets.QMessageBox.critical(self, "VPCS node", "VPCS node name {} already exists for server {}".format(vpcs_node["name"],
                                                                                                                                  vpcs_node["server"]))
                        vpcs_node["name"] = item.text(0)
                        return
                    self._vpcs_nodes[new_key] = self._vpcs_nodes[key]
                    del self._vpcs_nodes[key]
                    item.setText(0, vpcs_node["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(vpcs_node)
예제 #2
0
    def loadPreferences(self):
        """
        Loads the Docker VM preferences.
        """

        docker_module = Docker.instance()
        self._docker_containers = copy.deepcopy(docker_module.VMs())
        self._items.clear()

        for key, docker_image in self._docker_containers.items():
            item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget)
            item.setText(0, docker_image["name"])

            Controller.instance().getSymbolIcon(
                docker_image["symbol"], qpartial(self._setItemIcon, item))

            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiDockerVMsTreeWidget.setCurrentItem(self._items[0])
            self.uiDockerVMsTreeWidget.sortByColumn(0,
                                                    QtCore.Qt.AscendingOrder)
            self.uiDockerVMsTreeWidget.setMaximumWidth(
                self.uiDockerVMsTreeWidget.sizeHintForColumn(0) + 10)
예제 #3
0
    def _editCloudNodeSlot(self):
        """
        Edits a cloud node.
        """

        item = self.uiCloudNodesTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            cloud_node = self._cloud_nodes[key]
            dialog = ConfigurationDialog(cloud_node["name"], cloud_node, CloudConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(cloud_node["symbol"], qpartial(self._setItemIcon, item))
                if cloud_node["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=cloud_node["compute_id"], name=cloud_node["name"])
                    if new_key in self._cloud_nodes:
                        QtWidgets.QMessageBox.critical(self, "Cloud node", "Cloud node name {} already exists for server {}".format(cloud_node["name"],
                                                                                                                                    cloud_node["compute_id"]))
                        cloud_node["name"] = item.text(0)
                        return
                    self._cloud_nodes[new_key] = self._cloud_nodes[key]
                    del self._cloud_nodes[key]
                    item.setText(0, cloud_node["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(cloud_node)
예제 #4
0
    def _editCloudNodeSlot(self):
        """
        Edits a cloud node template.
        """

        item = self.uiCloudNodesTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            cloud_node = self._cloud_nodes[key]
            dialog = ConfigurationDialog(cloud_node["name"],
                                         cloud_node,
                                         CloudConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    cloud_node["symbol"], qpartial(self._setItemIcon, item))
                if cloud_node["name"] != item.text(0):
                    new_key = "{server}:{name}".format(
                        server=cloud_node["server"], name=cloud_node["name"])
                    if new_key in self._cloud_nodes:
                        QtWidgets.QMessageBox.critical(
                            self, "Cloud node",
                            "Cloud node name {} already exists for server {}".
                            format(cloud_node["name"], cloud_node["server"]))
                        cloud_node["name"] = item.text(0)
                        return
                    self._cloud_nodes[new_key] = self._cloud_nodes[key]
                    del self._cloud_nodes[key]
                    item.setText(0, cloud_node["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(cloud_node)
예제 #5
0
    def _iouDeviceEditSlot(self):
        """
        Edits an IOU device.
        """

        item = self.uiIOUDevicesTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            iou_device = self._iou_devices[key]
            dialog = ConfigurationDialog(iou_device["name"],
                                         iou_device,
                                         iouDeviceConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    iou_device["symbol"], qpartial(self._setItemIcon, item))
                if iou_device["name"] != item.text(0):
                    new_key = "{server}:{name}".format(
                        server=iou_device["server"], name=iou_device["name"])
                    if new_key in self._iou_devices:
                        QtWidgets.QMessageBox.critical(
                            self, "IOU device",
                            "IOU device name {} already exists for server {}".
                            format(iou_device["name"], iou_device["server"]))
                        iou_device["name"] = item.text(0)
                        return
                    self._iou_devices[new_key] = self._iou_devices[key]
                    del self._iou_devices[key]
                    item.setText(0, iou_device["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(dialog.settings)
    def _iouDeviceCopySlot(self):
        """
        Copies an IOU device.
        """

        item = self.uiIOUDevicesTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            copied_iou_device_settings = copy.deepcopy(self._iou_devices[key])
            new_name, ok = QtWidgets.QInputDialog.getText(
                self, "Copy IOU template", "Template name:",
                QtWidgets.QLineEdit.Normal,
                "Copy of {}".format(copied_iou_device_settings["name"]))
            if ok:
                key = "{server}:{name}".format(
                    server=copied_iou_device_settings["compute_id"],
                    name=new_name)
                if key in self._iou_devices:
                    QtWidgets.QMessageBox.critical(
                        self, "IOU template",
                        "IOU template name {} already exists".format(new_name))
                    return
                self._iou_devices[key] = IOU_DEVICE_SETTINGS.copy()
                self._iou_devices[key].update(copied_iou_device_settings)
                self._iou_devices[key]["name"] = new_name
                self._iou_devices[key].pop("template_id", None)

                item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
                item.setText(0, self._iou_devices[key]["name"])
                Controller.instance().getSymbolIcon(
                    self._iou_devices[key]["symbol"],
                    qpartial(self._setItemIcon, item))
                item.setData(0, QtCore.Qt.UserRole, key)
                self._items.append(item)
                self.uiIOUDevicesTreeWidget.setCurrentItem(item)
    def _editEthernetHubSlot(self):
        """
        Edits an Ethernet hub.
        """

        item = self.uiEthernetHubsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            ethernet_hub = self._ethernet_hubs[key]
            dialog = ConfigurationDialog(ethernet_hub["name"], ethernet_hub, EthernetHubConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(ethernet_hub["symbol"], qpartial(self._setItemIcon, item))
                if ethernet_hub["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=ethernet_hub["compute_id"], name=ethernet_hub["name"])
                    if new_key in self._ethernet_hubs:
                        QtWidgets.QMessageBox.critical(self, "Ethernet hub", "Ethernet hub name {} already exists for server {}".format(ethernet_hub["name"],
                                                                                                                                        ethernet_hub["compute_id"]))
                        ethernet_hub["name"] = item.text(0)
                        return
                    self._ethernet_hubs[new_key] = self._ethernet_hubs[key]
                    del self._ethernet_hubs[key]
                    item.setText(0, ethernet_hub["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(ethernet_hub)
예제 #8
0
    def _editVPCSSlot(self):
        """
        Edits a VPCS node.
        """

        item = self.uiVPCSTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            vpcs_node = self._vpcs_nodes[key]
            dialog = ConfigurationDialog(vpcs_node["name"], vpcs_node, VPCSNodeConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(vpcs_node["symbol"], qpartial(self._setItemIcon, item))
                if vpcs_node["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=vpcs_node["compute_id"], name=vpcs_node["name"])
                    if new_key in self._vpcs_nodes:
                        QtWidgets.QMessageBox.critical(self, "VPCS node", "VPCS node name {} already exists for server {}".format(vpcs_node["name"],
                                                                                                                                  vpcs_node["compute_id"]))
                        vpcs_node["name"] = item.text(0)
                        return
                    self._vpcs_nodes[new_key] = self._vpcs_nodes[key]
                    del self._vpcs_nodes[key]
                    item.setText(0, vpcs_node["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(vpcs_node)
예제 #9
0
    def _qemuVMEditSlot(self):
        """
        Edits a QEMU VM.
        """

        item = self.uiQemuVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            qemu_vm = self._qemu_vms[key]
            dialog = ConfigurationDialog(qemu_vm["name"],
                                         qemu_vm,
                                         QemuVMConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    qemu_vm["symbol"], qpartial(self._setItemIcon, item))

                if qemu_vm["name"] != item.text(0):
                    new_key = "{server}:{name}".format(
                        server=qemu_vm["compute_id"], name=qemu_vm["name"])
                    if new_key in self._qemu_vms:
                        QtWidgets.QMessageBox.critical(
                            self, "QEMU VM",
                            "QEMU VM name {} already exists for server {}".
                            format(qemu_vm["name"], qemu_vm["compute_id"]))
                        qemu_vm["name"] = item.text(0)
                        return
                    self._qemu_vms[new_key] = self._qemu_vms[key]
                    del self._qemu_vms[key]
                    item.setText(0, qemu_vm["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)

                self._refreshInfo(qemu_vm)
예제 #10
0
    def _qemuVMEditSlot(self):
        """
        Edits a QEMU VM.
        """

        item = self.uiQemuVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            qemu_vm = self._qemu_vms[key]
            dialog = ConfigurationDialog(qemu_vm["name"], qemu_vm, QemuVMConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(qemu_vm["symbol"], qpartial(self._setItemIcon, item))

                if qemu_vm["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=qemu_vm["server"], name=qemu_vm["name"])
                    if new_key in self._qemu_vms:
                        QtWidgets.QMessageBox.critical(self, "QEMU VM", "QEMU VM name {} already exists for server {}".format(qemu_vm["name"],
                                                                                                                              qemu_vm["server"]))
                        qemu_vm["name"] = item.text(0)
                        return
                    self._qemu_vms[new_key] = self._qemu_vms[key]
                    del self._qemu_vms[key]
                    item.setText(0, qemu_vm["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)

                self._refreshInfo(qemu_vm)
예제 #11
0
    def loadPreferences(self):
        """
        Loads the IOU devices preferences.
        """

        self._iou_devices = {}
        templates = TemplateManager.instance().templates()
        for template_id, template in templates.items():
            if template.template_type() == "iou" and not template.builtin():
                name = template.name()
                server = template.compute_id()
                #TODO: use template id for the key
                key = "{server}:{name}".format(server=server, name=name)
                self._iou_devices[key] = copy.deepcopy(template.settings())

        self._items.clear()
        for key, iou_device in self._iou_devices.items():
            item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
            item.setText(0, iou_device["name"])
            Controller.instance().getSymbolIcon(iou_device["symbol"], qpartial(self._setItemIcon, item))

            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)
            self.uiIOUDevicesTreeWidget.setMaximumWidth(self.uiIOUDevicesTreeWidget.sizeHintForColumn(0) + 10)
예제 #12
0
    def _qemuVMCopySlot(self):
        """
        Copies a QEMU VM.
        """

        item = self.uiQemuVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            copied_vm_settings = copy.deepcopy(self._qemu_vms[key])
            new_name, ok = QtWidgets.QInputDialog.getText(self, "Copy Qemu template", "Template name:", QtWidgets.QLineEdit.Normal, "Copy of {}".format(copied_vm_settings["name"]))
            if ok:
                key = "{server}:{name}".format(server=copied_vm_settings["compute_id"], name=new_name)
                if key in self._qemu_vms:
                    QtWidgets.QMessageBox.critical(self, "Qemu template", "Qemu template name {} already exists".format(new_name))
                    return
                self._qemu_vms[key] = QEMU_VM_SETTINGS.copy()
                self._qemu_vms[key].update(copied_vm_settings)
                self._qemu_vms[key]["name"] = new_name
                self._qemu_vms[key].pop("template_id", None)

                item = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
                item.setText(0, self._qemu_vms[key]["name"])
                Controller.instance().getSymbolIcon(self._qemu_vms[key]["symbol"], qpartial(self._setItemIcon, item))
                item.setData(0, QtCore.Qt.UserRole, key)
                self._items.append(item)
                self.uiQemuVMsTreeWidget.setCurrentItem(item)
예제 #13
0
    def _iouDeviceEditSlot(self):
        """
        Edits an IOU device.
        """

        item = self.uiIOUDevicesTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            iou_device = self._iou_devices[key]
            dialog = ConfigurationDialog(iou_device["name"], iou_device, iouDeviceConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(iou_device["symbol"], qpartial(self._setItemIcon, item))
                if iou_device["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=iou_device["compute_id"], name=iou_device["name"])
                    if new_key in self._iou_devices:
                        QtWidgets.QMessageBox.critical(self, "IOU device", "IOU device name {} already exists for server {}".format(iou_device["name"],
                                                                                                                                    iou_device["compute_id"]))
                        iou_device["name"] = item.text(0)
                        return
                    self._iou_devices[new_key] = self._iou_devices[key]
                    del self._iou_devices[key]
                    item.setText(0, iou_device["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(dialog.settings)
    def loadPreferences(self):
        """
        Loads the ethernet hub preferences.
        """

        self._ethernet_hubs = {}
        templates = TemplateManager.instance().templates()
        for template_id, template in templates.items():
            if template.template_type(
            ) == "ethernet_hub" and not template.builtin():
                name = template.name()
                server = template.compute_id()
                #TODO: use template id for the key
                key = "{server}:{name}".format(server=server, name=name)
                self._ethernet_hubs[key] = copy.deepcopy(template.settings())

        self._items.clear()
        for key, ethernet_hub in self._ethernet_hubs.items():
            item = QtWidgets.QTreeWidgetItem(self.uiEthernetHubsTreeWidget)
            item.setText(0, ethernet_hub["name"])
            Controller.instance().getSymbolIcon(
                ethernet_hub["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiEthernetHubsTreeWidget.setCurrentItem(self._items[0])
            self.uiEthernetHubsTreeWidget.sortByColumn(
                0, QtCore.Qt.AscendingOrder)
            self.uiEthernetHubsTreeWidget.setMaximumWidth(
                self.uiEthernetHubsTreeWidget.sizeHintForColumn(0) + 20)
예제 #15
0
    def _editEthernetHubSlot(self):
        """
        Edits an Ethernet hub template.
        """

        item = self.uiEthernetHubsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            ethernet_hub = self._ethernet_hubs[key]
            dialog = ConfigurationDialog(ethernet_hub["name"],
                                         ethernet_hub,
                                         EthernetHubConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    ethernet_hub["symbol"], qpartial(self._setItemIcon, item))
                if ethernet_hub["name"] != item.text(0):
                    new_key = "{server}:{name}".format(
                        server=ethernet_hub["server"],
                        name=ethernet_hub["name"])
                    if new_key in self._ethernet_hubs:
                        QtWidgets.QMessageBox.critical(
                            self, "Ethernet hub",
                            "Ethernet hub name {} already exists for server {}"
                            .format(ethernet_hub["name"],
                                    ethernet_hub["server"]))
                        ethernet_hub["name"] = item.text(0)
                        return
                    self._ethernet_hubs[new_key] = self._ethernet_hubs[key]
                    del self._ethernet_hubs[key]
                    item.setText(0, ethernet_hub["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(ethernet_hub)
예제 #16
0
    def _dockerImageEditSlot(self):
        """
        Edits a Docker image.
        """

        item = self.uiDockerVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            docker_container = self._docker_containers[key]
            dialog = ConfigurationDialog(docker_container["name"], docker_container, DockerVMConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(docker_container["symbol"], qpartial(self._setItemIcon, item))
                if docker_container["name"] != item.text(0):
                    new_key = "{server}:{name}".format(server=docker_container["compute_id"], name=docker_container["name"])
                    if new_key in self._docker_containers:
                        QtWidgets.QMessageBox.critical(self, "Docker container", "Docker container name {} already exists for server {}".format(docker_container["name"],
                                                                                                                                                docker_container["compute_id"]))
                        docker_container["name"] = item.text(0)
                        return
                    self._docker_containers[new_key] = self._docker_containers[key]
                    del self._docker_containers[key]
                    item.setText(0, docker_container["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(docker_container)
    def loadPreferences(self):
        """
        Loads the VirtualBox VM preferences.
        """

        self._virtualbox_vms = {}
        templates = TemplateManager.instance().templates()
        for template_id, template in templates.items():
            if template.template_type(
            ) == "virtualbox" and not template.builtin():
                vmname = template.settings()["vmname"]
                server = template.compute_id()
                #TODO: use template id for the key
                key = "{server}:{vmname}".format(server=server, vmname=vmname)
                self._virtualbox_vms[key] = copy.deepcopy(template.settings())

        self._items.clear()
        for key, vbox_vm in self._virtualbox_vms.items():
            item = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, vbox_vm["name"])
            Controller.instance().getSymbolIcon(
                vbox_vm["symbol"], qpartial(self._setItemIcon, item))
            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)
            self.uiVirtualBoxVMsTreeWidget.setMaximumWidth(
                self.uiVirtualBoxVMsTreeWidget.sizeHintForColumn(0) + 10)
예제 #18
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["compute_id"],
                name=new_vm_settings["name"])
            if key in self._qemu_vms:
                QtWidgets.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 = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
            item.setText(0, self._qemu_vms[key]["name"])
            Controller.instance().getSymbolIcon(
                self._qemu_vms[key]["symbol"],
                qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiQemuVMsTreeWidget.setCurrentItem(item)
예제 #19
0
    def _addMisingVariablesEdits(self):
        missing = [v for v in self._variables if v.get("value", "").strip() == ""]
        for i, variable in enumerate(missing, start=0):
            nameLabel = QtWidgets.QLabel()
            nameLabel.setText(variable.get("name", ""))
            self.gridLayout.addWidget(nameLabel, i, 0)

            valueEdit = QtWidgets.QLineEdit()
            valueEdit.setText(variable.get("value", ""))
            valueEdit.textChanged.connect(qpartial(self.onValueChange, variable))
            self.gridLayout.addWidget(valueEdit, i, 1)
예제 #20
0
    def _addMisingVariablesEdits(self):
        missing = [
            v for v in self._variables if v.get("value", "").strip() == ""
        ]
        for i, variable in enumerate(missing, start=0):
            nameLabel = QtWidgets.QLabel()
            nameLabel.setText(variable.get("name", ""))
            self.gridLayout.addWidget(nameLabel, i, 0)

            valueEdit = QtWidgets.QLineEdit()
            valueEdit.setText(variable.get("value", ""))
            valueEdit.textChanged.connect(
                qpartial(self.onValueChange, variable))
            self.gridLayout.addWidget(valueEdit, i, 1)
    def _vboxVMEditSlot(self):
        """
        Edits a VirtualBox VM.
        """

        item = self.uiVirtualBoxVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            vbox_vm = self._virtualbox_vms[key]
            dialog = ConfigurationDialog(vbox_vm["vmname"], vbox_vm, VirtualBoxVMConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(vbox_vm["symbol"], qpartial(self._setItemIcon, item))

                if vbox_vm["name"] != item.text(0):
                    item.setText(0, vbox_vm["name"])
                self._refreshInfo(vbox_vm)
    def _vboxVMEditSlot(self):
        """
        Edits a VirtualBox VM.
        """

        item = self.uiVirtualBoxVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            vbox_vm = self._virtualbox_vms[key]
            dialog = ConfigurationDialog(vbox_vm["vmname"], vbox_vm, VirtualBoxVMConfigurationPage(), parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(vbox_vm["symbol"], qpartial(self._setItemIcon, item))

                if vbox_vm["name"] != item.text(0):
                    item.setText(0, vbox_vm["name"])
                self._refreshInfo(vbox_vm)
예제 #23
0
    def _newEthernetHubSlot(self):
        """
        Creates a new Ethernet hub.
        """

        wizard = EthernetHubWizard(self._ethernet_hubs, parent=self)
        wizard.show()
        if wizard.exec_():
            new_ethernet_hub_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_ethernet_hub_settings["compute_id"], name=new_ethernet_hub_settings["name"])
            self._ethernet_hubs[key] = ETHERNET_HUB_SETTINGS.copy()
            self._ethernet_hubs[key].update(new_ethernet_hub_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiEthernetHubsTreeWidget)
            item.setText(0, self._ethernet_hubs[key]["name"])
            Controller.instance().getSymbolIcon(self._ethernet_hubs[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiEthernetHubsTreeWidget.setCurrentItem(item)
예제 #24
0
    def _newVPCSSlot(self):
        """
        Creates a new VPCS node.
        """

        wizard = VPCSNodeWizard(self._vpcs_nodes, parent=self)
        wizard.show()
        if wizard.exec_():
            new_vpcs_node_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_vpcs_node_settings["compute_id"], name=new_vpcs_node_settings["name"])
            self._vpcs_nodes[key] = VPCS_NODES_SETTINGS.copy()
            self._vpcs_nodes[key].update(new_vpcs_node_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiVPCSTreeWidget)
            item.setText(0, self._vpcs_nodes[key]["name"])
            Controller.instance().getSymbolIcon(self._vpcs_nodes[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiVPCSTreeWidget.setCurrentItem(item)
    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 = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, self._virtualbox_vms[key]["name"])
            Controller.instance().getSymbolIcon(self._virtualbox_vms[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiVirtualBoxVMsTreeWidget.setCurrentItem(item)
    def loadPreferences(self):
        """
        Loads the VirtualBox VM preferences.
        """

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

        for key, vbox_vm in self._virtualbox_vms.items():
            item = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, vbox_vm["name"])
            Controller.instance().getSymbolIcon(vbox_vm["symbol"], qpartial(self._setItemIcon, item))
            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)
            self.uiVirtualBoxVMsTreeWidget.setMaximumWidth(self.uiVirtualBoxVMsTreeWidget.sizeHintForColumn(0) + 10)
예제 #27
0
    def loadPreferences(self):
        """
        Loads the QEMU VM preferences.
        """

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

        for key, qemu_vm in self._qemu_vms.items():
            item = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
            item.setText(0, qemu_vm["name"])
            Controller.instance().getSymbolIcon(qemu_vm["symbol"], qpartial(self._setItemIcon, item))
            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)
            self.uiQemuVMsTreeWidget.setMaximumWidth(self.uiQemuVMsTreeWidget.sizeHintForColumn(0) + 10)
예제 #28
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["compute_id"], name=new_device_settings["name"])
            self._iou_devices[key] = IOU_DEVICE_SETTINGS.copy()
            self._iou_devices[key].update(new_device_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
            item.setText(0, self._iou_devices[key]["name"])
            Controller.instance().getSymbolIcon(self._iou_devices[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOUDevicesTreeWidget.setCurrentItem(item)
    def loadPreferences(self):
        """
        Loads the ethernet switch preferences.
        """

        builtin_module = Builtin.instance()
        self._ethernet_switches = copy.deepcopy(builtin_module.ethernetSwitches())
        self._items.clear()

        for key, ethernet_switch in self._ethernet_switches.items():
            item = QtWidgets.QTreeWidgetItem(self.uiEthernetSwitchesTreeWidget)
            item.setText(0, ethernet_switch["name"])
            Controller.instance().getSymbolIcon(ethernet_switch["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiEthernetSwitchesTreeWidget.setCurrentItem(self._items[0])
            self.uiEthernetSwitchesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
            self.uiEthernetSwitchesTreeWidget.setMaximumWidth(self.uiEthernetSwitchesTreeWidget.sizeHintForColumn(0) + 20)
예제 #30
0
    def _newCloudNodeSlot(self):
        """
        Creates a new cloud node template.
        """

        wizard = CloudWizard(self._cloud_nodes, parent=self)
        wizard.show()
        if wizard.exec_():
            new_cloud_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_cloud_settings["server"], name=new_cloud_settings["name"])
            self._cloud_nodes[key] = CLOUD_SETTINGS.copy()
            self._cloud_nodes[key].update(new_cloud_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiCloudNodesTreeWidget)
            item.setText(0, self._cloud_nodes[key]["name"])
            Controller.instance().getSymbolIcon(self._cloud_nodes[key]["symbol"], qpartial(self._setItemIcon, item))

            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiCloudNodesTreeWidget.setCurrentItem(item)
예제 #31
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["compute_id"], name=new_device_settings["name"])
            self._iou_devices[key] = IOU_DEVICE_SETTINGS.copy()
            self._iou_devices[key].update(new_device_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
            item.setText(0, self._iou_devices[key]["name"])
            Controller.instance().getSymbolIcon(self._iou_devices[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOUDevicesTreeWidget.setCurrentItem(item)
예제 #32
0
    def loadPreferences(self):
        """
        Loads the cloud node preferences.
        """

        builtin_module = Builtin.instance()
        self._cloud_nodes = copy.deepcopy(builtin_module.cloudNodes())
        self._items.clear()

        for key, cloud_node in self._cloud_nodes.items():
            item = QtWidgets.QTreeWidgetItem(self.uiCloudNodesTreeWidget)
            item.setText(0, cloud_node["name"])
            Controller.instance().getSymbolIcon(cloud_node["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiCloudNodesTreeWidget.setCurrentItem(self._items[0])
            self.uiCloudNodesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
            self.uiCloudNodesTreeWidget.setMaximumWidth(self.uiCloudNodesTreeWidget.sizeHintForColumn(0) + 20)
예제 #33
0
    def loadPreferences(self):
        """
        Loads the VPCS node preferences.
        """

        vpcs_module = VPCS.instance()
        self._vpcs_nodes = copy.deepcopy(vpcs_module.VMs())
        self._items.clear()

        for key, node in self._vpcs_nodes.items():
            item = QtWidgets.QTreeWidgetItem(self.uiVPCSTreeWidget)
            item.setText(0, node["name"])
            Controller.instance().getSymbolIcon(node["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiVPCSTreeWidget.setCurrentItem(self._items[0])
            self.uiVPCSTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
            self.uiVPCSTreeWidget.setMaximumWidth(self.uiVPCSTreeWidget.sizeHintForColumn(0) + 20)
    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 = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget)
            item.setText(0, self._virtualbox_vms[key]["name"])
            Controller.instance().getSymbolIcon(self._virtualbox_vms[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiVirtualBoxVMsTreeWidget.setCurrentItem(item)
예제 #35
0
    def _iosRouterNewSlot(self, *args):
        """
        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["compute_id"],
                                           name=ios_settings["name"])

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

            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 = QtWidgets.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
            item.setText(0, self._ios_routers[key]["name"])
            Controller.instance().getSymbolIcon(
                self._ios_routers[key]["symbol"],
                qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOSRoutersTreeWidget.setCurrentItem(item)
예제 #36
0
    def _dockerImageNewSlot(self):
        """
        Creates a new Docker image.
        """
        wizard = DockerVMWizard(self._docker_containers, parent=self)
        wizard.show()
        if wizard.exec_():
            new_image_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_image_settings["server"],
                                           name=new_image_settings["name"])
            self._docker_containers[key] = DOCKER_CONTAINER_SETTINGS.copy()
            self._docker_containers[key].update(new_image_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget)
            item.setText(0, self._docker_containers[key]["name"])
            Controller.instance().getSymbolIcon(
                self._docker_containers[key]["symbol"],
                qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiDockerVMsTreeWidget.setCurrentItem(item)
예제 #37
0
    def loadPreferences(self):
        """
        Loads the Docker VM preferences.
        """

        docker_module = Docker.instance()
        self._docker_containers = copy.deepcopy(docker_module.VMs())
        self._items.clear()

        for key, docker_image in self._docker_containers.items():
            item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget)
            item.setText(0, docker_image["name"])

            Controller.instance().getSymbolIcon(docker_image["symbol"], qpartial(self._setItemIcon, item))

            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)

        if self._items:
            self.uiDockerVMsTreeWidget.setCurrentItem(self._items[0])
            self.uiDockerVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
            self.uiDockerVMsTreeWidget.setMaximumWidth(self.uiDockerVMsTreeWidget.sizeHintForColumn(0) + 10)
예제 #38
0
    def _iosRouterEditSlot(self):
        """
        Edits an IOS router.
        """

        item = self.uiIOSRoutersTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            ios_router = self._ios_routers[key]
            dialog = ConfigurationDialog(ios_router["name"],
                                         ios_router,
                                         IOSRouterConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    self._ios_routers[key]["symbol"],
                    qpartial(self._setItemIcon, item))

                if ios_router["name"] != item.text(0):
                    # rename the IOS router
                    new_key = "{server}:{name}".format(
                        server=ios_router["compute_id"],
                        name=ios_router["name"])
                    if new_key in self._ios_routers:
                        QtWidgets.QMessageBox.critical(
                            self, "IOS router",
                            "IOS router name {} already exists for server {}".
                            format(ios_router["name"],
                                   ios_router["compute_id"]))
                        ios_router["name"] = item.text(0)
                        return
                    self._ios_routers[new_key] = self._ios_routers[key]
                    del self._ios_routers[key]
                    item.setText(0, ios_router["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)

                self._refreshInfo(ios_router)
예제 #39
0
    def _iosRouterNewSlot(self, *args):
        """
        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["compute_id"], name=ios_settings["name"])

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

            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 = QtWidgets.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
            item.setText(0, self._ios_routers[key]["name"])
            Controller.instance().getSymbolIcon(self._ios_routers[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiIOSRoutersTreeWidget.setCurrentItem(item)
예제 #40
0
    def _newCloudNodeSlot(self):
        """
        Creates a new cloud node template.
        """

        wizard = CloudWizard(self._cloud_nodes, parent=self)
        wizard.show()
        if wizard.exec_():
            new_cloud_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_cloud_settings["server"],
                                           name=new_cloud_settings["name"])
            self._cloud_nodes[key] = CLOUD_SETTINGS.copy()
            self._cloud_nodes[key].update(new_cloud_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiCloudNodesTreeWidget)
            item.setText(0, self._cloud_nodes[key]["name"])
            Controller.instance().getSymbolIcon(
                self._cloud_nodes[key]["symbol"],
                qpartial(self._setItemIcon, item))

            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiCloudNodesTreeWidget.setCurrentItem(item)
    def loadPreferences(self):
        """
        Loads the IOS router preferences.
        """

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

        for key, ios_router in self._ios_routers.items():
            item = QtWidgets.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
            item.setText(0, ios_router["name"])
            Controller.instance().getSymbolIcon(
                ios_router["symbol"], qpartial(self._setItemIcon, item))
            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)
            self.uiIOSRoutersTreeWidget.setMaximumWidth(
                self.uiIOSRoutersTreeWidget.sizeHintForColumn(0) + 10)
예제 #42
0
    def _newEthernetHubSlot(self):
        """
        Creates a new Ethernet hub template.
        """

        wizard = EthernetHubWizard(self._ethernet_hubs, parent=self)
        wizard.show()
        if wizard.exec_():
            new_ethernet_hub_settings = wizard.getSettings()
            key = "{server}:{name}".format(
                server=new_ethernet_hub_settings["server"],
                name=new_ethernet_hub_settings["name"])
            self._ethernet_hubs[key] = ETHERNET_HUB_SETTINGS.copy()
            self._ethernet_hubs[key].update(new_ethernet_hub_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiEthernetHubsTreeWidget)
            item.setText(0, self._ethernet_hubs[key]["name"])
            Controller.instance().getSymbolIcon(
                self._ethernet_hubs[key]["symbol"],
                qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiEthernetHubsTreeWidget.setCurrentItem(item)
예제 #43
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:
                QtWidgets.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 = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
            item.setText(0, self._qemu_vms[key]["name"])
            Controller.instance().getSymbolIcon(self._qemu_vms[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiQemuVMsTreeWidget.setCurrentItem(item)
예제 #44
0
    def _dockerImageEditSlot(self):
        """
        Edits a Docker image.
        """

        item = self.uiDockerVMsTreeWidget.currentItem()
        if item:
            key = item.data(0, QtCore.Qt.UserRole)
            docker_container = self._docker_containers[key]
            dialog = ConfigurationDialog(docker_container["name"],
                                         docker_container,
                                         DockerVMConfigurationPage(),
                                         parent=self)
            dialog.show()
            if dialog.exec_():
                # update the icon
                Controller.instance().getSymbolIcon(
                    docker_container["symbol"],
                    qpartial(self._setItemIcon, item))
                if docker_container["name"] != item.text(0):
                    new_key = "{server}:{name}".format(
                        server=docker_container["compute_id"],
                        name=docker_container["name"])
                    if new_key in self._docker_containers:
                        QtWidgets.QMessageBox.critical(
                            self, "Docker container",
                            "Docker container name {} already exists for server {}"
                            .format(docker_container["name"],
                                    docker_container["compute_id"]))
                        docker_container["name"] = item.text(0)
                        return
                    self._docker_containers[new_key] = self._docker_containers[
                        key]
                    del self._docker_containers[key]
                    item.setText(0, docker_container["name"])
                    item.setData(0, QtCore.Qt.UserRole, new_key)
                self._refreshInfo(docker_container)
    def loadSettings(self, settings, node=None, group=False):
        """
        Loads the QEMU VM settings.

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

        if node:
            self._compute_id = node.compute().id()
        else:
            self._compute_id = settings["server"]

        if self._compute_id is None:
            QtWidgets.QMessageBox.warning(
                self, "Qemu",
                "Server {} is not running, cannot retrieve the QEMU binaries list"
                .format(settings["server"]))
        else:
            callback = qpartial(self._getQemuBinariesFromServerCallback,
                                qemu_path=settings["qemu_path"])
            try:
                Qemu.instance().getQemuBinariesFromServer(
                    self._compute_id, callback)
            except ModuleError as e:
                QtWidgets.QMessageBox.critical(
                    self, "Qemu",
                    "Error while getting the QEMU binaries list: {}".format(e))
                self.uiQemuListComboBox.clear()

        if not group:
            # set the device name
            self.uiNameLineEdit.setText(settings["name"])

            if "linked_clone" in settings:
                self.uiBaseVMCheckBox.setChecked(settings["linked_clone"])
            else:
                self.uiBaseVMCheckBox.hide()

            self.uiHdaDiskImageLineEdit.setText(settings["hda_disk_image"])
            self.uiHdbDiskImageLineEdit.setText(settings["hdb_disk_image"])
            self.uiHdcDiskImageLineEdit.setText(settings["hdc_disk_image"])
            self.uiHddDiskImageLineEdit.setText(settings["hdd_disk_image"])
            self.uiHdaDiskInterfaceComboBox.setCurrentIndex(
                self.uiHdaDiskInterfaceComboBox.findText(
                    settings["hda_disk_interface"]))
            self.uiHdbDiskInterfaceComboBox.setCurrentIndex(
                self.uiHdbDiskInterfaceComboBox.findText(
                    settings["hdb_disk_interface"]))
            self.uiHdcDiskInterfaceComboBox.setCurrentIndex(
                self.uiHdcDiskInterfaceComboBox.findText(
                    settings["hdc_disk_interface"]))
            self.uiHddDiskInterfaceComboBox.setCurrentIndex(
                self.uiHddDiskInterfaceComboBox.findText(
                    settings["hdd_disk_interface"]))
            self.uiCdromImageLineEdit.setText(settings["cdrom_image"])
            self.uiBiosImageLineEdit.setText(settings["bios_image"])
            self.uiInitrdLineEdit.setText(settings["initrd"])
            self.uiKernelImageLineEdit.setText(settings["kernel_image"])
        else:
            self.uiNameLabel.hide()
            self.uiNameLineEdit.hide()
            self.uiHddTab.hide()
            self.uiCdromTab.hide()
            self.uiBiosImageGroupBox.hide()
            self.uiInitrdLabel.hide()
            self.uiInitrdLineEdit.hide()
            self.uiInitrdToolButton.hide()
            self.uiKernelImageLabel.hide()
            self.uiKernelImageLineEdit.hide()
            self.uiKernelImageToolButton.hide()

        if not node:
            # these are template settings

            # rename the label from "Name" to "Template name"
            self.uiNameLabel.setText("Template name:")

            # load the default name format
            self.uiDefaultNameFormatLineEdit.setText(
                settings["default_name_format"])

            # load the symbol
            self.uiSymbolLineEdit.setText(settings["symbol"])
            self.uiSymbolLineEdit.setToolTip('<img src="{}"/>'.format(
                settings["symbol"]))

            # load the category
            index = self.uiCategoryComboBox.findData(settings["category"])
            if index != -1:
                self.uiCategoryComboBox.setCurrentIndex(index)

            self.uiPortNameFormatLineEdit.setText(settings["port_name_format"])
            self.uiPortSegmentSizeSpinBox.setValue(
                settings["port_segment_size"])
            self.uiFirstPortNameLineEdit.setText(settings["first_port_name"])
        else:
            self.uiDefaultNameFormatLabel.hide()
            self.uiDefaultNameFormatLineEdit.hide()
            self.uiSymbolLabel.hide()
            self.uiSymbolLineEdit.hide()
            self.uiSymbolToolButton.hide()
            self.uiCategoryComboBox.hide()
            self.uiCategoryLabel.hide()
            self.uiCategoryComboBox.hide()
            self.uiPortNameFormatLabel.hide()
            self.uiPortNameFormatLineEdit.hide()
            self.uiPortSegmentSizeLabel.hide()
            self.uiPortSegmentSizeSpinBox.hide()
            self.uiFirstPortNameLabel.hide()
            self.uiFirstPortNameLineEdit.hide()

        index = self.uiBootPriorityComboBox.findData(settings["boot_priority"])
        if index != -1:
            self.uiBootPriorityComboBox.setCurrentIndex(index)

        index = self.uiConsoleTypeComboBox.findText(settings["console_type"])
        if index != -1:
            self.uiConsoleTypeComboBox.setCurrentIndex(index)

        self.uiKernelCommandLineEdit.setText(settings["kernel_command_line"])
        self.uiAdaptersSpinBox.setValue(settings["adapters"])

        self.uiLegacyNetworkingCheckBox.setChecked(
            settings["legacy_networking"])

        # load the MAC address setting
        self.uiMacAddrLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
        if settings["mac_address"]:
            self.uiMacAddrLineEdit.setText(settings["mac_address"])
        else:
            self.uiMacAddrLineEdit.clear()

        self.uiACPIShutdownCheckBox.setChecked(settings["acpi_shutdown"])
        index = self.uiAdapterTypesComboBox.findData(settings["adapter_type"])
        if index != -1:
            self.uiAdapterTypesComboBox.setCurrentIndex(index)

        self.uiCPUSpinBox.setValue(settings["cpus"])
        self.uiRamSpinBox.setValue(settings["ram"])

        if settings["cpu_throttling"]:
            self.uiActivateCPUThrottlingCheckBox.setChecked(True)
            self.uiCPUThrottlingSpinBox.setValue(settings["cpu_throttling"])
        else:
            self.uiActivateCPUThrottlingCheckBox.setChecked(False)

        index = self.uiProcessPriorityComboBox.findText(
            settings["process_priority"], QtCore.Qt.MatchFixedString)
        if index != -1:
            self.uiProcessPriorityComboBox.setCurrentIndex(index)
        self.uiQemuOptionsLineEdit.setText(settings["options"])
예제 #46
0
 def _refreshVMSlot(self, ignore_error=False):
     engine_id = self.uiGNS3VMEngineComboBox.currentData()
     if engine_id:
         Controller.instance().get(
             "/gns3vm/engines/{}/vms".format(engine_id),
             qpartial(self._listVMsCallback, ignore_error=ignore_error))
예제 #47
0
    def loadSettings(self, settings, node=None, group=False):
        """
        Loads the QEMU VM settings.

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

        if node:
            self._compute_id = node.compute().id()
            self._node = node
            self._settings = settings
        else:
            self._compute_id = settings["compute_id"]
            self._node = None

        if self._compute_id is None:
            QtWidgets.QMessageBox.warning(self, "Qemu", "Server {} is not running, cannot retrieve the QEMU binaries list".format(settings["compute_id"]))
        else:
            callback = qpartial(self._getQemuBinariesFromServerCallback, qemu_path=settings["qemu_path"])
            Qemu.instance().getQemuBinariesFromServer(self._compute_id, callback)

        if not group:
            # set the device name
            self.uiNameLineEdit.setText(settings["name"])

            if "linked_clone" in settings:
                self.uiBaseVMCheckBox.setChecked(settings["linked_clone"])
            else:
                self.uiBaseVMCheckBox.hide()

            self.uiHdaDiskImageLineEdit.setText(settings["hda_disk_image"])
            self.uiHdbDiskImageLineEdit.setText(settings["hdb_disk_image"])
            self.uiHdcDiskImageLineEdit.setText(settings["hdc_disk_image"])
            self.uiHddDiskImageLineEdit.setText(settings["hdd_disk_image"])
            self.uiHdaDiskInterfaceComboBox.setCurrentIndex(self.uiHdaDiskInterfaceComboBox.findText(settings["hda_disk_interface"]))
            self.uiHdbDiskInterfaceComboBox.setCurrentIndex(self.uiHdbDiskInterfaceComboBox.findText(settings["hdb_disk_interface"]))
            self.uiHdcDiskInterfaceComboBox.setCurrentIndex(self.uiHdcDiskInterfaceComboBox.findText(settings["hdc_disk_interface"]))
            self.uiHddDiskInterfaceComboBox.setCurrentIndex(self.uiHddDiskInterfaceComboBox.findText(settings["hdd_disk_interface"]))
            self.uiCdromImageLineEdit.setText(settings["cdrom_image"])
            self.uiBiosImageLineEdit.setText(settings["bios_image"])
            self.uiInitrdLineEdit.setText(settings["initrd"])
            self.uiKernelImageLineEdit.setText(settings["kernel_image"])
        else:
            self.uiNameLabel.hide()
            self.uiNameLineEdit.hide()
            self.uiHddTab.hide()
            self.uiCdromTab.hide()
            self.uiBiosImageGroupBox.hide()
            self.uiInitrdLabel.hide()
            self.uiInitrdLineEdit.hide()
            self.uiInitrdToolButton.hide()
            self.uiKernelImageLabel.hide()
            self.uiKernelImageLineEdit.hide()
            self.uiKernelImageToolButton.hide()

        if not node:
            # these are template settings

            self.uiNameLabel.setText("Template name:")

            # load the default name format
            self.uiDefaultNameFormatLineEdit.setText(settings["default_name_format"])

            # load the symbol
            self.uiSymbolLineEdit.setText(settings["symbol"])
            self.uiSymbolLineEdit.setToolTip('<img src="{}"/>'.format(settings["symbol"]))

            # load the category
            index = self.uiCategoryComboBox.findData(settings["category"])
            if index != -1:
                self.uiCategoryComboBox.setCurrentIndex(index)

            self.uiPortNameFormatLineEdit.setText(settings["port_name_format"])
            self.uiPortSegmentSizeSpinBox.setValue(settings["port_segment_size"])
            self.uiFirstPortNameLineEdit.setText(settings["first_port_name"])

            self.uiHdaDiskImageResizeToolButton.hide()
            self.uiHdbDiskImageResizeToolButton.hide()
            self.uiHdcDiskImageResizeToolButton.hide()
            self.uiHddDiskImageResizeToolButton.hide()
        else:
            self.uiDefaultNameFormatLabel.hide()
            self.uiDefaultNameFormatLineEdit.hide()
            self.uiSymbolLabel.hide()
            self.uiSymbolLineEdit.hide()
            self.uiSymbolToolButton.hide()
            self.uiCategoryComboBox.hide()
            self.uiCategoryLabel.hide()
            self.uiCategoryComboBox.hide()
            self.uiPortNameFormatLabel.hide()
            self.uiPortNameFormatLineEdit.hide()
            self.uiPortSegmentSizeLabel.hide()
            self.uiPortSegmentSizeSpinBox.hide()
            self.uiFirstPortNameLabel.hide()
            self.uiFirstPortNameLineEdit.hide()

        index = self.uiBootPriorityComboBox.findData(settings["boot_priority"])
        if index != -1:
            self.uiBootPriorityComboBox.setCurrentIndex(index)

        index = self.uiConsoleTypeComboBox.findText(settings["console_type"])
        if index != -1:
            self.uiConsoleTypeComboBox.setCurrentIndex(index)

        self.uiConsoleAutoStartCheckBox.setChecked(settings["console_auto_start"])
        self.uiKernelCommandLineEdit.setText(settings["kernel_command_line"])
        self.uiAdaptersSpinBox.setValue(settings["adapters"])
        self._custom_adapters = settings["custom_adapters"].copy()

        self.uiLegacyNetworkingCheckBox.setChecked(settings["legacy_networking"])

        # load the MAC address setting
        self.uiMacAddrLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
        if settings["mac_address"]:
            self.uiMacAddrLineEdit.setText(settings["mac_address"])
        else:
            self.uiMacAddrLineEdit.clear()

        # load the on close option
        index = self.uiOnCloseComboBox.findData(settings["on_close"])
        if index != -1:
            self.uiOnCloseComboBox.setCurrentIndex(index)

        index = self.uiAdapterTypesComboBox.findData(settings["adapter_type"])
        if index != -1:
            self.uiAdapterTypesComboBox.setCurrentIndex(index)

        self.uiCPUSpinBox.setValue(settings["cpus"])
        self.uiRamSpinBox.setValue(settings["ram"])

        if settings["cpu_throttling"]:
            self.uiActivateCPUThrottlingCheckBox.setChecked(True)
            self.uiCPUThrottlingSpinBox.setValue(settings["cpu_throttling"])
        else:
            self.uiActivateCPUThrottlingCheckBox.setChecked(False)

        index = self.uiProcessPriorityComboBox.findText(settings["process_priority"], QtCore.Qt.MatchFixedString)
        if index != -1:
            self.uiProcessPriorityComboBox.setCurrentIndex(index)
        self.uiQemuOptionsLineEdit.setText(settings["options"])
        self.uiUsageTextEdit.setPlainText(settings["usage"])
예제 #48
0
    def _get_appliances_from_server(self, appliance_filter=None):
        """
        Gets the appliances from the server and display them.
        """

        self.uiAppliancesTreeWidget.clear()
        parent_routers = QtWidgets.QTreeWidgetItem(self.uiAppliancesTreeWidget)
        parent_routers.setText(0, "Routers")
        parent_routers.setFlags(parent_routers.flags() & ~QtCore.Qt.ItemIsSelectable)
        parent_switches = QtWidgets.QTreeWidgetItem(self.uiAppliancesTreeWidget)
        parent_switches.setText(0, "Switches")
        parent_switches.setFlags(parent_switches.flags() & ~QtCore.Qt.ItemIsSelectable)
        parent_guests = QtWidgets.QTreeWidgetItem(self.uiAppliancesTreeWidget)
        parent_guests.setText(0, "Guests")
        parent_guests.setFlags(parent_guests.flags() & ~QtCore.Qt.ItemIsSelectable)
        parent_firewalls = QtWidgets.QTreeWidgetItem(self.uiAppliancesTreeWidget)
        parent_firewalls.setText(0, "Firewalls")
        parent_firewalls.setFlags(parent_firewalls.flags() & ~QtCore.Qt.ItemIsSelectable)
        self.uiAppliancesTreeWidget.expandAll()

        for appliance in ApplianceManager.instance().appliances():
            if appliance_filter is None:
                appliance_filter = self.uiFilterLineEdit.text().strip()
            if appliance_filter and appliance_filter.lower() not in appliance["name"].lower():
                continue

            if appliance["category"] == "router":
                item = QtWidgets.QTreeWidgetItem(parent_routers)
            elif appliance["category"].endswith("switch"):
                item = QtWidgets.QTreeWidgetItem(parent_switches)
            elif appliance["category"] == "firewall":
                item = QtWidgets.QTreeWidgetItem(parent_firewalls)
            elif appliance["category"] == "guest":
                item = QtWidgets.QTreeWidgetItem(parent_guests)
            if appliance["builtin"]:
                appliance_name = appliance["name"]
            else:
                appliance_name = "{} (custom)".format(appliance["name"])

            item.setText(0, appliance_name)
            #item.setText(1, appliance["category"].capitalize().replace("_", " "))

            if "qemu" in appliance:
                item.setText(1, "Qemu")
            elif "iou" in appliance:
                item.setText(1, "IOU")
            elif "dynamips" in appliance:
                item.setText(1, "Dynamips")
            elif "docker" in appliance:
                item.setText(1, "Docker")
            else:
                item.setText(1, "N/A")

            item.setText(2, appliance["vendor_name"])
            item.setData(0, QtCore.Qt.UserRole, appliance)

            #item.setSizeHint(0, QtCore.QSize(32, 32))
            item.setToolTip(0, self._get_tooltip_text(appliance))
            Controller.instance().getSymbolIcon(appliance.get("symbol"), qpartial(self._setItemIcon, item),
                                                fallback=":/symbols/" + appliance["category"] + ".svg")

        self.uiAppliancesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
        self.uiAppliancesTreeWidget.resizeColumnToContents(0)
        if not appliance_filter:
            self.uiAppliancesTreeWidget.collapseAll()
    def loadSettings(self, settings, node=None, group=False):
        """
        Loads the QEMU VM settings.

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

        if node:
            self._server = node.server()
        else:
            self._server = Servers.instance().getServerFromString(settings["server"])

        if self._server is None:
            QtWidgets.QMessageBox.warning(self, "Qemu", "Server {} is not running, cannot retrieve the QEMU binaries list".format(settings["server"]))
        else:
            callback = qpartial(self._getQemuBinariesFromServerCallback, qemu_path=settings["qemu_path"])
            try:
                Qemu.instance().getQemuBinariesFromServer(self._server, callback)
            except ModuleError as e:
                QtWidgets.QMessageBox.critical(self, "Qemu", "Error while getting the QEMU binaries list: {}".format(e))
                self.uiQemuListComboBox.clear()

        if not group:
            # set the device name
            self.uiNameLineEdit.setText(settings["name"])
            if "console" in settings:
                self.uiConsolePortSpinBox.setValue(settings["console"])
            else:
                self.uiConsolePortLabel.hide()
                self.uiConsolePortSpinBox.hide()

            if "linked_base" in settings:
                self.uiBaseVMCheckBox.setChecked(settings["linked_base"])
            else:
                self.uiBaseVMCheckBox.hide()

            self.uiHdaDiskImageLineEdit.setText(settings["hda_disk_image"])
            self.uiHdbDiskImageLineEdit.setText(settings["hdb_disk_image"])
            self.uiHdcDiskImageLineEdit.setText(settings["hdc_disk_image"])
            self.uiHddDiskImageLineEdit.setText(settings["hdd_disk_image"])
            self.uiHdaDiskInterfaceComboBox.setCurrentIndex(self.uiHdaDiskInterfaceComboBox.findText(settings["hda_disk_interface"]))
            self.uiHdbDiskInterfaceComboBox.setCurrentIndex(self.uiHdbDiskInterfaceComboBox.findText(settings["hdb_disk_interface"]))
            self.uiHdcDiskInterfaceComboBox.setCurrentIndex(self.uiHdcDiskInterfaceComboBox.findText(settings["hdc_disk_interface"]))
            self.uiHddDiskInterfaceComboBox.setCurrentIndex(self.uiHddDiskInterfaceComboBox.findText(settings["hdd_disk_interface"]))
            self.uiCdromImageLineEdit.setText(settings["cdrom_image"])
            self.uiInitrdLineEdit.setText(settings["initrd"])
            self.uiKernelImageLineEdit.setText(settings["kernel_image"])
        else:
            self.uiNameLabel.hide()
            self.uiNameLineEdit.hide()
            self.uiConsolePortLabel.hide()
            self.uiConsolePortSpinBox.hide()
            self.uiHddTab.hide()
            self.uiCdromTab.hide()
            self.uiInitrdLabel.hide()
            self.uiInitrdLineEdit.hide()
            self.uiInitrdToolButton.hide()
            self.uiKernelImageLabel.hide()
            self.uiKernelImageLineEdit.hide()
            self.uiKernelImageToolButton.hide()

        if not node:
            # load the symbol
            self.uiSymbolLineEdit.setText(settings["symbol"])
            self.uiSymbolLineEdit.setToolTip('<img src="{}"/>'.format(settings["symbol"]))

            # load the category
            index = self.uiCategoryComboBox.findData(settings["category"])
            if index != -1:
                self.uiCategoryComboBox.setCurrentIndex(index)

            self.uiPortNameFormatLineEdit.setText(settings["port_name_format"])
            self.uiPortSegmentSizeSpinBox.setValue(settings["port_segment_size"])
            self.uiFirstPortNameLineEdit.setText(settings["first_port_name"])
        else:
            self.uiSymbolLabel.hide()
            self.uiSymbolLineEdit.hide()
            self.uiSymbolToolButton.hide()
            self.uiCategoryComboBox.hide()
            self.uiCategoryLabel.hide()
            self.uiCategoryComboBox.hide()
            self.uiPortNameFormatLabel.hide()
            self.uiPortNameFormatLineEdit.hide()
            self.uiPortSegmentSizeLabel.hide()
            self.uiPortSegmentSizeSpinBox.hide()
            self.uiFirstPortNameLabel.hide()
            self.uiFirstPortNameLineEdit.hide()

        index = self.uiBootPriorityComboBox.findData(settings["boot_priority"])
        if index != -1:
            self.uiBootPriorityComboBox.setCurrentIndex(index)

        index = self.uiConsoleTypeComboBox.findText(settings["console_type"])
        if index != -1:
            self.uiConsoleTypeComboBox.setCurrentIndex(index)

        self.uiKernelCommandLineEdit.setText(settings["kernel_command_line"])
        self.uiAdaptersSpinBox.setValue(settings["adapters"])

        self.uiLegacyNetworkingCheckBox.setChecked(settings["legacy_networking"])

        # load the MAC address setting
        self.uiMacAddrLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
        if settings["mac_address"]:
            self.uiMacAddrLineEdit.setText(settings["mac_address"])
        else:
            self.uiMacAddrLineEdit.clear()

        self.uiACPIShutdownCheckBox.setChecked(settings["acpi_shutdown"])
        index = self.uiAdapterTypesComboBox.findData(settings["adapter_type"])
        if index != -1:
            self.uiAdapterTypesComboBox.setCurrentIndex(index)

        self.uiCPUSpinBox.setValue(settings["cpus"])
        self.uiRamSpinBox.setValue(settings["ram"])

        if settings["cpu_throttling"]:
            self.uiActivateCPUThrottlingCheckBox.setChecked(True)
            self.uiCPUThrottlingSpinBox.setValue(settings["cpu_throttling"])
        else:
            self.uiActivateCPUThrottlingCheckBox.setChecked(False)

        index = self.uiProcessPriorityComboBox.findText(settings["process_priority"], QtCore.Qt.MatchFixedString)
        if index != -1:
            self.uiProcessPriorityComboBox.setCurrentIndex(index)
        self.uiQemuOptionsLineEdit.setText(settings["options"])
예제 #50
0
 def _refreshVMSlot(self, ignore_error=False):
     engine_id = self.uiGNS3VMEngineComboBox.currentData()
     if engine_id:
         Controller.instance().get("/gns3vm/engines/{}/vms".format(engine_id), qpartial(self._listVMsCallback, ignore_error=ignore_error))
예제 #51
0
    def _dockerImageNewSlot(self):
        """
        Creates a new Docker image.
        """
        wizard = DockerVMWizard(self._docker_containers, parent=self)
        wizard.show()
        if wizard.exec_():
            new_image_settings = wizard.getSettings()
            key = "{server}:{name}".format(server=new_image_settings["compute_id"], name=new_image_settings["name"])
            self._docker_containers[key] = DOCKER_CONTAINER_SETTINGS.copy()
            self._docker_containers[key].update(new_image_settings)

            item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget)
            item.setText(0, self._docker_containers[key]["name"])
            Controller.instance().getSymbolIcon(self._docker_containers[key]["symbol"], qpartial(self._setItemIcon, item))
            item.setData(0, QtCore.Qt.UserRole, key)
            self._items.append(item)
            self.uiDockerVMsTreeWidget.setCurrentItem(item)