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 @property
def ports(self): def ports(self):
"""Return ports of addon.""" """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 return None
if not self.is_installed or \ 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) return RE_WEBUI.sub(r"\g<1>{}\g<3>".format(real_port), webui)
@property @property
def network_mode(self): def host_network(self):
"""Return network mode of addon.""" """Return True if addon run on host network."""
if self._mesh[ATTR_HOST_NETWORK]: return self._mesh[ATTR_HOST_NETWORK]
return 'host'
return None
@property @property
def devices(self): def devices(self):

View File

@ -121,7 +121,7 @@ class APIAddons(object):
ATTR_DETACHED: addon.is_detached, ATTR_DETACHED: addon.is_detached,
ATTR_BUILD: addon.need_build, ATTR_BUILD: addon.need_build,
ATTR_NETWORK: addon.ports, ATTR_NETWORK: addon.ports,
ATTR_HOST_NETWORK: addon.network_mode == 'host', ATTR_HOST_NETWORK: addon.host_network,
ATTR_PRIVILEGED: addon.privileged, ATTR_PRIVILEGED: addon.privileged,
ATTR_DEVICES: self._pretty_devices(addon), ATTR_DEVICES: self._pretty_devices(addon),
ATTR_LOGO: addon.with_logo, ATTR_LOGO: addon.with_logo,

View File

@ -64,6 +64,18 @@ class DockerAddon(DockerInterface):
return devices return devices
return None 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 @property
def tmpfs(self): def tmpfs(self):
"""Return tmpfs for docker add-on.""" """Return tmpfs for docker add-on."""
@ -79,6 +91,13 @@ class DockerAddon(DockerInterface):
'homeassistant': self.docker.network.gateway, '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 @property
def volumes(self): def volumes(self):
"""Generate volumes for mappings.""" """Generate volumes for mappings."""
@ -141,8 +160,8 @@ class DockerAddon(DockerInterface):
name=self.name, name=self.name,
hostname=self.hostname, hostname=self.hostname,
detach=True, detach=True,
network_mode=self.addon.network_mode, network_mode=self.network_mode,
ports=self.addon.ports, ports=self.ports,
extra_hosts=self.network_mapping, extra_hosts=self.network_mapping,
devices=self.devices, devices=self.devices,
cap_add=self.addon.privileged, cap_add=self.addon.privileged,

View File

@ -61,7 +61,7 @@ class DockerNetwork(object):
Need run inside executor. Need run inside executor.
""" """
ipv4 = str(ipv4) if ipv4 else "" ipv4 = str(ipv4) if ipv4 else None
try: try:
self.network.connect(container, aliases=alias, ipv4_address=ipv4) self.network.connect(container, aliases=alias, ipv4_address=ipv4)