From 876a5d58f8ed6749417ed36daa81f1dab8e5b688 Mon Sep 17 00:00:00 2001
From: Temur Maisuradze <temur@grena.ge>
Date: Fri, 25 Sep 2020 14:41:24 +0400
Subject: [PATCH] replace nginx with haproxy

---
 group_vars/all/main.yml                       |  39 +++---
 roles/build/files/haproxy.cfg                 |   8 ++
 roles/build/tasks/haproxy.yml                 |  10 ++
 roles/build/tasks/main.yml                    |   2 +-
 roles/build/tasks/nginx.yml                   |  10 --
 roles/build/templates/haproxy/Dockerfile.j2   |   6 +
 roles/build/templates/nginx/Dockerfile.j2     |  16 ---
 roles/docker/tasks/{nginx.yml => haproxy.yml} |  13 +-
 roles/docker/tasks/main.yml                   |   2 +-
 roles/haproxy/tasks/main.yml                  |  20 +--
 roles/haproxy/templates/haproxy.cfg.j2        | 115 ++++++++++++++++++
 roles/nginx/defaults/main.yml                 |   0
 roles/nginx/files/.empty                      |   0
 roles/nginx/handlers/main.yml                 |   0
 roles/nginx/meta/main.yml                     |   0
 roles/nginx/tasks/main.yml                    |  15 ---
 roles/nginx/templates/nginx.conf.j2           |  68 -----------
 roles/nginx/vars/main.yml                     |   0
 soctools-inventory                            |   5 +-
 startsoctools.yml                             |   6 +-
 20 files changed, 185 insertions(+), 150 deletions(-)
 create mode 100644 roles/build/files/haproxy.cfg
 create mode 100644 roles/build/tasks/haproxy.yml
 delete mode 100644 roles/build/tasks/nginx.yml
 create mode 100644 roles/build/templates/haproxy/Dockerfile.j2
 delete mode 100644 roles/build/templates/nginx/Dockerfile.j2
 rename roles/docker/tasks/{nginx.yml => haproxy.yml} (58%)
 create mode 100644 roles/haproxy/templates/haproxy.cfg.j2
 delete mode 100644 roles/nginx/defaults/main.yml
 delete mode 100644 roles/nginx/files/.empty
 delete mode 100644 roles/nginx/handlers/main.yml
 delete mode 100644 roles/nginx/meta/main.yml
 delete mode 100644 roles/nginx/tasks/main.yml
 delete mode 100644 roles/nginx/templates/nginx.conf.j2
 delete mode 100644 roles/nginx/vars/main.yml

diff --git a/group_vars/all/main.yml b/group_vars/all/main.yml
index ec6afaa..14a5b81 100644
--- a/group_vars/all/main.yml
+++ b/group_vars/all/main.yml
@@ -2,22 +2,6 @@
 
 dslproxy: "<CHANGE_ME:hostname>"
 
-soctools_users:
-  - firstname: "Arne"
-    lastname: "Oslebo"
-    username: "arne.oslebo"
-    email: "arne.oslebo@uninett.no"
-    DN: "CN=Arne Oslebo"
-    CN: "Arne Oslebo"
-    password: "Pass002"
-  - firstname: "Bozidar"
-    lastname: "Proevski"
-    username: "bozidar.proevski"
-    email: "bozidar.proevski@finki.ukim.mk"
-    DN: "CN=Bozidar Proevski"
-    CN: "Bozidar Proevski"
-    password: "Pass001"
-
 # TheHive Button plugin
 THEHIVE_URL: "https://hive.gn4-3-wp8-soc.sunet.se/"
 THEHIVE_API_KEY: "5LymseWiurZBrQN8Kqp8O+9KniTL5cE0"
@@ -30,6 +14,11 @@ repo: gn43-dsl
 version: 7
 suffix: a20200612
 
+haproxy_name: "dsoclab-haproxy"
+haproxy_version: "2.2"
+haproxy_img: "{{repo}}/haproxy:{{version}}{{suffix}}"
+HAPROXY_PROCESSES: "2"
+
 temp_root: "/tmp/centosbuild"
 
 openjdk_img: "{{repo}}/openjdk:{{version}}{{suffix}}"
@@ -39,9 +28,6 @@ zookeeper_img: "{{repo}}/zookeeper:{{version}}{{suffix}}"
 
 nifi_img: "{{repo}}/nifi:{{version}}{{suffix}}"
 
-nginx_name: "dsoclab-nginx"
-nginx_img: "{{repo}}/nginx:{{version}}{{suffix}}"
-
 kspass: "Testing003"
 tspass: "Testing003"
 
