Skip to content

Commit

Permalink
Merge pull request #3029 from GNS3/aux-console-refactoring
Browse files Browse the repository at this point in the history
Auxiliary console support
  • Loading branch information
grossmj committed Aug 12, 2020
2 parents b47aa95 + ffb3645 commit 029a1df
Show file tree
Hide file tree
Showing 19 changed files with 267 additions and 50 deletions.
5 changes: 4 additions & 1 deletion gns3/modules/docker/docker_vm.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ def __init__(self, module, server, project):
"custom_adapters": DOCKER_CONTAINER_SETTINGS["custom_adapters"],
"start_command": DOCKER_CONTAINER_SETTINGS["start_command"],
"environment": DOCKER_CONTAINER_SETTINGS["environment"],
"aux": None,
"console_type": DOCKER_CONTAINER_SETTINGS["console_type"],
"console_auto_start": DOCKER_CONTAINER_SETTINGS["console_auto_start"],
"aux_type": DOCKER_CONTAINER_SETTINGS["aux_type"],
"console_resolution": DOCKER_CONTAINER_SETTINGS["console_resolution"],
"console_http_port": DOCKER_CONTAINER_SETTINGS["console_http_port"],
"console_http_path": DOCKER_CONTAINER_SETTINGS["console_http_path"],
Expand All @@ -71,6 +71,7 @@ def info(self):
Local ID is {id} and server ID is {node_id}
Docker image is "{image}"
Console is on port {console} and type is {console_type}
Aux console is on port {aux} and type is {aux_type}
""".format(name=self.name(),
id=self.id(),
node_id=self._node_id,
Expand All @@ -79,6 +80,8 @@ def info(self):
port=self.compute().port(),
console=self._settings["console"],
console_type=self._settings["console_type"],
aux=self._settings["aux"],
aux_type=self._settings["aux_type"],
image=self._settings["image"])

port_info = ""
Expand Down
2 changes: 2 additions & 0 deletions gns3/modules/docker/pages/docker_vm_configuration_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ def loadSettings(self, settings, node=None, group=False):
self.uiEnvironmentTextEdit.setText(settings["environment"])
self.uiConsoleTypeComboBox.setCurrentIndex(self.uiConsoleTypeComboBox.findText(settings["console_type"]))
self.uiConsoleAutoStartCheckBox.setChecked(settings["console_auto_start"])
self.uiAuxTypeComboBox.setCurrentIndex(self.uiAuxTypeComboBox.findText(settings["aux_type"]))
self.uiConsoleResolutionComboBox.setCurrentIndex(self.uiConsoleResolutionComboBox.findText(settings["console_resolution"]))
self.uiConsoleHttpPortSpinBox.setValue(settings["console_http_port"])
self.uiHttpConsolePathLineEdit.setText(settings["console_http_path"])
Expand Down Expand Up @@ -174,6 +175,7 @@ def saveSettings(self, settings, node=None, group=False):
settings["environment"] = self.uiEnvironmentTextEdit.toPlainText()
settings["console_type"] = self.uiConsoleTypeComboBox.currentText()
settings["console_auto_start"] = self.uiConsoleAutoStartCheckBox.isChecked()
settings["aux_type"] = self.uiAuxTypeComboBox.currentText()
settings["console_resolution"] = self.uiConsoleResolutionComboBox.currentText()
settings["console_http_port"] = self.uiConsoleHttpPortSpinBox.value()
settings["console_http_path"] = self.uiHttpConsolePathLineEdit.text()
Expand Down
1 change: 1 addition & 0 deletions gns3/modules/docker/pages/docker_vm_preferences_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ def _refreshInfo(self, docker_container):
pass
QtWidgets.QTreeWidgetItem(section_item, ["Console type:", str(docker_container["console_type"])])
QtWidgets.QTreeWidgetItem(section_item, ["Auto start console:", "{}".format(docker_container["console_auto_start"])])
QtWidgets.QTreeWidgetItem(section_item, ["Auxiliary console type:", str(docker_container["aux_type"])])
QtWidgets.QTreeWidgetItem(section_item, ["Default name format:", docker_container["default_name_format"]])
QtWidgets.QTreeWidgetItem(section_item, ["Adapters:", str(docker_container["adapters"])])
if docker_container["start_command"]:
Expand Down
1 change: 1 addition & 0 deletions gns3/modules/docker/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"environment": "",
"console_type": "telnet",
"console_auto_start": False,
"aux_type": "none",
"console_resolution": "1024x768",
"console_http_port": 80,
"console_http_path": "/",
Expand Down
45 changes: 33 additions & 12 deletions gns3/modules/docker/ui/docker_vm_configuration_page.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>919</width>
<height>1072</height>
<width>961</width>
<height>1126</height>
</rect>
</property>
<property name="windowTitle">
Expand Down Expand Up @@ -166,14 +166,14 @@
</item>
</layout>
</item>
<item row="11" column="0">
<item row="12" column="0">
<widget class="QLabel" name="uiConsoleResolutionLabel">
<property name="text">
<string>VNC console resolution:</string>
</property>
</widget>
</item>
<item row="11" column="1">
<item row="12" column="1">
<widget class="QComboBox" name="uiConsoleResolutionComboBox">
<item>
<property name="text">
Expand Down Expand Up @@ -212,14 +212,14 @@
</item>
</widget>
</item>
<item row="12" column="0">
<item row="13" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>HTTP port in the container:</string>
</property>
</widget>
</item>
<item row="12" column="1">
<item row="13" column="1">
<widget class="QSpinBox" name="uiConsoleHttpPortSpinBox">
<property name="minimum">
<number>1</number>
Expand All @@ -229,17 +229,17 @@
</property>
</widget>
</item>
<item row="13" column="0">
<item row="14" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>HTTP path:</string>
</property>
</widget>
</item>
<item row="13" column="1">
<item row="14" column="1">
<widget class="QLineEdit" name="uiHttpConsolePathLineEdit"/>
</item>
<item row="14" column="0">
<item row="15" column="0">
<widget class="QLabel" name="uiEnvironmentLabel">
<property name="text">
<string>Environment variables:
Expand All @@ -253,17 +253,17 @@
</property>
</widget>
</item>
<item row="14" column="1">
<item row="15" column="1">
<widget class="QTextEdit" name="uiEnvironmentTextEdit"/>
</item>
<item row="15" column="0">
<item row="16" column="0">
<widget class="QLabel" name="uiNetworkConfigLabel">
<property name="text">
<string>Network configuration</string>
</property>
</widget>
</item>
<item row="15" column="1">
<item row="16" column="1">
<widget class="QPushButton" name="uiNetworkConfigEditButton">
<property name="text">
<string>Edit</string>
Expand Down Expand Up @@ -307,6 +307,27 @@
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="uiAuxTypeLabel">
<property name="text">
<string>Auxiliary console type:</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QComboBox" name="uiAuxTypeComboBox">
<item>
<property name="text">
<string>telnet</string>
</property>
</item>
<item>
<property name="text">
<string>none</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
Expand Down
33 changes: 22 additions & 11 deletions gns3/modules/docker/ui/docker_vm_configuration_page_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
class Ui_dockerVMConfigPageWidget(object):
def setupUi(self, dockerVMConfigPageWidget):
dockerVMConfigPageWidget.setObjectName("dockerVMConfigPageWidget")
dockerVMConfigPageWidget.resize(919, 1072)
dockerVMConfigPageWidget.resize(961, 1126)
self.verticalLayout = QtWidgets.QVBoxLayout(dockerVMConfigPageWidget)
self.verticalLayout.setObjectName("verticalLayout")
self.uiTabWidget = QtWidgets.QTabWidget(dockerVMConfigPageWidget)
Expand Down Expand Up @@ -93,7 +93,7 @@ def setupUi(self, dockerVMConfigPageWidget):
self.gridLayout.addLayout(self.horizontalLayout, 10, 1, 1, 1)
self.uiConsoleResolutionLabel = QtWidgets.QLabel(self.tab)
self.uiConsoleResolutionLabel.setObjectName("uiConsoleResolutionLabel")
self.gridLayout.addWidget(self.uiConsoleResolutionLabel, 11, 0, 1, 1)
self.gridLayout.addWidget(self.uiConsoleResolutionLabel, 12, 0, 1, 1)
self.uiConsoleResolutionComboBox = QtWidgets.QComboBox(self.tab)
self.uiConsoleResolutionComboBox.setObjectName("uiConsoleResolutionComboBox")
self.uiConsoleResolutionComboBox.addItem("")
Expand All @@ -103,35 +103,35 @@ def setupUi(self, dockerVMConfigPageWidget):
self.uiConsoleResolutionComboBox.addItem("")
self.uiConsoleResolutionComboBox.addItem("")
self.uiConsoleResolutionComboBox.addItem("")
self.gridLayout.addWidget(self.uiConsoleResolutionComboBox, 11, 1, 1, 1)
self.gridLayout.addWidget(self.uiConsoleResolutionComboBox, 12, 1, 1, 1)
self.label = QtWidgets.QLabel(self.tab)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 12, 0, 1, 1)
self.gridLayout.addWidget(self.label, 13, 0, 1, 1)
self.uiConsoleHttpPortSpinBox = QtWidgets.QSpinBox(self.tab)
self.uiConsoleHttpPortSpinBox.setMinimum(1)
self.uiConsoleHttpPortSpinBox.setMaximum(65535)
self.uiConsoleHttpPortSpinBox.setObjectName("uiConsoleHttpPortSpinBox")
self.gridLayout.addWidget(self.uiConsoleHttpPortSpinBox, 12, 1, 1, 1)
self.gridLayout.addWidget(self.uiConsoleHttpPortSpinBox, 13, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(self.tab)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 13, 0, 1, 1)
self.gridLayout.addWidget(self.label_2, 14, 0, 1, 1)
self.uiHttpConsolePathLineEdit = QtWidgets.QLineEdit(self.tab)
self.uiHttpConsolePathLineEdit.setObjectName("uiHttpConsolePathLineEdit")
self.gridLayout.addWidget(self.uiHttpConsolePathLineEdit, 13, 1, 1, 1)
self.gridLayout.addWidget(self.uiHttpConsolePathLineEdit, 14, 1, 1, 1)
self.uiEnvironmentLabel = QtWidgets.QLabel(self.tab)
self.uiEnvironmentLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.uiEnvironmentLabel.setWordWrap(False)
self.uiEnvironmentLabel.setObjectName("uiEnvironmentLabel")
self.gridLayout.addWidget(self.uiEnvironmentLabel, 14, 0, 1, 1)
self.gridLayout.addWidget(self.uiEnvironmentLabel, 15, 0, 1, 1)
self.uiEnvironmentTextEdit = QtWidgets.QTextEdit(self.tab)
self.uiEnvironmentTextEdit.setObjectName("uiEnvironmentTextEdit")
self.gridLayout.addWidget(self.uiEnvironmentTextEdit, 14, 1, 1, 1)
self.gridLayout.addWidget(self.uiEnvironmentTextEdit, 15, 1, 1, 1)
self.uiNetworkConfigLabel = QtWidgets.QLabel(self.tab)
self.uiNetworkConfigLabel.setObjectName("uiNetworkConfigLabel")
self.gridLayout.addWidget(self.uiNetworkConfigLabel, 15, 0, 1, 1)
self.gridLayout.addWidget(self.uiNetworkConfigLabel, 16, 0, 1, 1)
self.uiNetworkConfigEditButton = QtWidgets.QPushButton(self.tab)
self.uiNetworkConfigEditButton.setObjectName("uiNetworkConfigEditButton")
self.gridLayout.addWidget(self.uiNetworkConfigEditButton, 15, 1, 1, 1)
self.gridLayout.addWidget(self.uiNetworkConfigEditButton, 16, 1, 1, 1)
self.uiMaxCPUsLabel = QtWidgets.QLabel(self.tab)
self.uiMaxCPUsLabel.setObjectName("uiMaxCPUsLabel")
self.gridLayout.addWidget(self.uiMaxCPUsLabel, 8, 0, 1, 1)
Expand All @@ -148,6 +148,14 @@ def setupUi(self, dockerVMConfigPageWidget):
self.uiMaxMemorySpinBox.setSingleStep(32)
self.uiMaxMemorySpinBox.setObjectName("uiMaxMemorySpinBox")
self.gridLayout.addWidget(self.uiMaxMemorySpinBox, 7, 1, 1, 1)
self.uiAuxTypeLabel = QtWidgets.QLabel(self.tab)
self.uiAuxTypeLabel.setObjectName("uiAuxTypeLabel")
self.gridLayout.addWidget(self.uiAuxTypeLabel, 11, 0, 1, 1)
self.uiAuxTypeComboBox = QtWidgets.QComboBox(self.tab)
self.uiAuxTypeComboBox.setObjectName("uiAuxTypeComboBox")
self.uiAuxTypeComboBox.addItem("")
self.uiAuxTypeComboBox.addItem("")
self.gridLayout.addWidget(self.uiAuxTypeComboBox, 11, 1, 1, 1)
self.uiTabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
Expand Down Expand Up @@ -225,6 +233,9 @@ def retranslateUi(self, dockerVMConfigPageWidget):
self.uiMaxCPUsLabel.setText(_translate("dockerVMConfigPageWidget", "Maximum CPUs:"))
self.uiMaxMemoryLabel.setText(_translate("dockerVMConfigPageWidget", "Maximum memory:"))
self.uiMaxMemorySpinBox.setSuffix(_translate("dockerVMConfigPageWidget", " MB"))
self.uiAuxTypeLabel.setText(_translate("dockerVMConfigPageWidget", "Auxiliary console type:"))
self.uiAuxTypeComboBox.setItemText(0, _translate("dockerVMConfigPageWidget", "telnet"))
self.uiAuxTypeComboBox.setItemText(1, _translate("dockerVMConfigPageWidget", "none"))
self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab), _translate("dockerVMConfigPageWidget", "General settings"))
self.uiExtraHostsLabel.setText(_translate("dockerVMConfigPageWidget", "Extra hosts added\n"
"to the /etc/hosts file.\n"
Expand Down
5 changes: 4 additions & 1 deletion gns3/modules/dynamips/nodes/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ def __init__(self, module, server, project, platform="c7200"):
"console_type": "telnet",
"console_auto_start": False,
"aux": None,
"aux_type": "none",
"mac_addr": None,
"system_id": "FTX0945W0MY",
"slot0": None,
Expand Down Expand Up @@ -242,7 +243,8 @@ def info(self):
Local ID is {id} and server ID is {node_id}
Dynamips ID is {dynamips_id}
Hardware is Dynamips emulated Cisco {platform} {specific_info} with {ram}MB RAM and {nvram}KB NVRAM
Console is on port {console} and type is {console_type}, AUX console is on port {aux}
Console is on port {console} and type is {console_type}
Auxiliary console is on port {aux} and type is {aux_type}
IOS image is "{image_name}"
{idlepc_info}
PCMCIA disks: disk0 is {disk0}MB and disk1 is {disk1}MB
Expand All @@ -260,6 +262,7 @@ def info(self):
console=self._settings["console"],
console_type=self._settings["console_type"],
aux=self._settings["aux"],
aux_type=self._settings["aux_type"],
image_name=os.path.basename(self._settings["image"]),
idlepc_info=idlepc_info,
disk0=self._settings["disk0"],
Expand Down
8 changes: 8 additions & 0 deletions gns3/modules/dynamips/pages/ios_router_configuration_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,11 @@ def loadSettings(self, settings, node=None, group=False):

self.uiConsoleAutoStartCheckBox.setChecked(settings["console_auto_start"])

# load the auxiliary console type
index = self.uiAuxTypeComboBox.findText(settings["aux_type"])
if index != -1:
self.uiAuxTypeComboBox.setCurrentIndex(index)

# load the memories and disks settings
self.uiRamSpinBox.setValue(settings["ram"])
self.uiNvramSpinBox.setValue(settings["nvram"])
Expand Down Expand Up @@ -579,6 +584,9 @@ def saveSettings(self, settings, node=None, group=False):
settings["console_type"] = self.uiConsoleTypeComboBox.currentText().lower()
settings["console_auto_start"] = self.uiConsoleAutoStartCheckBox.isChecked()

# save auxiliary console type
settings["aux_type"] = self.uiAuxTypeComboBox.currentText().lower()

# save the memories and disks settings
settings["ram"] = self.uiRamSpinBox.value()
settings["nvram"] = self.uiNvramSpinBox.value()
Expand Down
1 change: 1 addition & 0 deletions gns3/modules/dynamips/pages/ios_router_preferences_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,7 @@ def _refreshInfo(self, ios_router):
QtWidgets.QTreeWidgetItem(section_item, ["Image:", ios_router["image"]])
QtWidgets.QTreeWidgetItem(section_item, ["Console type:", ios_router["console_type"]])
QtWidgets.QTreeWidgetItem(section_item, ["Auto start console:", "{}".format(ios_router["console_auto_start"])])
QtWidgets.QTreeWidgetItem(section_item, ["Auxiliary console type:", ios_router["aux_type"]])
if ios_router["idlepc"]:
QtWidgets.QTreeWidgetItem(section_item, ["Idle-PC:", ios_router["idlepc"]])
if ios_router["startup_config"]:
Expand Down
1 change: 1 addition & 0 deletions gns3/modules/dynamips/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"private_config": "",
"console_type": "telnet",
"console_auto_start": False,
"aux_type": "none",
"platform": "",
"idlepc": "",
"idlemax": 500,
Expand Down
Loading

0 comments on commit 029a1df

Please sign in to comment.