|
Author: Pekka Helenius <pekka.helenius@fjordtek.com>
|
|
Date: Sun, 6 Jun 2021 15:09:21 +0200
|
|
Subject: [PATCH] GNS3 Server: QEMU environment variables.
|
|
|
|
Add support for QEMU environment variables for GNS3 Server.
|
|
|
|
--- a/gns3server/schemas/qemu.py
|
|
+++ b/gns3server/schemas/qemu.py
|
|
@@ -65,6 +65,10 @@
|
|
"description": "Console type",
|
|
"enum": ["telnet", "vnc", "spice"]
|
|
},
|
|
+ "env_vars": {
|
|
+ "description": "Environment variables",
|
|
+ "type": "string",
|
|
+ },
|
|
"hda_disk_image": {
|
|
"description": "QEMU hda disk image path",
|
|
"type": "string",
|
|
@@ -250,6 +254,10 @@
|
|
"description": "Whether the VM is a linked clone or not",
|
|
"type": "boolean"
|
|
},
|
|
+ "env_vars": {
|
|
+ "description": "Environment variables",
|
|
+ "type": "string",
|
|
+ },
|
|
"hda_disk_image": {
|
|
"description": "QEMU hda disk image path",
|
|
"type": "string",
|
|
@@ -434,6 +442,10 @@
|
|
"description": "Platform to emulate",
|
|
"enum": QEMU_PLATFORMS
|
|
},
|
|
+ "env_vars": {
|
|
+ "description": "Environment variables",
|
|
+ "type": "string",
|
|
+ },
|
|
"hda_disk_image": {
|
|
"description": "QEMU hda disk image path",
|
|
"type": "string",
|
|
@@ -603,6 +615,7 @@
|
|
"qemu_path",
|
|
"platform",
|
|
"console_type",
|
|
+ "env_vars",
|
|
"hda_disk_image",
|
|
"hdb_disk_image",
|
|
"hdc_disk_image",
|
|
|
|
--- a/gns3server/schemas/qemu_template.py
|
|
+++ b/gns3server/schemas/qemu_template.py
|
|
@@ -22,6 +22,11 @@
|
|
|
|
|
|
QEMU_TEMPLATE_PROPERTIES = {
|
|
+ "env_vars": {
|
|
+ "description": "Environment variables",
|
|
+ "type": "string",
|
|
+ "default": ""
|
|
+ },
|
|
"qemu_path": {
|
|
"description": "Path to QEMU",
|
|
"type": "string",
|
|
|
|
--- a/gns3server/compute/qemu/qemu_vm.py
|
|
+++ b/gns3server/compute/qemu/qemu_vm.py
|
|
@@ -93,6 +93,7 @@
|
|
else:
|
|
self.platform = platform
|
|
|
|
+ self._env_vars = ""
|
|
self._hda_disk_image = ""
|
|
self._hdb_disk_image = ""
|
|
self._hdc_disk_image = ""
|
|
@@ -219,6 +220,32 @@
|
|
disk_image=value))
|
|
|
|
@property
|
|
+ def env_vars(self):
|
|
+ """
|
|
+ Returns the environment variables for this QEMU VM.
|
|
+
|
|
+ :returns: QEMU env vars
|
|
+ """
|
|
+
|
|
+ return self._env_vars
|
|
+
|
|
+ @env_vars.setter
|
|
+ def env_vars(self, env_vars):
|
|
+ """
|
|
+ Sets the environment variables for this QEMU VM.
|
|
+
|
|
+ :param env vars: QEMU env vars
|
|
+ """
|
|
+
|
|
+ log.info('QEMU VM "{name}" [{id}] has set the QEMU environment variables to {env_vars}'.format(name=self._name,
|
|
+ id=self._id,
|
|
+ env_vars=env_vars))
|
|
+ if sys.platform.startswith("linux"):
|
|
+ self._env_vars = env_vars.strip()
|
|
+ else:
|
|
+ self._env_vars = ""
|
|
+
|
|
+ @property
|
|
def hda_disk_image(self):
|
|
"""
|
|
Returns the hda disk image path for this QEMU VM.
|
|
@@ -912,7 +939,7 @@
|
|
with open(self._stdout_file, "w", encoding="utf-8") as fd:
|
|
fd.write("Start QEMU with {}\n\nExecution log:\n".format(command_string))
|
|
self.command_line = ' '.join(command)
|
|
- self._process = await asyncio.create_subprocess_exec(*command,
|
|
+ self._process = await asyncio.create_subprocess_shell(command_string,
|
|
stdout=fd,
|
|
stderr=subprocess.STDOUT,
|
|
cwd=self.working_dir)
|
|
@@ -1651,7 +1678,10 @@
|
|
additional_options = additional_options.replace("%vm-id%", self._id)
|
|
additional_options = additional_options.replace("%project-id%", self.project.id)
|
|
additional_options = additional_options.replace("%project-path%", '"' + self.project.path.replace('"', '\\"') + '"')
|
|
- command = [self.qemu_path]
|
|
+ command = []
|
|
+ if self._env_vars:
|
|
+ command.extend([self._env_vars])
|
|
+ command.extend([self.qemu_path])
|
|
command.extend(["-name", self._name])
|
|
command.extend(["-m", "{}M".format(self._ram)])
|
|
command.extend(["-smp", "cpus={}".format(self._cpus)])
|
|
|