services:
{%- if ',' in cookiecutter.__component_list_slug -%}
{%- set components = cookiecutter.__component_list_slug.split(',') -%}
{%- set ns = namespace(found=false) -%}
{%- for component in components %}
    {%- if loop.first -%}
        {%- set ns.first_component = component -%}
    {%- elif N is undefined -%}
        {%- set ns.second_component = component -%}
        {%- set N = 0 -%}
    {%- endif -%}
{%- endfor -%}
{%- for component in components %}
    {{ component }}:
        image: "{{ component }}:${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"
        container_name: "{{ cookiecutter.__service_slug }}-{{ component }}-${CONTEXT}"
        networks:
            {{ cookiecutter.__service_slug }}-default:
        profiles: ["full", "{{ component }}"]
        {% if loop.first -%}
        depends_on:
            {{ ns.second_component }}:
                condition: service_healthy
        {%- else -%}
        healthcheck:
            test: ["CMD", "fping", "--count=1", "${% raw %}{{% endraw %}{{ ns.first_component.upper() }}_VIP{% raw %}}{% endraw %}", "--period=500", "--quiet"]
            interval: 3s
            timeout: 1s
            retries: 60
            start_period: 2s
        {%- endif %}
        ulimits:
            nproc: ${ULIMIT_NPROC-65535}
            nofile:
                soft: ${ULIMIT_NPROC-65535}
                hard: ${ULIMIT_NPROC-65535}
        extends:
            file: common-settings.yml
            service: common-settings
        ports:
            # - "8080:80"
        volumes:
            # When changing bind mount locations to real ones remember to
            # also update "Initial setup" section in README.md.
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/data/db:/usr/lib/{{ component }}
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/data/logs:/var/log/{{ component }}
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/config:/etc/{{ component }}
        environment:
            # {{ component.upper() }}_USER: ${% raw %}{{% endraw %}{{ component.upper() }}_USER{% raw %}}{% endraw %}
            # {{ component.upper() }}_PASSWORD: ${% raw %}{{% endraw %}{{ component.upper() }}_PASSWORD{% raw %}}{% endraw %}
{%- endfor -%}
{%- else %}
    {{ cookiecutter.__component_list_slug }}:
        image: "{{ cookiecutter.__component_list_slug }}:${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
        container_name: "{{ cookiecutter.__service_slug }}-${CONTEXT}"
        networks:
            {{ cookiecutter.__service_slug }}-default:
        ulimits:
            nproc: ${ULIMIT_NPROC-65535}
            nofile:
                soft: ${ULIMIT_NPROC-65535}
                hard: ${ULIMIT_NPROC-65535}
        extends:
            file: common-settings.yml
            service: common-settings
        ports:
            # - "8080:80"
        volumes:
            # When changing bind mount locations to real ones remember to
            # also update "Initial setup" section in README.md.
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/data/db:/usr/lib/{{ cookiecutter.__service_slug }}
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/data/logs:/var/log/{{ cookiecutter.__service_slug }}
            # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/config:/etc/{{ cookiecutter.__service_slug }}
        environment:
            # {{ cookiecutter.__component_list_slug.upper() }}_USER: ${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_USER{% raw %}}{% endraw %}
            # {{ cookiecutter.__component_list_slug.upper() }}_PASSWORD: ${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_PASSWORD{% raw %}}{% endraw %}
{%- endif %}
networks:
    {{ cookiecutter.__service_slug }}-default:
        name: {{ cookiecutter.__service_slug }}-${CONTEXT}
        driver: bridge
        driver_opts:
            com.docker.network.enable_ipv6: "false"
        ipam:
            driver: default
            config:
                - subnet: ${SUBNET}