Skip to content
This repository was archived by the owner on Dec 13, 2018. It is now read-only.

Add support for new Compose naming scheme #247

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
FROM alpine:3.6
MAINTAINER Feng Honglin <hfeng@tutum.co>
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 && \
Expand All @@ -26,5 +25,4 @@ ENV RSYSLOG_DESTINATION=127.0.0.1 \
NBPROC=1

EXPOSE 80 443 1936
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["dockercloud-haproxy"]
2 changes: 1 addition & 1 deletion haproxy/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.6.7"
__version__ = "1.6.8"
11 changes: 9 additions & 2 deletions haproxy/helper/compose_mode_link_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,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", {})
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])
Expand Down Expand Up @@ -95,7 +97,7 @@ def get_container_envvars(container):
return container_evvvars


def _get_linked_compose_services(networks, project):
def _get_linked_compose_services(networks, project, has_slug):
prefix = "%s_" % project
prefix_len = len(prefix)

Expand All @@ -112,6 +114,11 @@ def _get_linked_compose_services(networks, project):
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 <project>_<service>_<index> to <project>_<service>_<index>_<slug>,
# where <slug> is a randomly-generated hexadecimal string.
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
Expand Down
16 changes: 8 additions & 8 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
PyYAML==3.11
PyYAML==3.13
cached-property==1.2.0
docker-py==1.10.3
docker==3.5.0
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
4 changes: 2 additions & 2 deletions tests/unit/helper/test_compose_mode_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -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', False))

self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], ''))
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))
Expand Down