From f4e76d1a05185b52624008c3877eb9e6935cad46 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:31:54 +0200 Subject: [PATCH 01/10] Update to Alpine 3.8 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 84960f2..9e6721d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.6 +FROM alpine:3.8 MAINTAINER Feng Honglin COPY . /haproxy-src From a6ff9924e9b7fd96b0c3f7cd6156d2172f6f633e Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:32:03 +0200 Subject: [PATCH 02/10] Update Compose mode link helper for the new naming scheme of Compose 1.23.0 and later --- haproxy/helper/compose_mode_link_helper.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/haproxy/helper/compose_mode_link_helper.py b/haproxy/helper/compose_mode_link_helper.py index 1eb27b3..de72197 100644 --- a/haproxy/helper/compose_mode_link_helper.py +++ b/haproxy/helper/compose_mode_link_helper.py @@ -1,4 +1,5 @@ import logging +from packaging import version logger = logging.getLogger("haproxy") @@ -10,7 +11,9 @@ def get_compose_mode_links(docker, haproxy_container): raise Exception("Cannot read compose labels. Are you using docker compose V2?") networks = haproxy_container.get("NetworkSettings", {}).get("Networks", {}) - linked_compose_services = _get_linked_compose_services(networks, project) + compose_labels = haproxy_container.get("Config", {}).get("Labels", {}) + compose_version = compose_labels.get("com.docker.compose.version", "") + linked_compose_services = _get_linked_compose_services(networks, project, compose_version) links = _calc_links(docker, linked_compose_services, project) return links, set(["%s_%s" % (project, service) for service in linked_compose_services]) @@ -95,9 +98,14 @@ def get_container_envvars(container): return container_evvvars -def _get_linked_compose_services(networks, project): +def _get_linked_compose_services(networks, project, compose_version): prefix = "%s_" % project prefix_len = len(prefix) + + # The default naming scheme for containers created by Compose in has changed in 1.23.0 + # from __ to ___, + # where is a randomly-generated hexadecimal string. + has_slug = version.parse(compose_version) >= version.parse("1.23.0") haproxy_links = [] for network in networks.itervalues(): @@ -111,6 +119,8 @@ def _get_linked_compose_services(networks, project): service = terms[0].strip() if service and service.startswith(prefix): last = service.rfind("_") + if has_slug: + last = last.rfind("_") linked_service = service[prefix_len:last] if linked_service not in linked_services: linked_services.append(linked_service) From c80ae6e78d38aa076b68ca8a5f264a74dccaf4ca Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:36:04 +0200 Subject: [PATCH 03/10] Remove deprecated MAINTAINER instruction --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9e6721d..8434f94 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ FROM alpine:3.8 -MAINTAINER Feng Honglin COPY . /haproxy-src From dcafcc486bb28b192f2959a2a41432d74bc292a1 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:42:25 +0200 Subject: [PATCH 04/10] Bump version to 1.6.8 --- haproxy/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/haproxy/__init__.py b/haproxy/__init__.py index 64206c4..2382cc1 100644 --- a/haproxy/__init__.py +++ b/haproxy/__init__.py @@ -1 +1 @@ -__version__ = "1.6.7" +__version__ = "1.6.8" From a5f532f569c7a781489d33655117ecfbcd711256 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:44:09 +0200 Subject: [PATCH 05/10] Add packaging dependency --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index de2d3e0..ef579f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,3 +13,4 @@ websocket-client==0.37.0 docker-compose==1.6.0 python-dockercloud==1.0.10 gevent==1.1.1 +packaging==18.0 From e30cf9073c4a737b3ba605c8f196d35a3b0ce8e8 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 15:58:39 +0200 Subject: [PATCH 06/10] Update some dependencies --- requirements.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/requirements.txt b/requirements.txt index ef579f5..153df23 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,16 @@ -PyYAML==3.11 +PyYAML==3.13 cached-property==1.2.0 -docker-py==1.10.3 +docker-py==1.10.6 dockerpty==0.4.1 -docopt==0.6.1 +docopt==0.6.2 enum34==1.0.4 jsonschema==2.5.1 -texttable==0.8.4 -future==0.15.0 -requests==2.7.0 +texttable==0.9.1 +future==0.16.0 +requests==2.18.4 six==1.9.0 websocket-client==0.37.0 -docker-compose==1.6.0 -python-dockercloud==1.0.10 +docker-compose==1.22.0 +python-dockercloud==1.0.12 gevent==1.1.1 packaging==18.0 From b2346655b2d084a88205ded05be71bb8280f10fe Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 16:02:07 +0200 Subject: [PATCH 07/10] Fix tests --- tests/unit/helper/test_compose_mode_helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/helper/test_compose_mode_helper.py b/tests/unit/helper/test_compose_mode_helper.py index 0bace41..29318d4 100644 --- a/tests/unit/helper/test_compose_mode_helper.py +++ b/tests/unit/helper/test_compose_mode_helper.py @@ -361,9 +361,9 @@ def test_get_container_envvars(self): def test_get_link_compose_services(self): services = [u'hello', u'world'] - self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp')) + self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp', '1.22.0')) - self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '')) + self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '', '1.22.0')) def test_get_service_links_str(self): self.assertEqual([u'tmp_hello', u'tmp_world'], get_service_links_str(links)) From 5f4916d39a490338b6ab56c5988486ec092e8bf7 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 22:19:22 +0200 Subject: [PATCH 08/10] Fix version check --- haproxy/helper/compose_mode_link_helper.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/haproxy/helper/compose_mode_link_helper.py b/haproxy/helper/compose_mode_link_helper.py index de72197..353412b 100644 --- a/haproxy/helper/compose_mode_link_helper.py +++ b/haproxy/helper/compose_mode_link_helper.py @@ -105,7 +105,7 @@ def _get_linked_compose_services(networks, project, compose_version): # The default naming scheme for containers created by Compose in has changed in 1.23.0 # from __ to ___, # where is a randomly-generated hexadecimal string. - has_slug = version.parse(compose_version) >= version.parse("1.23.0") + has_slug = version.parse(compose_version) >= version.parse("1.23.0-rc1") haproxy_links = [] for network in networks.itervalues(): @@ -119,9 +119,9 @@ def _get_linked_compose_services(networks, project, compose_version): service = terms[0].strip() if service and service.startswith(prefix): last = service.rfind("_") - if has_slug: - last = last.rfind("_") linked_service = service[prefix_len:last] + if has_slug: + linked_service = linked_service[0:linked_service.rfind("_")] if linked_service not in linked_services: linked_services.append(linked_service) return linked_services From 952d05b96d8bd9724894379cd4a0848ce93bd924 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Fri, 28 Sep 2018 23:24:45 +0200 Subject: [PATCH 09/10] Check com.docker.compose.slug label instead of version number --- haproxy/helper/compose_mode_link_helper.py | 15 ++++++--------- requirements.txt | 1 - tests/unit/helper/test_compose_mode_helper.py | 4 ++-- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/haproxy/helper/compose_mode_link_helper.py b/haproxy/helper/compose_mode_link_helper.py index 353412b..4cb2cbe 100644 --- a/haproxy/helper/compose_mode_link_helper.py +++ b/haproxy/helper/compose_mode_link_helper.py @@ -1,5 +1,4 @@ import logging -from packaging import version logger = logging.getLogger("haproxy") @@ -12,8 +11,8 @@ def get_compose_mode_links(docker, haproxy_container): networks = haproxy_container.get("NetworkSettings", {}).get("Networks", {}) compose_labels = haproxy_container.get("Config", {}).get("Labels", {}) - compose_version = compose_labels.get("com.docker.compose.version", "") - linked_compose_services = _get_linked_compose_services(networks, project, compose_version) + has_slug = compose_labels.get("com.docker.compose.slug", "") != "" + linked_compose_services = _get_linked_compose_services(networks, project, has_slug) links = _calc_links(docker, linked_compose_services, project) return links, set(["%s_%s" % (project, service) for service in linked_compose_services]) @@ -98,14 +97,9 @@ def get_container_envvars(container): return container_evvvars -def _get_linked_compose_services(networks, project, compose_version): +def _get_linked_compose_services(networks, project, has_slug): prefix = "%s_" % project prefix_len = len(prefix) - - # The default naming scheme for containers created by Compose in has changed in 1.23.0 - # from __ to ___, - # where is a randomly-generated hexadecimal string. - has_slug = version.parse(compose_version) >= version.parse("1.23.0-rc1") haproxy_links = [] for network in networks.itervalues(): @@ -120,6 +114,9 @@ def _get_linked_compose_services(networks, project, compose_version): if service and service.startswith(prefix): last = service.rfind("_") linked_service = service[prefix_len:last] + # The default naming scheme for containers created by Compose in has changed in 1.23.0 + # from __ to ___, + # where is a randomly-generated hexadecimal string. if has_slug: linked_service = linked_service[0:linked_service.rfind("_")] if linked_service not in linked_services: diff --git a/requirements.txt b/requirements.txt index 153df23..d5e0980 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,4 +13,3 @@ websocket-client==0.37.0 docker-compose==1.22.0 python-dockercloud==1.0.12 gevent==1.1.1 -packaging==18.0 diff --git a/tests/unit/helper/test_compose_mode_helper.py b/tests/unit/helper/test_compose_mode_helper.py index 29318d4..9973f24 100644 --- a/tests/unit/helper/test_compose_mode_helper.py +++ b/tests/unit/helper/test_compose_mode_helper.py @@ -361,9 +361,9 @@ def test_get_container_envvars(self): def test_get_link_compose_services(self): services = [u'hello', u'world'] - self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp', '1.22.0')) + self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp', False)) - self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '', '1.22.0')) + self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '', False)) def test_get_service_links_str(self): self.assertEqual([u'tmp_hello', u'tmp_world'], get_service_links_str(links)) From 1c90fdff344d0bd983a076954984bab3d3cc0061 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Sat, 29 Sep 2018 20:30:01 +0200 Subject: [PATCH 10/10] Remove tini (use docker run --init instead) --- Dockerfile | 3 +-- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8434f94..86cd6f5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.8 COPY . /haproxy-src RUN apk update && \ - apk --no-cache add tini haproxy py-pip build-base python-dev ca-certificates && \ + apk --no-cache add haproxy py-pip build-base python-dev ca-certificates && \ cp /haproxy-src/reload.sh /reload.sh && \ cd /haproxy-src && \ pip install -r requirements.txt && \ @@ -25,5 +25,4 @@ ENV RSYSLOG_DESTINATION=127.0.0.1 \ NBPROC=1 EXPOSE 80 443 1936 -ENTRYPOINT ["/sbin/tini", "--"] CMD ["dockercloud-haproxy"] diff --git a/requirements.txt b/requirements.txt index d5e0980..f515ad7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ PyYAML==3.13 cached-property==1.2.0 -docker-py==1.10.6 +docker==3.5.0 dockerpty==0.4.1 docopt==0.6.2 enum34==1.0.4