#jinja2: lstrip_blocks: True
version: '2'
services:

  web:
    image: {{ awx_docker_actual_image }}
    container_name: awx_web
    depends_on:
      - redis
      {% if pg_hostname is not defined %}
      - postgres
      {% endif %}
    {% if (host_port is defined) or (host_port_ssl is defined) %}
    ports:
      {% if (host_port_ssl is defined) and (ssl_certificate is defined) %}
      - "{{ host_port_ssl }}:8053"
      {% endif %}
      {% if host_port is defined %}
      - "{{ host_port }}:8052"
      {% endif %}
    {% endif %}
    hostname: {{ awx_web_hostname }}
    user: root
    restart: unless-stopped
    {% if (awx_web_container_labels is defined) and (',' in awx_web_container_labels) %}
    {% set awx_web_container_labels_list = awx_web_container_labels.split(',') %}
    labels:
      {% for awx_web_container_label in awx_web_container_labels_list %}
      - {{ awx_web_container_label }}
      {% endfor %}
    {% elif awx_web_container_labels is defined %}
    labels:
      - {{ awx_web_container_labels }}
    {% endif %}
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "{{ docker_compose_dir }}/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "{{ docker_compose_dir }}/environment.sh:/etc/tower/conf.d/environment.sh"
      - "{{ docker_compose_dir }}/credentials.py:/etc/tower/conf.d/credentials.py"
      - "{{ docker_compose_dir }}/nginx.conf:/etc/nginx/nginx.conf:ro"
      - "{{ docker_compose_dir }}/redis_socket:/var/run/redis/:rw"
    {% if project_data_dir is defined %}
      - "{{ project_data_dir +':/var/lib/awx/projects:rw' }}"
    {% endif %}
    {% if custom_venv_dir is defined %}
      - "{{ custom_venv_dir +':'+ custom_venv_dir +':rw' }}"
    {% endif %}
    {% if ca_trust_dir is defined %}
      - "{{ ca_trust_dir +':/etc/pki/ca-trust/source/anchors:ro' }}"
    {% endif %}
    {% if (ssl_certificate is defined) and (ssl_certificate_key is defined) %}
      - "{{ ssl_certificate +':/etc/nginx/awxweb.pem:ro' }}"
      - "{{ ssl_certificate_key +':/etc/nginx/awxweb_key.pem:ro' }}"
    {% elif (ssl_certificate is defined) and (ssl_certificate_key is not defined) %}
      - "{{ ssl_certificate +':/etc/nginx/awxweb.pem:ro' }}"
    {% endif %}
    {% if (awx_container_search_domains is defined) and (',' in awx_container_search_domains) %}
    {% set awx_container_search_domains_list = awx_container_search_domains.split(',') %}
    dns_search:
    {% for awx_container_search_domain in awx_container_search_domains_list %}
      - {{ awx_container_search_domain }}
    {% endfor %}
    {% elif awx_container_search_domains is defined %}
    dns_search: "{{ awx_container_search_domains }}"
    {% endif %}
    {% if (awx_alternate_dns_servers is defined) and (',' in awx_alternate_dns_servers) %}
    {% set awx_alternate_dns_servers_list = awx_alternate_dns_servers.split(',') %}
    dns:
    {% for awx_alternate_dns_server in awx_alternate_dns_servers_list %}
      - {{ awx_alternate_dns_server }}
    {% endfor %}
    {% elif awx_alternate_dns_servers is defined %}
    dns: "{{ awx_alternate_dns_servers }}"
    {% endif %}
    {% if (docker_compose_extra_hosts is defined) and (':' in docker_compose_extra_hosts) %}
    {% set docker_compose_extra_hosts_list = docker_compose_extra_hosts.split(',') %}
    extra_hosts:
    {% for docker_compose_extra_host in docker_compose_extra_hosts_list %}
      - "{{ docker_compose_extra_host }}"
    {% endfor %}
    {% endif %}
    environment:
      http_proxy: {{ http_proxy | default('') }}
      https_proxy: {{ https_proxy | default('') }}
      no_proxy: {{ no_proxy | default('') }}
    {% if docker_logger is defined %}
    logging:
      driver: {{ docker_logger }}
    {% endif %}

  task:
    image: {{ awx_docker_actual_image }}
    container_name: awx_task
    depends_on:
      - redis
      - web
      {% if pg_hostname is not defined %}
      - postgres
      {% endif %}
    command: /usr/bin/launch_awx_task.sh
    hostname: {{ awx_task_hostname }}
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "{{ docker_compose_dir }}/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "{{ docker_compose_dir }}/environment.sh:/etc/tower/conf.d/environment.sh"
      - "{{ docker_compose_dir }}/credentials.py:/etc/tower/conf.d/credentials.py"
      - "{{ docker_compose_dir }}/redis_socket:/var/run/redis/:rw"
    {% if project_data_dir is defined %}
      - "{{ project_data_dir +':/var/lib/awx/projects:rw' }}"
    {% endif %}
    {% if custom_venv_dir is defined %}
      - "{{ custom_venv_dir +':'+ custom_venv_dir +':rw' }}"
    {% endif %}
    {% if ca_trust_dir is defined %}
      - "{{ ca_trust_dir +':/etc/pki/ca-trust/source/anchors:ro' }}"
    {% endif %}
    {% if ssl_certificate is defined %}
      - "{{ ssl_certificate +':/etc/nginx/awxweb.pem:ro' }}"
    {% endif %}
    {% if (awx_container_search_domains is defined) and (',' in awx_container_search_domains) %}
    {% set awx_container_search_domains_list = awx_container_search_domains.split(',') %}
    dns_search:
    {% for awx_container_search_domain in awx_container_search_domains_list %}
      - {{ awx_container_search_domain }}
    {% endfor %}
    {% elif awx_container_search_domains is defined %}
    dns_search: "{{ awx_container_search_domains }}"
    {% endif %}
    {% if (awx_alternate_dns_servers is defined) and (',' in awx_alternate_dns_servers) %}
    {% set awx_alternate_dns_servers_list = awx_alternate_dns_servers.split(',') %}
    dns:
    {% for awx_alternate_dns_server in awx_alternate_dns_servers_list %}
      - {{ awx_alternate_dns_server }}
    {% endfor %}
    {% elif awx_alternate_dns_servers is defined %}
    dns: "{{ awx_alternate_dns_servers }}"
    {% endif %}
    {% if (docker_compose_extra_hosts is defined) and (':' in docker_compose_extra_hosts) %}
    {% set docker_compose_extra_hosts_list = docker_compose_extra_hosts.split(',') %}
    extra_hosts:
    {% for docker_compose_extra_host in docker_compose_extra_hosts_list %}
      - "{{ docker_compose_extra_host }}"
    {% endfor %}
    {% endif %}
    environment:
      AWX_SKIP_MIGRATIONS: "1"
      http_proxy: {{ http_proxy | default('') }}
      https_proxy: {{ https_proxy | default('') }}
      no_proxy: {{ no_proxy | default('') }}
      SUPERVISOR_WEB_CONFIG_PATH: '/etc/supervisord.conf'

  redis:
    image: {{ redis_image }}
    container_name: awx_redis
    restart: unless-stopped
    environment:
      http_proxy: {{ http_proxy | default('') }}
      https_proxy: {{ https_proxy | default('') }}
      no_proxy: {{ no_proxy | default('') }}
    command: ["/usr/local/etc/redis/redis.conf"]
    volumes:
      - "{{ docker_compose_dir }}/redis.conf:/usr/local/etc/redis/redis.conf:ro"
      - "{{ docker_compose_dir }}/redis_socket:/var/run/redis/:rw"
    {% if docker_logger is defined %}
    logging:
      driver: {{ docker_logger }}
    {% endif %}

  {% if pg_hostname is not defined %}
  postgres:
    image: {{ postgresql_image }}
    container_name: awx_postgres
    restart: unless-stopped
    volumes:
      - "{{ postgres_data_dir }}/12/data/:/var/lib/postgresql/data:Z"
    environment:
      POSTGRES_USER: {{ pg_username }}
      POSTGRES_PASSWORD: {{ pg_password }}
      POSTGRES_DB: {{ pg_database }}
      http_proxy: {{ http_proxy | default('') }}
      https_proxy: {{ https_proxy | default('') }}
      no_proxy: {{ no_proxy | default('') }}
    {% if docker_logger is defined %}
    logging:
      driver: {{ docker_logger }}
    {% endif %}
  {% endif %}

{% if docker_compose_subnet is defined %}
networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet:  {{ docker_compose_subnet }}
{% endif %}

volumes:
  supervisor-socket:
  rsyslog-socket:
  rsyslog-config:
