diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index f9607b5be..dc19a6e7a 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -179,7 +179,7 @@ class Addon(object): @property def ports(self): """Return ports of addon.""" - if self.network_mode or ATTR_PORTS not in self._mesh: + if self.host_network or ATTR_PORTS not in self._mesh: return None if not self.is_installed or \ @@ -222,11 +222,9 @@ class Addon(object): return RE_WEBUI.sub(r"\g<1>{}\g<3>".format(real_port), webui) @property - def network_mode(self): - """Return network mode of addon.""" - if self._mesh[ATTR_HOST_NETWORK]: - return 'host' - return None + def host_network(self): + """Return True if addon run on host network.""" + return self._mesh[ATTR_HOST_NETWORK] @property def devices(self): diff --git a/hassio/api/addons.py b/hassio/api/addons.py index e4e14ac87..e6acec354 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -121,7 +121,7 @@ class APIAddons(object): ATTR_DETACHED: addon.is_detached, ATTR_BUILD: addon.need_build, ATTR_NETWORK: addon.ports, - ATTR_HOST_NETWORK: addon.network_mode == 'host', + ATTR_HOST_NETWORK: addon.host_network, ATTR_PRIVILEGED: addon.privileged, ATTR_DEVICES: self._pretty_devices(addon), ATTR_LOGO: addon.with_logo, diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 029f14004..3d8a9e341 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -64,6 +64,18 @@ class DockerAddon(DockerInterface): return devices return None + @property + def ports(self): + """Filter None from addon ports.""" + if not self.addon.ports: + return None + + return { + container_port: host_port + for container_port, host_port in self.addon.ports.items() + if host_port + } + @property def tmpfs(self): """Return tmpfs for docker add-on.""" @@ -79,6 +91,13 @@ class DockerAddon(DockerInterface): 'homeassistant': self.docker.network.gateway, } + @property + def network_mode(self): + """Return network mode for addon.""" + if self.addon.host_network: + return 'host' + return None + @property def volumes(self): """Generate volumes for mappings.""" @@ -141,8 +160,8 @@ class DockerAddon(DockerInterface): name=self.name, hostname=self.hostname, detach=True, - network_mode=self.addon.network_mode, - ports=self.addon.ports, + network_mode=self.network_mode, + ports=self.ports, extra_hosts=self.network_mapping, devices=self.devices, cap_add=self.addon.privileged, diff --git a/hassio/dock/network.py b/hassio/dock/network.py index aa90b42fb..68546453a 100644 --- a/hassio/dock/network.py +++ b/hassio/dock/network.py @@ -61,7 +61,7 @@ class DockerNetwork(object): Need run inside executor. """ - ipv4 = str(ipv4) if ipv4 else "" + ipv4 = str(ipv4) if ipv4 else None try: self.network.connect(container, aliases=alias, ipv4_address=ipv4)