- 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