diff --git a/tasks/main.yml b/tasks/main.yml index b7334e8..db92f8d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -51,17 +51,23 @@ dest: "/tmp/nginx_upstreams.yml" force: true register: "nginx_upstreams_download_result" + tags: + - configs + - upstreams -- name: "Read upstreams config" +- name: "Read upstreams config for nginx" slurp: src: "/tmp/nginx_upstreams.yml" - register: slurp_upstreams - -- name: Debug - debug: - msg: "{{ slurp_upstreams['content'] | b64decode | from_yaml }}" + register: upstreams_slurped + tags: + - configs + - upstreams - name: "Generate nginx upstreams config" template: src: conf.d/upstreams.conf.j2 dest: /etc/nginx/conf.d/upstreams.conf + notify: Reload nginx + tags: + - configs + - upstreams diff --git a/templates/conf.d/upstreams.conf.j2 b/templates/conf.d/upstreams.conf.j2 index 416cf90..e3f97a6 100644 --- a/templates/conf.d/upstreams.conf.j2 +++ b/templates/conf.d/upstreams.conf.j2 @@ -1,5 +1,50 @@ {{ ansible_managed | comment }} -{% for upstream in slurp_upstreams['content'] | b64decode | from_yaml %} - {{ upstream.server_name }} +{% if nginx_resolver_string | default(false) %} + resolver {{ nginx_resolver_string }}; +{% endif %} + +{% set upstreams_encoded = upstreams_slurped['content'] | b64decode | from_yaml %} + +## BEGIN upstreams set +{% for upstream in upstreams_encoded -%} + upstream {{ upstream.name }} { + {% for server in upstream.servers -%} + {% set additional_upstream_server_config -%} + {% if server.weight | default(false) %}weight={{ server.weight }}{% endif %} + {% if server.max_conns | default(false) %}max_conns={{ server.max_conns }}{% endif %} + {% if server.max_fails | default(false) %}max_fails={{ server.max_fails }}{% endif %} + {% if server.fail_timeout | default(false) %}fail_timeout={{ server.fail_timeout }}{% endif %} + {% if server.backup | default(false) %}backup{% endif %} + {% if server.down | default(false) %}down{% endif %} + {% endset %} + server {{ server.name }} {{ additional_upstream_server_config | replace("\n", " ") }}; + {% endfor %} + } {% endfor %} +## END upstreams set + +## BEGIN servers set +{% for upstream in upstreams_encoded -%} + server { + listen {{ nginx_listen_addr }}:{{ nginx_listen_port }}; + server_name {{ upstream.external_domains | join(" ") }}; + + location / { + proxy_pass http://{{ upstream.name }}; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + {% if upstream.additional_location_config | default(false) -%} + {{ upstream.additional_location_config }} + {% endif %} + } + + {% if upstream.additional_server_config | default(false) -%} + {{ upstream.additional_server_config }} + {% endif %} + } +{% endfor %} +## END servers set