Merge branch '2.2' into 3.0

# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/controller/__init__.py
#	gns3server/controller/appliance_manager.py
#	gns3server/web/route.py
#	requirements.txt
#	tests/compute/docker/test_docker_vm.py
This commit is contained in:
grossmj 2023-09-06 23:30:00 +07:00
commit 1ec056c1a6
5 changed files with 19 additions and 13 deletions

View File

@ -488,8 +488,8 @@ class DockerVM(BaseNode):
params["Env"].append(f"DISPLAY=:{self._display}") params["Env"].append(f"DISPLAY=:{self._display}")
params["HostConfig"]["Mounts"].append({ params["HostConfig"]["Mounts"].append({
"Type": "bind", "Type": "bind",
"Source": "/tmp/.X11-unix/", "Source": f"/tmp/.X11-unix/X{self._display}",
"Target": "/tmp/.X11-unix/" "Target": f"/tmp/.X11-unix/X{self._display}"
}) })
if self._extra_hosts: if self._extra_hosts:

View File

@ -270,9 +270,12 @@ class Controller:
log.error(f"Cannot read IOU license file '{iourc_path}': {e}") log.error(f"Cannot read IOU license file '{iourc_path}': {e}")
self._iou_license_settings["license_check"] = iou_config.license_check self._iou_license_settings["license_check"] = iou_config.license_check
current_version = __version__.split("+")[0] previous_version = controller_settings.get("version")
previous_version = controller_vars.get("version", "").split("+")[0] log.info("Comparing controller version {} with config version {}".format(__version__, previous_version))
if not previous_version or parse_version(current_version) > parse_version(previous_version): if not previous_version or \
parse_version(__version__.split("+")[0]) > parse_version(previous_version.split("+")[0]):
self._appliance_manager.install_builtin_appliances()
elif not os.listdir(self._appliance_manager.builtin_appliances_path()):
self._appliance_manager.install_builtin_appliances() self._appliance_manager.install_builtin_appliances()
self._appliance_manager.appliances_etag = controller_vars.get("appliances_etag") self._appliance_manager.appliances_etag = controller_vars.get("appliances_etag")

View File

@ -21,6 +21,7 @@ import json
import asyncio import asyncio
import aiofiles import aiofiles
import shutil import shutil
import platformdirs
from typing import Tuple, List from typing import Tuple, List
@ -94,13 +95,13 @@ class ApplianceManager:
os.makedirs(appliances_path, exist_ok=True) os.makedirs(appliances_path, exist_ok=True)
return appliances_path return appliances_path
def _builtin_appliances_path(self, delete_first=False): def builtin_appliances_path(self, delete_first=False):
""" """
Get the built-in appliance storage directory Get the built-in appliance storage directory
""" """
config = Config.instance() appname = vendor = "GNS3"
appliances_dir = os.path.join(config.config_dir, "appliances") appliances_dir = os.path.join(platformdirs.user_data_dir(appname, vendor, roaming=True), "appliances")
if delete_first: if delete_first:
shutil.rmtree(appliances_dir, ignore_errors=True) shutil.rmtree(appliances_dir, ignore_errors=True)
os.makedirs(appliances_dir, exist_ok=True) os.makedirs(appliances_dir, exist_ok=True)
@ -111,7 +112,7 @@ class ApplianceManager:
At startup we copy the built-in appliances files. At startup we copy the built-in appliances files.
""" """
dst_path = self._builtin_appliances_path(delete_first=True) dst_path = self.builtin_appliances_path(delete_first=True)
log.info(f"Installing built-in appliances in '{dst_path}'") log.info(f"Installing built-in appliances in '{dst_path}'")
from . import Controller from . import Controller
try: try:
@ -316,7 +317,7 @@ class ApplianceManager:
self._appliances = {} self._appliances = {}
for directory, builtin in ( for directory, builtin in (
( (
self._builtin_appliances_path(), self.builtin_appliances_path(),
True, True,
), ),
( (
@ -434,7 +435,7 @@ class ApplianceManager:
Controller.instance().save() Controller.instance().save()
json_data = await response.json() json_data = await response.json()
appliances_dir = self._builtin_appliances_path() appliances_dir = self.builtin_appliances_path()
downloaded_appliance_files = [] downloaded_appliance_files = []
for appliance in json_data: for appliance in json_data:
if appliance["type"] == "file": if appliance["type"] == "file":

View File

@ -18,4 +18,5 @@ python-jose==3.3.0
email-validator==2.0.0.post2 email-validator==2.0.0.post2
watchfiles==0.20.0 watchfiles==0.20.0
zstandard==0.21.0 zstandard==0.21.0
platformdirs==2.4.0
importlib_resources>=1.3 importlib_resources>=1.3

View File

@ -222,8 +222,9 @@ async def test_create_vnc(compute_project, manager):
}, },
{ {
"Type": "bind", "Type": "bind",
"Source": "/tmp/.X11-unix/", "Source": f"/tmp/.X11-unix/X{vm._display}",
"Target": "/tmp/.X11-unix/" "Target": f"/tmp/.X11-unix/X{vm._display}",
"ReadOnly": True
} }
], ],
"Privileged": True, "Privileged": True,