diff --git a/gns3/modules/docker/docker_vm.py b/gns3/modules/docker/docker_vm.py index c3e59cc26..883f33b5b 100644 --- a/gns3/modules/docker/docker_vm.py +++ b/gns3/modules/docker/docker_vm.py @@ -52,7 +52,8 @@ def __init__(self, module, server, project): "console_http_port": DOCKER_CONTAINER_SETTINGS["console_http_port"], "console_http_path": DOCKER_CONTAINER_SETTINGS["console_http_path"], "extra_hosts": DOCKER_CONTAINER_SETTINGS["extra_hosts"], - "extra_volumes": DOCKER_CONTAINER_SETTINGS["extra_volumes"]} + "extra_volumes": DOCKER_CONTAINER_SETTINGS["extra_volumes"], + "extra_parameters": DOCKER_CONTAINER_SETTINGS["extra_parameters"]} self.settings().update(docker_vm_settings) diff --git a/gns3/modules/docker/pages/docker_vm_configuration_page.py b/gns3/modules/docker/pages/docker_vm_configuration_page.py index 76b29e619..43dc2f4b6 100644 --- a/gns3/modules/docker/pages/docker_vm_configuration_page.py +++ b/gns3/modules/docker/pages/docker_vm_configuration_page.py @@ -105,6 +105,7 @@ def loadSettings(self, settings, node=None, group=False): self.uiHttpConsolePathLineEdit.setText(settings["console_http_path"]) self.uiExtraHostsTextEdit.setPlainText(settings["extra_hosts"]) self.uiExtraVolumeTextEdit.setPlainText("\n".join(settings["extra_volumes"])) + self.uiExtraParametersTextEdit.setPlainText(settings["extra_parameters"]) if not group: self.uiNameLineEdit.setText(settings["name"]) @@ -178,6 +179,7 @@ def saveSettings(self, settings, node=None, group=False): settings["extra_hosts"] = self.uiExtraHostsTextEdit.toPlainText() # only tidy input here, validation is performed server side settings["extra_volumes"] = [ y for x in self.uiExtraVolumeTextEdit.toPlainText().split("\n") for y in [ x.strip() ] if y ] + settings["extra_parameters"] = self.uiExtraParametersTextEdit.toPlainText() if not group: adapters = self.uiAdapterSpinBox.value() diff --git a/gns3/modules/docker/pages/docker_vm_preferences_page.py b/gns3/modules/docker/pages/docker_vm_preferences_page.py index 16ae4dc34..35d2eb541 100644 --- a/gns3/modules/docker/pages/docker_vm_preferences_page.py +++ b/gns3/modules/docker/pages/docker_vm_preferences_page.py @@ -97,6 +97,9 @@ def _refreshInfo(self, docker_container): if docker_container["extra_volumes"]: QtWidgets.QTreeWidgetItem(section_item, ["Extra volumes:", "\n".join(docker_container["extra_volumes"])]) + + if docker_container["extra_parameters"]: + QtWidgets.QTreeWidgetItem(section_item, ["Extra parameters:", str(docker_container["extra_parameters"])]) self.uiDockerVMInfoTreeWidget.expandAll() self.uiDockerVMInfoTreeWidget.resizeColumnToContents(0) diff --git a/gns3/modules/docker/settings.py b/gns3/modules/docker/settings.py index 0ae3c8ac2..33edf2cb2 100644 --- a/gns3/modules/docker/settings.py +++ b/gns3/modules/docker/settings.py @@ -44,5 +44,6 @@ "console_http_path": "/", "extra_hosts": "", "extra_volumes": [], + "extra_parameters": "", "node_type": "docker" } diff --git a/gns3/modules/docker/ui/docker_vm_configuration_page.ui b/gns3/modules/docker/ui/docker_vm_configuration_page.ui index ad5c56168..ce4a467f1 100644 --- a/gns3/modules/docker/ui/docker_vm_configuration_page.ui +++ b/gns3/modules/docker/ui/docker_vm_configuration_page.ui @@ -17,7 +17,7 @@ - 0 + 1 @@ -324,18 +324,53 @@ directory per line. - - - - Qt::Vertical - - + + + - 20 + 10 388 - + + Modify parameters to +create the container +using the JSON format of +the Docker API, use only +if you have a specific +requirement e.g. systemd. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + + + e.g. systemd +{ + "StopSignal": "SIGRTMIN+3", + "HostConfig": { + "CapAdd": ["ALL"], + "Runtime": "runc", + "Privileged": true, + "Binds": [ + "/sys/fs/cgroup:/sys/fs/cgroup:ro", + "/sys/fs/fuse:/sys/fs/fuse" + ], + "Tmpfs": { + "/tmp": "", + "/run": "", + "/run/lock": "" + } + } +} + + diff --git a/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py b/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py index a741f6989..37535e72a 100644 --- a/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py +++ b/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py @@ -153,8 +153,16 @@ def setupUi(self, dockerVMConfigPageWidget): self.uiExtraVolumeTextEdit.setPlainText("") self.uiExtraVolumeTextEdit.setObjectName("uiExtraVolumeTextEdit") self.gridLayout_2.addWidget(self.uiExtraVolumeTextEdit, 1, 1, 1, 1) - spacerItem = QtWidgets.QSpacerItem(20, 388, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout_2.addItem(spacerItem, 2, 1, 1, 1) + + self.uiExtraParametersLabel = QtWidgets.QLabel(self.tab_2) + self.uiExtraParametersLabel.setObjectName("uiExtraParametersLabel") + self.uiExtraParametersLabel.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignLeading | QtCore.Qt.AlignTop) + self.gridLayout_2.addWidget(self.uiExtraParametersLabel, 2, 0, 1, 1) + + self.uiExtraParametersTextEdit = QtWidgets.QPlainTextEdit(self.tab_2) + self.uiExtraParametersTextEdit.setPlainText("") + self.uiExtraParametersTextEdit.setObjectName("uiExtraParametersTextEdit") + self.gridLayout_2.addWidget(self.uiExtraParametersTextEdit, 2, 1, 1, 1) self.uiTabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") @@ -215,6 +223,30 @@ def retranslateUi(self, dockerVMConfigPageWidget): "VOLUMES config. One\n" "directory per line.")) self.uiExtraVolumeTextEdit.setPlaceholderText(_translate("dockerVMConfigPageWidget", "e.g. /etc/sysctl.d")) + self.uiExtraParametersLabel.setText(_translate("dockerVMConfigPageWidget", "Modify parameters to\n" +"create the container\n" +"using the JSON format of\n" +"the Docker API, use only\n" +"if you have a specific\n" +"requirement")) + self.uiExtraParametersTextEdit.setPlaceholderText(_translate("dockerVMConfigPageWidget", """e.g. systemd +{ + "StopSignal": "SIGRTMIN+3", + "HostConfig": { + "CapAdd": ["ALL"], + "Runtime": "runc", + "Privileged": true, + "Binds": [ + "/sys/fs/cgroup:/sys/fs/cgroup:ro", + "/sys/fs/fuse:/sys/fs/fuse" + ], + "Tmpfs": { + "/tmp": "", + "/run": "", + "/run/lock": "" + } + } +}""")) self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_2), _translate("dockerVMConfigPageWidget", "Advanced")) self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_3), _translate("dockerVMConfigPageWidget", "Usage"))