@@ -58,6 +44,21 @@ nifi_repo: "https://archive.apache.org/dist"
 
 ca_cn: "SOCTOOLS-CA"
 
+soctools_users:
+  - firstname: "Arne"
+    lastname: "Oslebo"
+    username: "arne.oslebo"
+    email: "arne.oslebo@uninett.no"
+    DN: "CN=Arne Oslebo"
+    CN: "Arne Oslebo"
+    password: "Pass002"
+  - firstname: "Bozidar"
+    lastname: "Proevski"
+    username: "bozidar.proevski"
+    email: "bozidar.proevski@finki.ukim.mk"
+    DN: "CN=Bozidar Proevski"
+    CN: "Bozidar Proevski"
+    password: "Pass001"
 
 odfees_img: "{{repo}}/odfees:{{version}}{{suffix}}"
 odfekibana_img: "{{repo}}/odfekibana:{{version}}{{suffix}}"
diff --git a/roles/build/files/haproxy.cfg b/roles/build/files/haproxy.cfg
new file mode 100644
index 0000000..3f2dab4
--- /dev/null
+++ b/roles/build/files/haproxy.cfg
@@ -0,0 +1,8 @@
+global
+  quiet
+
+defaults
+  maxconn 5000
+  timeout connect 5s
+  timeout client  20s
+  timeout server  20s
diff --git a/roles/build/tasks/haproxy.yml b/roles/build/tasks/haproxy.yml
new file mode 100644
index 0000000..9cb45f8
--- /dev/null
+++ b/roles/build/tasks/haproxy.yml
@@ -0,0 +1,10 @@
+---
+
+- name: Configure the haproxy Dockerfile
+  template:
+    src: haproxy/Dockerfile.j2
+    dest: "{{role_path}}/files/haproxyDockerfile"
+
+- name: Build haproxy image
+  command: docker build -t {{repo}}/haproxy:{{version}}{{suffix}} -f {{role_path}}/files/haproxyDockerfile {{role_path}}/files
+
diff --git a/roles/build/tasks/main.yml b/roles/build/tasks/main.yml
index 23ea830..535dc19 100644
--- a/roles/build/tasks/main.yml
+++ b/roles/build/tasks/main.yml
@@ -6,7 +6,7 @@
     fail_msg: "Review *all* settings in group_vars/all/main.yml"
 
 - include: centos.yml
-- include: nginx.yml
+- include: haproxy.yml
 - include: openjdk.yml
 - include: zookeeper.yml
 - include: nifi.yml
diff --git a/roles/build/tasks/nginx.yml b/roles/build/tasks/nginx.yml
deleted file mode 100644
index bf91a86..0000000
--- a/roles/build/tasks/nginx.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-
-- name: Configure the nginx Dockerfile
-  template:
-    src: nginx/Dockerfile.j2
-    dest: "{{role_path}}/files/nginxDockerfile"
-
-- name: Build nginx image
-  command: docker build -t {{repo}}/nginx:{{version}}{{suffix}} -f {{role_path}}/files/nginxDockerfile {{role_path}}/files
-
diff --git a/roles/build/templates/haproxy/Dockerfile.j2 b/roles/build/templates/haproxy/Dockerfile.j2
new file mode 100644
index 0000000..f917f31
--- /dev/null
+++ b/roles/build/templates/haproxy/Dockerfile.j2
@@ -0,0 +1,6 @@
+FROM haproxy:{{haproxy_version}}
+
+RUN apt-get update && apt-get install -y python
+COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
+
+CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
diff --git a/roles/build/templates/nginx/Dockerfile.j2 b/roles/build/templates/nginx/Dockerfile.j2
deleted file mode 100644
index d8932f7..0000000
--- a/roles/build/templates/nginx/Dockerfile.j2
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM {{repo}}/centos:{{version}}{{suffix}}
-
-RUN yum update -y; \
-    yum install -y wget unzip curl nginx nginx-all-modules
-
-RUN yum clean all
-
-RUN ln -sf /dev/stdout /var/log/nginx/access.log \
-        && ln -sf /dev/stderr /var/log/nginx/error.log
-
-EXPOSE 80 443
-
-STOPSIGNAL SIGTERM
-
-CMD ["nginx", "-g", "daemon off;"]
-
diff --git a/roles/docker/tasks/nginx.yml b/roles/docker/tasks/haproxy.yml
similarity index 58%
rename from roles/docker/tasks/nginx.yml
rename to roles/docker/tasks/haproxy.yml
index 683c636..0cc981e 100644
--- a/roles/docker/tasks/nginx.yml
+++ b/roles/docker/tasks/haproxy.yml
@@ -1,15 +1,16 @@
 ---
 
