From c2cfc0d3d49edb1ac1e6f052a2f2bf28b7576d1f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 21 Apr 2020 16:59:28 +0200 Subject: [PATCH] Allow moving registry for supervisor (#1667) * Allow moving registry for supervisor * fix * Filter number --- supervisor/docker/supervisor.py | 27 +++++++++++++++++++++++++++ supervisor/supervisor.py | 5 ++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/supervisor/docker/supervisor.py b/supervisor/docker/supervisor.py index d7c9f5f04..eef1e358c 100644 --- a/supervisor/docker/supervisor.py +++ b/supervisor/docker/supervisor.py @@ -77,3 +77,30 @@ class DockerSupervisor(DockerInterface, CoreSysAttributes): except docker.errors.DockerException as err: _LOGGER.error("Can't retag supervisor version: %s", err) raise DockerAPIError() from None + + def update_start_tag(self, image: str, version: str) -> Awaitable[None]: + """Update start tag to new version.""" + return self.sys_run_in_executor(self._update_start_tag, image, version) + + def _update_start_tag(self, image: str, version: str) -> None: + """Update start tag to new version. + + Need run inside executor. + """ + try: + docker_container = self.sys_docker.containers.get(self.name) + docker_image = self.sys_docker.images.get(f"{image}:{version}") + + # Find start tag + for tag in docker_container.image.tags: + start_image = tag.partition(":")[0] + start_tag = tag.partition(":")[2] or "latest" + + # If version tag + if start_tag.isdigit(): + continue + docker_image.tag(start_image, start_tag) + + except docker.errors.DockerException as err: + _LOGGER.error("Can't fix start tag: %s", err) + raise DockerAPIError() from None diff --git a/supervisor/supervisor.py b/supervisor/supervisor.py index 02a9667ac..ced606e5c 100644 --- a/supervisor/supervisor.py +++ b/supervisor/supervisor.py @@ -116,7 +116,10 @@ class Supervisor(CoreSysAttributes): _LOGGER.info("Update Supervisor to version %s", version) try: await self.instance.install( - version, image=self.sys_updater.image_supervisor, latest=True + version, image=self.sys_updater.image_supervisor + ) + await self.instance.update_start_tag( + self.sys_updater.image_supervisor, version ) except DockerAPIError: _LOGGER.error("Update of Supervisor fails!")