From 1891b2b78ce977512885b289fe310221ce88efae Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Tue, 11 Apr 2017 14:45:14 -0700 Subject: [PATCH] Fix ServicePort.legacy_repr bug for `ext_ip::target` notation Signed-off-by: Joffrey F --- compose/config/types.py | 4 ++-- tests/unit/config/types_test.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/compose/config/types.py b/compose/config/types.py index 96846b5ba..dd61a8796 100644 --- a/compose/config/types.py +++ b/compose/config/types.py @@ -267,7 +267,7 @@ class ServicePort(namedtuple('_ServicePort', 'target published protocol mode ext @classmethod def parse(cls, spec): if isinstance(spec, cls): - # WHen extending a service with ports, the port definitions have already been parsed + # When extending a service with ports, the port definitions have already been parsed return [spec] if not isinstance(spec, dict): @@ -316,7 +316,7 @@ class ServicePort(namedtuple('_ServicePort', 'target published protocol mode ext def normalize_port_dict(port): return '{external_ip}{has_ext_ip}{published}{is_pub}{target}/{protocol}'.format( published=port.get('published', ''), - is_pub=(':' if port.get('published') else ''), + is_pub=(':' if port.get('published') or port.get('external_ip') else ''), target=port.get('target'), protocol=port.get('protocol', 'tcp'), external_ip=port.get('external_ip', ''), diff --git a/tests/unit/config/types_test.py b/tests/unit/config/types_test.py index 66588d629..83d6270d2 100644 --- a/tests/unit/config/types_test.py +++ b/tests/unit/config/types_test.py @@ -71,6 +71,16 @@ class TestServicePort(object): } assert ports[0].legacy_repr() == port_def + def test_parse_ext_ip_no_published_port(self): + port_def = '1.1.1.1::3000' + ports = ServicePort.parse(port_def) + assert len(ports) == 1 + assert ports[0].legacy_repr() == port_def + '/tcp' + assert ports[0].repr() == { + 'target': '3000', + 'external_ip': '1.1.1.1', + } + def test_parse_port_range(self): ports = ServicePort.parse('25000-25001:4000-4001') assert len(ports) == 2