---
version: '2.1'
services:
{% for i in range(cluster_node_count|default(1)|int) %}
  {% set container_postfix = loop.index %}
  {% set awx_sdb_port_start = sdb_port_base|int + (loop.index0*1000) | int %}
  {% set awx_sdb_port_end = sdb_port_base|int +100 + (loop.index0*1000) | int %}
  # Primary AWX Development Container
  awx_{{ container_postfix }}:
    user: "{{ user_id }}"
    image: "{{ awx_image }}:{{ awx_image_tag }}"
    container_name: {{ awx_prefix }}_awx_{{ container_postfix }}
    hostname: awx_{{ container_postfix }}
    command: launch_awx.sh
    environment:
      OS: "{{ os_info.stdout }}"
      SDB_HOST: 0.0.0.0
      SDB_PORT: {{ awx_sdb_port_start }}
      AWX_GROUP_QUEUES: tower
      RECEPTORCTL_SOCKET: /var/run/receptor/receptor.sock
{% if loop.index == 1 %}
      RUN_MIGRATIONS: 1
{% endif %}
    links:
      - postgres
      - redis_{{ container_postfix }}
    working_dir: "/awx_devel"
    volumes:
      - "{{ awx_basedir }}/{{ awx_version }}:/awx_devel"
      - "{{ awx_composedir }}/supervisor.conf:/etc/supervisord.conf"
      - "{{ awx_composedir }}//database.py:/etc/tower/conf.d/database.py"
      - "{{ awx_composedir }}//websocket_secret.py:/etc/tower/conf.d/websocket_secret.py"
      - "{{ awx_composedir }}//local_settings.py:/etc/tower/conf.d/local_settings.py"
      - "{{ awx_composedir }}//SECRET_KEY:/etc/tower/SECRET_KEY"
      - "{{ awx_composedir }}/receptor.conf:/etc/receptor/receptor.conf"
      - "/sys/fs/cgroup:/sys/fs/cgroup"
      - "~/.kube/config:/var/lib/awx/.kube/config"
      - "redis_socket_{{ container_postfix }}:/var/run/redis/:rw"
      - "receptor_{{ container_postfix }}:/var/run/receptor/"
    privileged: true
    tty: true
    ports:
      - "{{ awx_sdb_port_start }}-{{ awx_sdb_port_end }}:{{ awx_sdb_port_start }}-{{ awx_sdb_port_end }}"  # sdb-listen
{% if cluster_node_count|default(1)|int == 1 %}
      #- "6899:6899"
      #- "8080:8080"  # unused but mapped for debugging
      #- "8888:8888"  # jupyter notebook
      - "{{ http_port }}:8013"  # http
      - "{{ https_port }}:8043"  # https
{% endif %}
  redis_{{ container_postfix }}:
    image: redis:latest
    container_name: {{ awx_prefix }}_redis_{{ container_postfix }}
    volumes:
      - "{{ awx_composedir }}/redis/redis.conf:/usr/local/etc/redis/redis.conf"
      - "redis_socket_{{ container_postfix }}:/var/run/redis/:rw"
    entrypoint: ["redis-server"]
    command: ["/usr/local/etc/redis/redis.conf"]
{% endfor %}
{% if cluster_node_count|default(1)|int > 1 %}
  haproxy:
    user: "{{ user_id }}"
    image: haproxy
    container_name: {{ awx_prefix }}_haproxy_1
    volumes:
      - "{{ awx_composedir }}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
    ports:
      - "{{ http_port }}:8013"
      - "{{ https_port }}:8043"
      - "1936:1936"
    depends_on:
  {% for i in range(cluster_node_count|default(1)|int) -%}
  {% set container_postfix = loop.index %}
    - "awx_{{ container_postfix }}"
  {% endfor %}
{% endif %}
  # A useful container that simply passes through log messages to the console
  # helpful for testing awx/tower logging
  # logstash:
  #   build:
  #     context: ./docker-compose
  #     dockerfile: Dockerfile-logstash
  postgres:
    image: postgres:12
    container_name: {{ awx_prefix }}_postgres_1
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
      POSTGRES_USER: {{ pg_username }}
      POSTGRES_DB: {{ pg_database }}
      POSTGRES_PASSWORD: {{ pg_password }}
    volumes:
      - "awx_db:/var/lib/postgresql/data"
volumes:
  awx_db:
    name: {{ awx_prefix }}_awx_db
{% for i in range(cluster_node_count|default(1)|int) -%}
  {% set container_postfix = loop.index %}
  receptor_{{ container_postfix }}:
    name: {{ awx_prefix }}_receptor_{{ container_postfix }}
  redis_socket_{{ container_postfix }}:
    name: {{ awx_prefix }}_redis_socket_{{ container_postfix }}
{% endfor -%}
