version: '2.1'

# The tag of images is used by docker compose file to launch the correct
# docker containers. By default we always launch the "latest" tag.
#
# But in the "docker build" phase, we also tag the images with a unique tag,
# the SHA1 hash of all files used for "docker build" - see sha1tree() in
# provisioning.
#
# So if you want to update the docker image at a specific time, make sure that
#   1. you modify this file to run the specific image's SHA1 tag, instead of
#      "latest"
#   2. you build two docker images in provisioning, the currently used one,
#      plus the new one that you tag as "latest"
#   3. you switch this file to the "latest" tag when ready

# You can run `docker images` to list all the tags of available images:
# For example:
# REPOSITORY              TAG
# qt-test-server-apache2  537fe302f61851d1663f41495230d8e3554a4a13

services:
    apache2:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-apache2
        hostname: ${HOST_NAME:-apache2}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-apache2:latest
                shareDir: ./common
                serviceDir: ./apache2
        entrypoint: service/startup.sh
        command: [service/ssl.sh, service/apache2.sh]

    squid:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-squid
        hostname: ${HOST_NAME:-squid}
        depends_on:
            - apache2
        external_links:
            - apache2:apache2.${TEST_DOMAIN}
            - cyrus:cyrus.${TEST_DOMAIN}
            - iptables:iptables.${TEST_DOMAIN}
            - vsftpd:vsftpd.${TEST_DOMAIN}
            - echo:echo.${TEST_DOMAIN}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-squid:latest
                shareDir: ./common
                serviceDir: ./squid
        entrypoint: service/startup.sh
        command: service/squid.sh

    vsftpd:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-vsftpd
        hostname: ${HOST_NAME:-vsftpd}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-vsftpd:latest
                shareDir: ./common
                serviceDir: ./vsftpd
        entrypoint: service/startup.sh
        command: service/vsftpd.sh

    ftp-proxy:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-ftp-proxy
        hostname: ${HOST_NAME:-ftp-proxy}
        depends_on:
            - vsftpd
        external_links:
            - vsftpd:vsftpd.${TEST_DOMAIN}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-ftp-proxy:latest
                shareDir: ./common
                serviceDir: ./ftp-proxy
        entrypoint: service/startup.sh
        command: service/ftp-proxy.sh

    danted:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-danted
        hostname: ${HOST_NAME:-danted}
        depends_on:
            - apache2
            - vsftpd
            - ftp-proxy
        external_links:
            - apache2:apache2.${TEST_DOMAIN}
            - vsftpd:vsftpd.${TEST_DOMAIN}
            - ftp-proxy:ftp-proxy.${TEST_DOMAIN}
            - cyrus:cyrus.${TEST_DOMAIN}
            - echo:echo.${TEST_DOMAIN}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-danted:latest
                shareDir: ./common
                serviceDir: ./danted
        entrypoint: service/startup.sh
        command: service/danted.sh

    cyrus:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-cyrus
        hostname: ${HOST_NAME:-cyrus}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-cyrus:latest
                shareDir: ./common
                serviceDir: ./cyrus
        entrypoint: service/startup.sh
        command: [service/ssl.sh, service/cyrus.sh]

    iptables:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-iptables
        hostname: ${HOST_NAME:-iptables}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-iptables:latest
                shareDir: ./common
                serviceDir: ./iptables
        entrypoint: service/startup.sh
        command: service/iptables.sh
        cap_add:
            - NET_ADMIN
            - NET_RAW

    echo:
        extends:
            file: ${SHARED_DATA}/docker-compose-common.yml
            service: ${SHARED_SERVICE}
        container_name: qt-test-server-echo
        hostname: ${HOST_NAME:-echo}
        build:
            context: .
            args:
                provisioningImage: qt-test-server-echo:latest
                shareDir: ./common
                serviceDir: ./echo
        entrypoint: service/startup.sh
        command: service/echo.sh
