Cleanup network mode & fix port mapping (#166)

* Cleanup network mode & fix port mapping

* Fix lint
This commit is contained in:
Pascal Vizeli 2017-08-24 16:39:06 +02:00 committed by GitHub
parent 04514a9f5c
commit 3525f5a02f
4 changed files with 27 additions and 10 deletions

View File

@ -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):

View File

@ -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,

View File

@ -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,

View File

@ -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)