Allow dynamic handling of proto part (#203)

* Allow dynamic handling of proto part

* Fix lint

* fix bug
This commit is contained in:
Pascal Vizeli 2017-10-01 00:03:06 +02:00 committed by GitHub
parent 79e2f3e8ab
commit 2998cd94ff
2 changed files with 23 additions and 9 deletions

View File

@ -29,7 +29,9 @@ from ..tools import write_json_file, read_json_file
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
RE_WEBUI = re.compile(r"^(.*\[HOST\]:)\[PORT:(\d+)\](.*)$") RE_WEBUI = re.compile(
r"^(?:(?P<s_prefix>https?)|\[PROTO:(?P<t_proto>\w+)\])"
r":\/\/\[HOST\]:\[PORT:(?P<t_port>\d+)\](?P<s_suffix>.*)$")
MERGE_OPT = Merger([(dict, ['merge'])], ['override'], ['override']) MERGE_OPT = Merger([(dict, ['merge'])], ['override'], ['override'])
@ -207,19 +209,31 @@ class Addon(object):
"""Return URL to webui or None.""" """Return URL to webui or None."""
if ATTR_WEBUI not in self._mesh: if ATTR_WEBUI not in self._mesh:
return None return None
webui = RE_WEBUI.match(self._mesh[ATTR_WEBUI])
webui = self._mesh[ATTR_WEBUI] # extract arguments
dock_port = RE_WEBUI.sub(r"\2", webui) t_port = webui.group('t_port')
t_proto = webui.group('t_proto')
s_prefix = webui.group('s_prefix') or ""
s_suffix = webui.group('s_suffix') or ""
# search host port for this docker port
if self.ports is None: if self.ports is None:
real_port = dock_port port = self.ports.get("{}/tcp".format(t_port), t_port)
else: else:
real_port = self.ports.get("{}/tcp".format(dock_port), dock_port) port = t_port
# for interface config or port lists # for interface config or port lists
if isinstance(real_port, (tuple, list)): if isinstance(port, (tuple, list)):
real_port = real_port[-1] port = port[-1]
return RE_WEBUI.sub(r"\g<1>{}\g<3>".format(real_port), webui) # lookup the correct protocol from config
if t_proto:
proto = 'https' if self.options[t_proto] else 'http'
else:
proto = s_prefix
return "{}://[HOST]:{}{}".format(proto, port, s_suffix)
@property @property
def host_network(self): def host_network(self):

View File

@ -86,7 +86,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({
vol.In([BOOT_AUTO, BOOT_MANUAL]), vol.In([BOOT_AUTO, BOOT_MANUAL]),
vol.Optional(ATTR_PORTS): DOCKER_PORTS, vol.Optional(ATTR_PORTS): DOCKER_PORTS,
vol.Optional(ATTR_WEBUI): vol.Optional(ATTR_WEBUI):
vol.Match(r"^(?:https?):\/\/\[HOST\]:\[PORT:\d+\].*$"), vol.Match(r"^(?:https?|\[PROTO:\w+\]):\/\/\[HOST\]:\[PORT:\d+\].*$"),
vol.Optional(ATTR_HOST_NETWORK, default=False): vol.Boolean(), vol.Optional(ATTR_HOST_NETWORK, default=False): vol.Boolean(),
vol.Optional(ATTR_DEVICES): [vol.Match(r"^(.*):(.*):([rwm]{1,3})$")], vol.Optional(ATTR_DEVICES): [vol.Match(r"^(.*):(.*):([rwm]{1,3})$")],
vol.Optional(ATTR_TMPFS): vol.Optional(ATTR_TMPFS):