Allow port range like 8000-8010:80

Signed-off-by: SeungJin Oh <crierr@naver.com>
This commit is contained in:
crierr 2017-02-20 00:06:27 +09:00 committed by SeungJin Oh
parent a90e3e442c
commit cfc11515bc
2 changed files with 11 additions and 3 deletions

View File

@ -24,7 +24,7 @@ def build_port_bindings(ports):
return port_bindings
def to_port_range(port):
def to_port_range(port, randomly_available_port = False):
if not port:
return None
@ -37,6 +37,9 @@ def to_port_range(port):
port, protocol = parts
protocol = "/" + protocol
if randomly_available_port:
return ["%s%s" % (port, protocol)]
parts = str(port).split('-')
if len(parts) == 1:
@ -69,7 +72,7 @@ def split_port(port):
external_port, internal_port = parts
internal_range = to_port_range(internal_port)
external_range = to_port_range(external_port)
external_range = to_port_range(external_port, len(internal_range) == 1)
if internal_range is None or external_range is None:
_raise_invalid_port(port)
@ -81,7 +84,7 @@ def split_port(port):
external_ip, external_port, internal_port = parts
internal_range = to_port_range(internal_port)
external_range = to_port_range(external_port)
external_range = to_port_range(external_port, len(internal_range) == 1)
if not external_range:
external_range = [None] * len(internal_range)

View File

@ -530,6 +530,11 @@ class PortsTest(unittest.TestCase):
self.assertEqual(internal_port, ["2000", "2001"])
self.assertEqual(external_port, ["1000", "1001"])
def test_split_port_random_port_range_with_host_port(self):
internal_port, external_port = split_port("1000-1001:2000")
self.assertEqual(internal_port, ["2000"])
self.assertEqual(external_port, ["1000-1001"])
def test_split_port_no_host_port(self):
internal_port, external_port = split_port("2000")
self.assertEqual(internal_port, ["2000"])