- apt:
    name: nginx

- copy:
    content: |
        upstream {{ item.docker_name }} {
            ip_hash;

            {% for host in groups['ctf_host'] -%}
                {%- for container in hostvars[host]['docker_containers'] -%}
                    {%- if container.docker_name == item.docker_name -%}
                        {%- for port in container['docker_ports'] %}
                            {%- if port.get('web_port') -%}
                            {%- if '-' in port['port_out']|string -%}
                                {%- set port_range = port['port_out'].split('-') -%}
                                {%- set port_from = port_range[0]|int -%}
                                {%- set port_to = port_range[1]|int -%}
                            {%- else -%}
                                {%- set port_from = port['port_out']|int -%}
                                {%- set port_to = port['port_out']|int -%}
                            {%- endif -%}

                            {%- for p in range(port_from, port_to+1) %}
            server {{ hostvars[host].inventory_hostname }}:{{ p }};
                            {% endfor -%}
                            {%- endif -%}
                        {%- endfor -%}
                    {%- endif -%}
                {%- endfor -%}
            {%- endfor -%}
        }

        server {
            listen 80;

            server_name {{ item.docker_name }}.{{ root_domain }};

            try_files $uri $uri/ =404;

            location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Frame-Options SAMEORIGIN;

                proxy_pass http://{{item.docker_name}};
            }
        }
    dest: "/etc/nginx/sites-available/{{item.docker_name}}"
  with_items: "{{docker_containers}}"

- file:
    src: "/etc/nginx/sites-available/{{item.docker_name}}"
    dest: "/etc/nginx/sites-enabled/{{item.docker_name}}"
    state: link
  with_items: "{{docker_containers}}"
  notify: nginx_changed

- service:
    name: nginx
    state: started