-- name: Create nginx proxy
+- name: Create haproxy container
   docker_container:
-    name: "{{ nginx_name }}"
-    hostname: "{{ nginx_name }}"
-    image: "{{ nginx_img }}"
+    name: "{{ haproxy_name }}"
+    hostname: "{{ haproxy_name }}"
+    image: "{{ haproxy_img }}"
     networks:
       - name: "{{ soctools_netname}}"
     networks_cli_compatible: yes
     published_ports:
       - "443:443"
+      - "8888:8888"
       - "8443:8443"
       - "9443:9443"
       - "9200:9200"
@@ -17,9 +18,9 @@
   tags:
     - start
 
-- name: Destroy nginx proxy
+- name: Destroy haproxy container
   docker_container:
-    name: "{{ nginx_name }}"
+    name: "{{ haproxy_name }}"
     state: absent
   tags:
     - stop
diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml
index 7c22b2c..109bda6 100644
--- a/roles/docker/tasks/main.yml
+++ b/roles/docker/tasks/main.yml
@@ -8,6 +8,6 @@
 - include: odfees.yml
 - include: odfekibana.yml
 - include: keycloak.yml
-- include: nginx.yml
+- include: haproxy.yml
 - include: networkremove.yml
 
diff --git a/roles/haproxy/tasks/main.yml b/roles/haproxy/tasks/main.yml
index dae41ed..32eb6e3 100644
--- a/roles/haproxy/tasks/main.yml
+++ b/roles/haproxy/tasks/main.yml
@@ -1,12 +1,16 @@
 ---
 # tasks file for haproxy
 
-- name: Create directory
-  file:
-    name: /usr/local/etc/haproxy
-    state: directory
+- name: Copy haproxy configuration file
+  template:
+    src: haproxy.cfg.j2
+    dest: /usr/local/etc/haproxy/haproxy.cfg
+  tags:
+    - start
+    - reconf
 
