Skip to content

Commit

Permalink
Check/get ingress port on add-on load (#4744)
Browse files Browse the repository at this point in the history
Instead of setting the ingress port on install, make sure to set
the port when the add-on gets loaded (on Supervisor startup and
before installation). This is necessary since the dynamic ingress
ports are not stored as part of the add-on data storage themself
but in the ingress data store. So on every Supervisor start the
port needs to be transferred to the add-on model.

Note that we still need to check the port on add-on update since
the add-on potentially added (dynamic) ingress on update. Same
applies to add-on restore (the restored version might use a dynamic
ingress port).
  • Loading branch information
agners authored Dec 6, 2023
1 parent 72e6467 commit 96f4ba5
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
4 changes: 1 addition & 3 deletions supervisor/addons/addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ async def load(self) -> None:
)
)

await self._check_ingress_port()
with suppress(DockerError):
await self.instance.attach(version=self.version)

Expand Down Expand Up @@ -640,8 +641,6 @@ async def install(self) -> None:
self.sys_addons.data.uninstall(self)
raise AddonsError() from err

await self._check_ingress_port()

# Add to addon manager
self.sys_addons.local[self.slug] = self

Expand Down Expand Up @@ -769,7 +768,6 @@ async def rebuild(self) -> asyncio.Task | None:
raise AddonsError() from err

self.sys_addons.data.update(self.addon_store)
await self._check_ingress_port()
_LOGGER.info("Add-on '%s' successfully rebuilt", self.slug)

finally:
Expand Down
13 changes: 13 additions & 0 deletions tests/addons/test_addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -683,3 +683,16 @@ async def test_local_example_start(
await install_addon_example.start()

assert addon_config_dir.is_dir()


async def test_local_example_ingress_port_set(
coresys: CoreSys,
container: MagicMock,
tmp_supervisor_data: Path,
install_addon_example: Addon,
):
"""Test start of an addon."""
install_addon_example.path_data.mkdir()
await install_addon_example.load()

assert install_addon_example.ingress_port != 0
2 changes: 2 additions & 0 deletions tests/fixtures/addons/local/example/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@ options:
message: "Hello world..."
schema:
message: "str?"
ingress: true
ingress_port: 0

0 comments on commit 96f4ba5

Please sign in to comment.