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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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 _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 _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)
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)
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)
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)
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 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)
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 _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)
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)
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)
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)
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)
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)
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)
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)
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"])
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))
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"])
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"])
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))
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)