-- name: Copy file
-  copy:
-    src: haproxy.cfg
-    dest: /usr/local/etc/haproxy/haproxy.cfg
\ No newline at end of file
+- name: Reload haproxy service
+  shell: kill -USR2 1
+  tags:
+    - start
+    - reconf
diff --git a/roles/haproxy/templates/haproxy.cfg.j2 b/roles/haproxy/templates/haproxy.cfg.j2
new file mode 100644
index 0000000..6153991
--- /dev/null
+++ b/roles/haproxy/templates/haproxy.cfg.j2
@@ -0,0 +1,115 @@
+global
+  #quiet
+  log stdout format raw local0
+  nbproc {{ HAPROXY_PROCESSES }}
+
+defaults
+  mode http
+  maxconn 5000
+  log global
+  timeout connect 5s
+  timeout client  20s
+  timeout server  20s
+
+listen stats
+        bind 0.0.0.0:8888
+        stats enable
+        stats hide-version
+        stats uri     /
+        stats realm   HAProxy Statistics
+        stats auth    haproxy:eiph2Eepaizicheelah3tei+bae3ohgh
+
+listen nifiserv
+	bind *:9443
+	mode http
+	maxconn 5000
+	fullconn 5000
+	balance source
+	option tcpka
+{% for nifihost in groups['nificontainers'] %}
+	server {{nifihost}} {{nifihost}}:9443 check
+{% endfor %}
+
+listen odfeserv
+        bind *:9200
+        mode http
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+{% for odfehost in groups['odfeescontainers'] %}
+     	server {{odfehost}} {{odfehost}}:9200 check
+{% endfor %}
+	
+listen keycloakserv
+        bind *:10443
+        mode http
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+{% for keycloakhost in groups['keycloakcontainers'] %}
+	server {{keycloakhost}} {{keycloakhost}}:8443 ssl check verify none
+{% endfor %}
+
+{% for port in range(50, 60) %}
+listen nifiservtcp77{{port}}
+	bind *:77{{port}}
+	mode tcp
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+	option tcp-check
+	tcp-check connect port 77{{port}}
+{% for nifihost in groups['nificontainers'] %}
+   	server {{nifihost}} {{nifihost}}:77{{port}} check
+
+{% endfor %}
+{% endfor %}
+
+
+listen nifiservtcp7771
+	bind *:7771
+	mode tcp
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+	option tcp-check
+	tcp-check connect port 7771
+{% for nifihost in groups['nificontainers'] %}
+   	server {{nifihost}} {{nifihost}}:7771 check
+{% endfor %}
+
+
+{% for port in range(5000, 5020) %}
+listen nifiservhttp{{port}}
+        bind *:{{port}}
+        mode http
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+{% for nifihost in groups['nificontainers'] %}
+        server {{nifihost}} {{nifihost}}:77{{port}} check
+
+{% endfor %}
+{% endfor %}
+
+
+{% for port in range(6000, 6020) %}
+listen nifiservtcp{{port}}
+        bind *:{{port}}
+        mode tcp 
+        maxconn 5000
+        fullconn 5000
+        balance source
+        option tcpka
+        option tcp-check
+        tcp-check connect port {{port}}
+{% for nifihost in groups['nificontainers'] %}
+        server {{nifihost}} {{nifihost}}:77{{port}} check
+
+{% endfor %}
+{% endfor %}
diff --git a/roles/nginx/defaults/main.yml b/roles/nginx/defaults/main.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/roles/nginx/files/.empty b/roles/nginx/files/.empty
deleted file mode 100644
index e69de29..0000000
diff --git a/roles/nginx/handlers/main.yml b/roles/nginx/handlers/main.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/roles/nginx/meta/main.yml b/roles/nginx/meta/main.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml
deleted file mode 100644
index 1d15863..0000000
--- a/roles/nginx/tasks/main.yml
+++ /dev/null
@@ -1,15 +0,0 @@
----
-
-- name: Configure nginx for proxying
-  template:
-    src: nginx.conf.j2
-    dest: /etc/nginx/nginx.conf
-  tags:
-    - start
-    - reconf
-
-- name: Restart nginx service
-  command: nginx -s reload
-  tags:
-    - start
-    - reconf
diff --git a/roles/nginx/templates/nginx.conf.j2 b/roles/nginx/templates/nginx.conf.j2
deleted file mode 100644
index dd78882..0000000
--- a/roles/nginx/templates/nginx.conf.j2
+++ /dev/null
@@ -1,68 +0,0 @@
-user  nginx;
-include /usr/share/nginx/modules/*.conf;
-worker_processes  1;
-
-error_log  /var/log/nginx/error.log info;
-pid        /run/nginx.pid;
-events {
-    worker_connections  1024;
-}
-
-stream {
-  resolver 127.0.0.11;
-
-  upstream nifiserv {
-  hash $remote_addr consistent;
-  {% for nifihost in groups['nificontainers'] %}
-     server {{nifihost}}:9443;
-  {% endfor %}
-  }
-  server {
-    listen 9443;
-    proxy_pass nifiserv;
-  }
-
-  upstream odfeserv {
-  hash $remote_addr consistent;
-  {% for odfehost in groups['odfeescontainers'] %}
-     server {{odfehost}}:9200;
-  {% endfor %}
-  }
-  server {
-    listen 9200;
-    proxy_pass odfeserv;
-  }
-
-  upstream keycloakserv {
-  {% for keycloakhost in groups['keycloakcontainers'] %}
-     server {{keycloakhost}}:8443;
-  {% endfor %}
-  }
-  server {
-    listen 10443;
-    proxy_pass keycloakserv;
-  }
-
-  {% for port in range(50, 60) %}
-  upstream nifiservtcp77{{port}} {
-  {% for nifihost in groups['nificontainers'] %}
-     server {{nifihost}}:77{{port}};
-  {% endfor %}
-  }
-  server {
-    listen 77{{port}};
-    proxy_pass nifiservtcp77{{port}};
-  }
-  {% endfor %}
-
-  upstream nifiservtcp7771 {
-  {% for nifihost in groups['nificontainers'] %}
-     server {{nifihost}}:7771;
-  {% endfor %}
-  }
-  server {
-    listen 7771;
-    proxy_pass nifiservtcp7771;
-  }
-}
-
diff --git a/roles/nginx/vars/main.yml b/roles/nginx/vars/main.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/soctools-inventory b/soctools-inventory
index ee70732..254a62b 100644
--- a/soctools-inventory
+++ b/soctools-inventory
@@ -16,6 +16,5 @@ dsoclab-kibana ansible_connection=docker
 [keycloakcontainers]
 dsoclab-keycloak ansible_connection=docker
 
-[nginx]
-dsoclab-nginx ansible_connection=docker
-
+[haproxy]
+dsoclab-haproxy ansible_connection=docker
diff --git a/startsoctools.yml b/startsoctools.yml
index 3ddc7dc..a5f63b2 100644
--- a/startsoctools.yml
+++ b/startsoctools.yml
@@ -5,10 +5,10 @@
   roles:
     - docker
 
-- name: Reconfigure and start nginx
-  hosts: nginx
+- name: Reconfigure and start haproxy
+  hosts: haproxy
   roles:
-    - nginx
+    - haproxy
 
 - name: Reconfigure and start Keycloak
   hosts: keycloakcontainers
-- 
GitLab