|
|
- Author: Pekka Helenius <pekka.helenius@fjordtek.com>
- Date: Sun, 6 Jun 2021 15:10:45 +0200
- Subject: [PATCH] GNS3 GUI: QEMU environment variables.
-
- Add support for QEMU environment variables for GNS3 GUI.
-
- --- a/tests/test_local_config.py
- +++ b/tests/test_local_config.py
- @@ -285,6 +285,7 @@
- "enable_kvm": True,
- "vms": [
- {
- + "env_vars": "",
- "kernel_image": "",
- "kernel_command_line": "",
- "first_port_name": "",
- @@ -323,6 +324,7 @@
- "platform": ""
- },
- {
- + "env_vars": "",
- "kernel_image": "",
- "kernel_command_line": "",
- "server": "vm",
-
- --- a/gns3/modules/qemu/settings.py
- +++ b/gns3/modules/qemu/settings.py
- @@ -27,6 +27,7 @@
- }
-
- QEMU_VM_SETTINGS = {
- + "env_vars": "",
- "name": "",
- "default_name_format": "{name}-{0}",
- "usage": "",
-
- --- a/gns3/modules/qemu/qemu_vm.py
- +++ b/gns3/modules/qemu/qemu_vm.py
- @@ -42,7 +42,8 @@
-
- self._linked_clone = True
-
- - qemu_vm_settings = {"usage": "",
- + qemu_vm_settings = {"env_vars": "",
- + "usage": "",
- "qemu_path": "",
- "hda_disk_image": "",
- "hdb_disk_image": "",
- --- a/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py
- +++ b/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py
- @@ -63,6 +63,12 @@
- self.uiCPULabel = QtWidgets.QLabel(self.uiGeneralSettingsTab)
- self.uiCPULabel.setObjectName("uiCPULabel")
- self.gridLayout_4.addWidget(self.uiCPULabel, 5, 0, 1, 1)
- + self.uiEnvvarLabel = QtWidgets.QLabel(self.uiGeneralSettingsTab)
- + self.uiEnvvarLabel.setObjectName("uiEnvvarLabel")
- + self.gridLayout_4.addWidget(self.uiEnvvarLabel, 9, 0, 1, 1)
- + self.uiEnvvarLineEdit = QtWidgets.QLineEdit(self.uiGeneralSettingsTab)
- + self.uiEnvvarLineEdit.setObjectName("uiEnvvarLineEdit")
- + self.gridLayout_4.addWidget(self.uiEnvvarLineEdit, 9, 1, 1, 1)
- self.uiCPUSpinBox = QtWidgets.QSpinBox(self.uiGeneralSettingsTab)
- self.uiCPUSpinBox.setMinimum(1)
- self.uiCPUSpinBox.setMaximum(255)
- @@ -93,7 +99,7 @@
- self.gridLayout_4.addWidget(self.uiOnCloseComboBox, 8, 1, 1, 1)
- self.uiConsoleTypeLabel = QtWidgets.QLabel(self.uiGeneralSettingsTab)
- self.uiConsoleTypeLabel.setObjectName("uiConsoleTypeLabel")
- - self.gridLayout_4.addWidget(self.uiConsoleTypeLabel, 9, 0, 1, 1)
- + self.gridLayout_4.addWidget(self.uiConsoleTypeLabel, 10, 0, 1, 1)
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.uiConsoleTypeComboBox = QtWidgets.QComboBox(self.uiGeneralSettingsTab)
- @@ -107,9 +113,9 @@
- self.uiConsoleAutoStartCheckBox = QtWidgets.QCheckBox(self.uiGeneralSettingsTab)
- self.uiConsoleAutoStartCheckBox.setObjectName("uiConsoleAutoStartCheckBox")
- self.horizontalLayout_2.addWidget(self.uiConsoleAutoStartCheckBox)
- - self.gridLayout_4.addLayout(self.horizontalLayout_2, 9, 1, 1, 1)
- + self.gridLayout_4.addLayout(self.horizontalLayout_2, 10, 1, 1, 1)
- spacerItem = QtWidgets.QSpacerItem(263, 94, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- - self.gridLayout_4.addItem(spacerItem, 10, 1, 1, 1)
- + self.gridLayout_4.addItem(spacerItem, 11, 1, 1, 1)
- self.uiQemutabWidget.addTab(self.uiGeneralSettingsTab, "")
- self.uiHddTab = QtWidgets.QWidget()
- self.uiHddTab.setObjectName("uiHddTab")
- @@ -462,6 +468,7 @@
- self.uiRamLabel.setText(_translate("QemuVMConfigPageWidget", "RAM:"))
- self.uiRamSpinBox.setSuffix(_translate("QemuVMConfigPageWidget", " MB"))
- self.uiCPULabel.setText(_translate("QemuVMConfigPageWidget", "vCPUs:"))
- + self.uiEnvvarLabel.setText(_translate("QemuVMConfigPageWidget", "Environment variables:"))
- self.uiQemuListLabel.setText(_translate("QemuVMConfigPageWidget", "Qemu binary:"))
- self.uiBootPriorityLabel.setText(_translate("QemuVMConfigPageWidget", "Boot priority:"))
- self.uiOnCloseLabel.setText(_translate("QemuVMConfigPageWidget", "On close:"))
-
- --- a/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui
- +++ b/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui
- @@ -24,26 +24,23 @@
- <string>General settings</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_4">
- - <item row="0" column="0">
- - <widget class="QLabel" name="uiNameLabel">
- + <item row="1" column="0">
- + <widget class="QLabel" name="uiDefaultNameFormatLabel">
- <property name="text">
- - <string>Name:</string>
- + <string>Default name format:</string>
- </property>
- </widget>
- </item>
- - <item row="0" column="1">
- - <widget class="QLineEdit" name="uiNameLineEdit"/>
- + <item row="8" column="2">
- + <widget class="QComboBox" name="uiOnCloseComboBox"/>
- </item>
- - <item row="1" column="0">
- - <widget class="QLabel" name="uiDefaultNameFormatLabel">
- + <item row="0" column="0">
- + <widget class="QLabel" name="uiNameLabel">
- <property name="text">
- - <string>Default name format:</string>
- + <string>Name:</string>
- </property>
- </widget>
- </item>
- - <item row="1" column="1">
- - <widget class="QLineEdit" name="uiDefaultNameFormatLineEdit"/>
- - </item>
- <item row="2" column="0">
- <widget class="QLabel" name="uiSymbolLabel">
- <property name="text">
- @@ -51,64 +48,23 @@
- </property>
- </widget>
- </item>
- - <item row="2" column="1">
- - <layout class="QHBoxLayout" name="horizontalLayout_7">
- - <item>
- - <widget class="QLineEdit" name="uiSymbolLineEdit"/>
- - </item>
- - <item>
- - <widget class="QToolButton" name="uiSymbolToolButton">
- - <property name="text">
- - <string>&Browse...</string>
- - </property>
- - <property name="toolButtonStyle">
- - <enum>Qt::ToolButtonTextOnly</enum>
- - </property>
- - </widget>
- - </item>
- - </layout>
- + <item row="7" column="2">
- + <widget class="QComboBox" name="uiBootPriorityComboBox"/>
- </item>
- - <item row="3" column="0">
- - <widget class="QLabel" name="uiCategoryLabel">
- - <property name="text">
- - <string>Category:</string>
- + <item row="6" column="2">
- + <widget class="QComboBox" name="uiQemuListComboBox">
- + <property name="sizePolicy">
- + <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- + <horstretch>0</horstretch>
- + <verstretch>0</verstretch>
- + </sizepolicy>
- </property>
- </widget>
- </item>
- - <item row="3" column="1">
- + <item row="3" column="2">
- <widget class="QComboBox" name="uiCategoryComboBox"/>
- </item>
- - <item row="4" column="0">
- - <widget class="QLabel" name="uiRamLabel">
- - <property name="text">
- - <string>RAM:</string>
- - </property>
- - </widget>
- - </item>
- - <item row="4" column="1">
- - <widget class="QSpinBox" name="uiRamSpinBox">
- - <property name="suffix">
- - <string> MB</string>
- - </property>
- - <property name="minimum">
- - <number>32</number>
- - </property>
- - <property name="maximum">
- - <number>65535</number>
- - </property>
- - <property name="value">
- - <number>256</number>
- - </property>
- - </widget>
- - </item>
- - <item row="5" column="0">
- - <widget class="QLabel" name="uiCPULabel">
- - <property name="text">
- - <string>vCPUs:</string>
- - </property>
- - </widget>
- - </item>
- - <item row="5" column="1">
- + <item row="5" column="2">
- <widget class="QSpinBox" name="uiCPUSpinBox">
- <property name="minimum">
- <number>1</number>
- @@ -125,16 +81,33 @@
- </property>
- </widget>
- </item>
- - <item row="6" column="1">
- - <widget class="QComboBox" name="uiQemuListComboBox">
- - <property name="sizePolicy">
- - <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- - <horstretch>0</horstretch>
- - <verstretch>0</verstretch>
- - </sizepolicy>
- + <item row="8" column="0">
- + <widget class="QLabel" name="uiOnCloseLabel">
- + <property name="text">
- + <string>On close:</string>
- </property>
- </widget>
- </item>
- + <item row="9" column="0">
- + <widget class="QLabel" name="uiConsoleTypeLabel">
- + <property name="text">
- + <string>Console type:</string>
- + </property>
- + </widget>
- + </item>
- + <item row="11" column="2">
- + <spacer name="spacer">
- + <property name="orientation">
- + <enum>Qt::Vertical</enum>
- + </property>
- + <property name="sizeHint" stdset="0">
- + <size>
- + <width>263</width>
- + <height>94</height>
- + </size>
- + </property>
- + </spacer>
- + </item>
- <item row="7" column="0">
- <widget class="QLabel" name="uiBootPriorityLabel">
- <property name="text">
- @@ -142,27 +115,67 @@
- </property>
- </widget>
- </item>
- - <item row="7" column="1">
- - <widget class="QComboBox" name="uiBootPriorityComboBox"/>
- + <item row="4" column="2">
- + <widget class="QSpinBox" name="uiRamSpinBox">
- + <property name="suffix">
- + <string> MB</string>
- + </property>
- + <property name="minimum">
- + <number>32</number>
- + </property>
- + <property name="maximum">
- + <number>65535</number>
- + </property>
- + <property name="value">
- + <number>256</number>
- + </property>
- + </widget>
- </item>
- - <item row="8" column="0">
- - <widget class="QLabel" name="uiOnCloseLabel">
- + <item row="0" column="2">
- + <widget class="QLineEdit" name="uiNameLineEdit"/>
- + </item>
- + <item row="3" column="0">
- + <widget class="QLabel" name="uiCategoryLabel">
- <property name="text">
- - <string>On close:</string>
- + <string>Category:</string>
- </property>
- </widget>
- </item>
- - <item row="8" column="1">
- - <widget class="QComboBox" name="uiOnCloseComboBox"/>
- + <item row="1" column="2">
- + <widget class="QLineEdit" name="uiDefaultNameFormatLineEdit"/>
- </item>
- - <item row="9" column="0">
- - <widget class="QLabel" name="uiConsoleTypeLabel">
- + <item row="4" column="0">
- + <widget class="QLabel" name="uiRamLabel">
- <property name="text">
- - <string>Console type:</string>
- + <string>RAM:</string>
- </property>
- </widget>
- </item>
- - <item row="9" column="1">
- + <item row="2" column="2">
- + <layout class="QHBoxLayout" name="horizontalLayout_7">
- + <item>
- + <widget class="QLineEdit" name="uiSymbolLineEdit"/>
- + </item>
- + <item>
- + <widget class="QToolButton" name="uiSymbolToolButton">
- + <property name="text">
- + <string>&Browse...</string>
- + </property>
- + <property name="toolButtonStyle">
- + <enum>Qt::ToolButtonTextOnly</enum>
- + </property>
- + </widget>
- + </item>
- + </layout>
- + </item>
- + <item row="5" column="0">
- + <widget class="QLabel" name="uiCPULabel">
- + <property name="text">
- + <string>vCPUs:</string>
- + </property>
- + </widget>
- + </item>
- + <item row="9" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QComboBox" name="uiConsoleTypeComboBox">
- @@ -202,18 +215,15 @@
- </item>
- </layout>
- </item>
- - <item row="10" column="1">
- - <spacer name="spacer">
- - <property name="orientation">
- - <enum>Qt::Vertical</enum>
- - </property>
- - <property name="sizeHint" stdset="0">
- - <size>
- - <width>263</width>
- - <height>94</height>
- - </size>
- + <item row="10" column="2">
- + <widget class="QLineEdit" name="uiEnvvarLineEdit"/>
- + </item>
- + <item row="10" column="0">
- + <widget class="QLabel" name="uiEnvvarLabel">
- + <property name="text">
- + <string>Environment variables:</string>
- </property>
- - </spacer>
- + </widget>
- </item>
- </layout>
- </widget>
- @@ -470,7 +480,16 @@
- <string>CD/DVD</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- - <property name="margin">
- + <property name="leftMargin">
- + <number>10</number>
- + </property>
- + <property name="topMargin">
- + <number>10</number>
- + </property>
- + <property name="rightMargin">
- + <number>10</number>
- + </property>
- + <property name="bottomMargin">
- <number>10</number>
- </property>
- <item>
-
- --- a/gns3/modules/qemu/pages/qemu_vm_configuration_page.py
- +++ b/gns3/modules/qemu/pages/qemu_vm_configuration_page.py
- @@ -444,6 +444,8 @@
- self.uiInitrdLineEdit.setText(settings["initrd"])
- self.uiKernelImageLineEdit.setText(settings["kernel_image"])
- else:
- + self.uiEnvvarLabel.hide()
- + self.uiEnvvarLineEdit.hide()
- self.uiNameLabel.hide()
- self.uiNameLineEdit.hide()
- self.uiHddTab.hide()
- @@ -542,6 +544,7 @@
- self.uiProcessPriorityComboBox.setCurrentIndex(index)
- self.uiQemuOptionsLineEdit.setText(settings["options"])
- self.uiUsageTextEdit.setPlainText(settings["usage"])
- + self.uiEnvvarLineEdit.setText(settings["env_vars"])
-
- def saveSettings(self, settings, node=None, group=False):
- """
- @@ -653,4 +656,5 @@
- settings["process_priority"] = self.uiProcessPriorityComboBox.currentText().lower()
- settings["options"] = self.uiQemuOptionsLineEdit.text()
- settings["usage"] = self.uiUsageTextEdit.toPlainText()
- + settings["env_vars"] = self.uiEnvvarLineEdit.text()
- return settings
-
- --- a/gns3/modules/qemu/pages/qemu_vm_preferences_page.py
- +++ b/gns3/modules/qemu/pages/qemu_vm_preferences_page.py
- @@ -117,7 +117,7 @@
- QtWidgets.QTreeWidgetItem(section_item, ["Base MAC address:", qemu_vm["mac_address"]])
-
- # fill out the Linux boot section
- - if qemu_vm["initrd"] or qemu_vm["kernel_image"] or qemu_vm["kernel_command_line"]:
- + if qemu_vm["initrd"] or qemu_vm["kernel_image"] or qemu_vm["kernel_command_line"] or qemu_vm["env_vars"]:
- section_item = self._createSectionItem("Linux boot")
- if qemu_vm["initrd"]:
- QtWidgets.QTreeWidgetItem(section_item, ["Initial RAM disk:", qemu_vm["initrd"]])
- @@ -125,6 +125,8 @@
- QtWidgets.QTreeWidgetItem(section_item, ["Kernel image:", qemu_vm["kernel_image"]])
- if qemu_vm["kernel_command_line"]:
- QtWidgets.QTreeWidgetItem(section_item, ["Kernel command line:", qemu_vm["kernel_command_line"]])
- + if qemu_vm["env_vars"]:
- + QtWidgets.QTreeWidgetItem(section_item, ["Environment variables:", qemu_vm["env_vars"]])
-
- # performance section
- section_item = self._createSectionItem("Optimizations")
- --- a/gns3/schemas/appliance.json
- +++ b/gns3/schemas/appliance.json
- @@ -329,6 +329,10 @@
- "title": "KVM requirements",
- "enum": ["require", "allow", "disable"]
- },
- + "env_vars": {
- + "type": "string",
- + "title": "Environment variables"
- + },
- "options": {
- "type": "string",
- "title": "Optional additional qemu command line options"
-
|