diff --git a/ansible/eru.yml b/ansible/eru.yml index 51652336..779e40b9 100644 --- a/ansible/eru.yml +++ b/ansible/eru.yml @@ -2,6 +2,7 @@ - hosts: consul - hosts: mongodb - hosts: redis +- hosts: socket-server-proxy - hosts: eru vars_files: @@ -10,9 +11,7 @@ - { role: notify, tags: [ notify ] } - { role: builder, tags: [ build ] } - role: container_start - -- hosts: socket-server-proxy - vars_files: - - group_vars/alpha-eru.yml - roles: - - role: eru + - role: nginx-proxied-service + nginx_host: "{{ groups['socket-server-proxy'][0] }}" + target_ip_address: "{{ hostvars[groups['eru'][0]]['ansible_default_ipv4']['address'] }}" + templates: [ 11-eru-server.conf ] diff --git a/ansible/roles/eru/tasks/main.yml b/ansible/roles/eru/tasks/main.yml deleted file mode 100644 index edf0aa24..00000000 --- a/ansible/roles/eru/tasks/main.yml +++ /dev/null @@ -1,49 +0,0 @@ ---- -- name: get ports from eru - delegate_to: "{{ groups['eru'][0] }}" - tags: [ config, deploy ] - become: true - shell: | - for c in $(docker ps | awk '/eru/{ print $1 }'); do - docker port $c 5501 | cut -d ':' -f 2 - docker port $c 5502 | cut -d ':' -f 2 - done - args: - executable: /bin/bash - register: ports - -- name: register IP as variable - tags: [ config, deploy ] - set_fact: - eru_server_hostname: "{{ hostvars[groups['eru'][0]].ansible_default_ipv4.address }}" - -- name: make nginx config directory - tags: [ config, deploy ] - become: yes - file: - state: directory - dest: /etc/nginx - -- name: put configuration in place - tags: [ config, deploy ] - become: yes - template: - src: "{{ item }}" - dest: /etc/nginx/sites-available/{{ item }} - with_items: - - 11-eru-server.conf - -- name: link configuration - tags: [ config, deploy ] - become: yes - file: - state: link - dest: /etc/nginx/sites-enabled/{{ item }} - src: /etc/nginx/sites-available/{{ item }} - with_items: - - 11-eru-server.conf - -- name: reload nginx - tags: [ config, deploy ] - become: yes - shell: docker ps | awk '/nginx/{ print $1 }' | xargs -n 1 docker kill --signal SIGHUP diff --git a/ansible/roles/nginx-proxied-service/tasks/main.yml b/ansible/roles/nginx-proxied-service/tasks/main.yml new file mode 100644 index 00000000..53ba553a --- /dev/null +++ b/ansible/roles/nginx-proxied-service/tasks/main.yml @@ -0,0 +1,97 @@ +--- +# these are pretty hacky, but it should work +# Get port information from the hosted service +- name: get eru ports + when: name == "eru" + tags: [ configure_proxy, deploy ] + become: true + shell: | + for c in $(docker ps | awk '/eru/{ print $1 }'); do + docker port $c 5501 | cut -d ':' -f 2 + docker port $c 5502 | cut -d ':' -f 2 + done + args: + executable: /bin/bash + register: eru_target_ports + +- name: get socket server ports + when: name == "api-socket-server" + tags: [ configure_proxy, deploy ] + become: true + shell: | + for c in $(docker ps | awk '/api-socket-server/{ print $1 }'); do + docker port $c 80 | cut -d ':' -f 2 + done + args: + executable: /bin/bash + register: socket_target_ports + +# everything from this point on is deligated to the nginx host + +- name: print target ports + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + debug: + msg: | + eru ports -- {{ eru_target_ports }} + socket ports -- {{ socket_target_ports }} + +- name: print target IP address + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + debug: + msg: ip -- {{ target_ip_address }} + +- name: assert nginx config directory + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + file: + state: directory + dest: /etc/nginx + +- name: assert nginx sites-available directory + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + file: + state: directory + dest: /etc/nginx/sites-available + +- name: assert nginx sites-enable directory + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + file: + state: directory + dest: /etc/nginx/sites-enable + +- name: put configuration in place + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + template: + src: "{{ item }}" + dest: /etc/nginx/sites-available/{{ item }} + with_items: "{{ templates }}" + +- name: link configuration to enable + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + file: + state: link + dest: /etc/nginx/sites-enabled/{{ item }} + src: /etc/nginx/sites-available/{{ item }} + with_items: "{{ templates }}" + +- name: reload nginx + delegate_to: "{{ nginx_host }}" + tags: [ configure_proxy, deploy ] + become: yes + shell: > + docker ps | + awk '/nginx/{ print $1 }' | + xargs -n 1 docker kill --signal SIGHUP + args: + executable: /bin/bash diff --git a/ansible/roles/socket-proxy/templates/00-nginx-status.conf b/ansible/roles/nginx-proxied-service/templates/00-nginx-status.conf similarity index 100% rename from ansible/roles/socket-proxy/templates/00-nginx-status.conf rename to ansible/roles/nginx-proxied-service/templates/00-nginx-status.conf diff --git a/ansible/roles/socket-proxy/templates/01-socket-server.conf b/ansible/roles/nginx-proxied-service/templates/01-socket-server.conf similarity index 93% rename from ansible/roles/socket-proxy/templates/01-socket-server.conf rename to ansible/roles/nginx-proxied-service/templates/01-socket-server.conf index 9fe9437b..ecbde2b1 100644 --- a/ansible/roles/socket-proxy/templates/01-socket-server.conf +++ b/ansible/roles/nginx-proxied-service/templates/01-socket-server.conf @@ -5,8 +5,8 @@ map $http_upgrade $connection_upgrade { upstream socketserver { sticky; - {% for port in ports.stdout_lines -%} - server {{ socket_server_hostname }}:{{ port }}; + {% for port in socket_target_ports.stdout_lines -%} + server {{ target_ip_address }}:{{ port }}; {% endfor %} } diff --git a/ansible/roles/eru/templates/11-eru-server.conf b/ansible/roles/nginx-proxied-service/templates/11-eru-server.conf similarity index 88% rename from ansible/roles/eru/templates/11-eru-server.conf rename to ansible/roles/nginx-proxied-service/templates/11-eru-server.conf index 97ab710f..06c8f692 100644 --- a/ansible/roles/eru/templates/11-eru-server.conf +++ b/ansible/roles/nginx-proxied-service/templates/11-eru-server.conf @@ -35,7 +35,7 @@ server { location / { expires 300; - proxy_pass http://{{ eru_server_hostname }}:{{ ports.stdout_lines[0] | trim }}; + proxy_pass http://{{ target_ip_address }}:{{ eru_target_ports.stdout_lines[0] | trim }}; proxy_set_header Host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; @@ -44,7 +44,7 @@ server { } location /graphql { - proxy_pass http://{{ eru_server_hostname }}:{{ ports.stdout_lines[1] | trim }}; + proxy_pass http://{{ target_ip_address }}:{{ eru_target_ports.stdout_lines[1] | trim }}; proxy_set_header Host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; diff --git a/ansible/roles/socket-proxy/files/nginx.conf b/ansible/roles/socket-proxy/files/nginx.conf deleted file mode 100644 index 85403025..00000000 --- a/ansible/roles/socket-proxy/files/nginx.conf +++ /dev/null @@ -1,74 +0,0 @@ -user www-data; -worker_processes 4; -pid /run/nginx.pid; -daemon off; - -events { - worker_connections 768; - # multi_accept on; -} - -http { - - ## - # Basic Settings - ## - - sendfile on; - tcp_nopush on; - tcp_nodelay on; - keepalive_timeout 65; - types_hash_max_size 2048; - server_tokens off; - - # server_names_hash_bucket_size 64; - # server_name_in_redirect off; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ## - # Logging Settings - ## - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - ## - # Gzip Settings - ## - - gzip on; - gzip_disable "msie6"; - - # gzip_vary on; - # gzip_proxied any; - # gzip_comp_level 6; - # gzip_buffers 16 8k; - # gzip_http_version 1.1; - # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; - - ## - # nginx-naxsi config - ## - # Uncomment it if you installed nginx-naxsi - ## - - #include /etc/nginx/naxsi_core.rules; - - ## - # nginx-passenger config - ## - # Uncomment it if you installed nginx-passenger - ## - - #passenger_root /usr; - #passenger_ruby /usr/bin/ruby; - - ## - # Virtual Host Configs - ## - - include /etc/nginx/conf.d/*.conf; - include /etc/nginx/sites-enabled/*; -} diff --git a/ansible/roles/socket-proxy/handlers/main.yml b/ansible/roles/socket-proxy/handlers/main.yml deleted file mode 100644 index 567c37e0..00000000 --- a/ansible/roles/socket-proxy/handlers/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- name: restart nginx - tags: [ config ] - become: yes - service: - name: nginx - state: restarted diff --git a/ansible/roles/socket-proxy/tasks/main.yml b/ansible/roles/socket-proxy/tasks/main.yml deleted file mode 100644 index bd516127..00000000 --- a/ansible/roles/socket-proxy/tasks/main.yml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- name: get ports from socket-server - delegate_to: "{{ groups['socket-server'][0] }}" - tags: [ config, deploy ] - become: true - shell: "for c in $(docker ps | awk '/api-socket-server/{ print $1 }'); do docker port $c 80 | cut -d ':' -f 2; done" - args: - executable: /bin/bash - register: ports - -- name: register socket server IP as variable - tags: [ config, deploy ] - set_fact: - socket_server_hostname: "{{ hostvars[groups['socket-server'][0]].ansible_default_ipv4.address }}" - -- name: make nginx config directory - tags: [ config, deploy ] - become: yes - file: - state: directory - dest: /etc/nginx - -- name: list files in config directory - tags: [ config, deploy ] - become: yes - command: ls /etc/nginx/sites-available - register: sites_available - -- name: remove all sites - tags: [ config, deploy ] - become: yes - command: rm -f {{ item }} - with_items: "{{ sites_available.stdout_lines }}" - -- name: put configuration in place - tags: [ config, deploy ] - become: yes - template: - src: "{{ item }}" - dest: /etc/nginx/sites-available/{{ item }} - with_items: - - 00-nginx-status.conf - - 01-socket-server.conf - -- name: put nginx configuration in place - tags: [ config, deploy ] - become: yes - copy: - src: nginx.conf - dest: /etc/nginx/nginx.conf diff --git a/ansible/socket-server.yml b/ansible/socket-server.yml index 9a5d43c5..586ec589 100644 --- a/ansible/socket-server.yml +++ b/ansible/socket-server.yml @@ -7,6 +7,7 @@ - hosts: redis - hosts: swarm-manager - hosts: consul +- hosts: socket-server-proxy - hosts: socket-server vars_files: @@ -22,10 +23,7 @@ - { role: tls-client, tls_service: mongodb, tags: [ tls ] } - { role: datadog, tags: [ datadog ] } - { role: container_start, number_of_containers: 8 } - -- hosts: socket-server-proxy - vars_files: - - group_vars/alpha-proxy-socket-server.yml - roles: - - role: socket-proxy - - role: container_restart + - role: nginx-proxied-service + nginx_host: "{{ groups['socket-server-proxy'][0] }}" + target_ip_address: "{{ hostvars[groups['socket-server'][0]]['ansible_default_ipv4']['address'] }}" + templates: [ 01-socket-server.conf ]