Repository: apache/airavata-custos (language: python)

Issue:
Writing ansible scripts to deploy Custos
As part of the Custos baremetal deployment effort - we need to write ansible scripts to configure and automate deployments.
Writing ansible scripts to deploy Custos
As part of the Custos baremetal deployment effort - we need to write ansible scripts to configure and automate deployments.
Writing ansible scripts to deploy Custos
As part of the Custos baremetal deployment effort - we need to write ansible scripts to configure and automate deployments.
Writing ansible scripts to deploy Custos
As part of the Custos baremetal deployment effort - we need to write ansible scripts to configure and automate deployments.


Discussion / hints:

Fix patch:
diff --git a/ansible/README.md b/ansible/README.md
index 820361b92..6c4b9e229 100644
--- a/ansible/README.md
+++ b/ansible/README.md
@@ -5,6 +5,7 @@ Ansible scripts to configure and install Apache Custos pre-requisites and deploy
 2. [Initial VM set up](#set-up-vms)
 3. [Generate SSL certificates](#generate-ssl-certificates)
 4. [Deploy application](#deploy-application)
+5. [Deploy application with data migration](#data-migration)
 
 ## Prerequisites<a name="prerequisites"/>
 Make sure you have installed all of the following prerequisites on your development machine:
@@ -73,7 +74,7 @@ Here's the command:
 ansible-vault decrypt inventories/test/group_vars/all/vault.yml
 ```
 
-In the file `test/group_vars/all/vault.yml`. Look for `keycloak_ssh_password`, `hashicorp_ssh_password` and `custos_ssh_password` variables. Set these variables with their respective password strings. For ex:
+In the file `test/group_vars/all/vault.yml`, look for `keycloak_ssh_password`, `hashicorp_ssh_password` and `custos_ssh_password` variables. Set these variables with their respective password strings. For ex:
 ```yml
 ⋮
 keycloak_ssh_password: XXX..XXX
@@ -136,7 +137,7 @@ keycloak_pkcs12_passphrase: YYY...YYY
 ## Deploy application<a name="deploy-application"/>
 You're just one step away from deploying Custos. The following command runs the ansible playbook `custos.yml` which has roles to install all dependencies and deploy Custos on the given VM.
 ```bash
-ansible-playbook -i inventories/test/ custos.yml --ask-vault-pass
+ansible-playbook -i inventories/test/ custos.yml
 ```
 Check if custos core and integration services are up and running using the following commands:
 ```bash
@@ -146,15 +147,42 @@ systemctl status intcustos
 systemctl status corecustos
 ```
 
+## Deploy application with data migration<a name="data-migration"/>
+When deploying Custos, you may want to import data from your old servers to the new ones. We can make use of ansible to automate this data migration.
+
+You need to configure ansible vars with the domain names of the old VMS.
+
+Open the file `test/hosts.yml`. Set ansible_host and ansible_user for `old_custos`, `old_keycloak` and `old_hashicorp` with their respective domain names and ssh users. For ex:
+```yml
+    ⋮
+    old_custos:
+      ansible_host: oldcustos.org
+      ansible_user: test_user
+    old_keycloak:
+      ansible_host: oldkeycloak.org
+      ansible_user: test_user
+    old_hashicorp:
+      ansible_host: oldvault.org
+      ansible_user: test_user
+    ⋮
+```
+Make sure that passwordless ssh authentication is set up from your master node to the old servers.
+
+Now Generate backups in your old servers. By default, ansible will load the backups from the locations specified in the file: `ansible/roles/migrate_db/tasks/main.yml`
+
+To deploy Custos with data migration, run the following command:
+```bash
+ansible-playbook -i inventories/test/ custos.yml --tags migrate_db,all
+```
 ## Useful commands
 - Deploy Custos with verbose option for debug messages:
 ```bash
-ansible-playbook -i inventories/{inventory}/ custos.yml --ask-vault-pass -vvv
+ansible-playbook -i inventories/{inventory}/ custos.yml -vvv
 ```
 Adding multiple -v will increase the verbosity, the builtin plugins currently evaluate up to -vvvvvv. A reasonable level to start is -vvv, connection debugging might require -vvvv.
 - Decrypt ansible-vault strings
 ```bash
-ansible all -i inventories/test/ -e '@inventories/test/group_vars/all/vars.yml' --ask-vault-pass -m debug -a 'var=secret_string'
+ansible all -i inventories/test/ -e '@inventories/test/group_vars/all/vars.yml' -m debug -a 'var=secret_string'
 ```
 - Encrypt a string using `ansible-vault`
 ```bash
diff --git a/ansible/custos.yml b/ansible/custos.yml
index f5c86e2a3..913aec3fb 100644
--- a/ansible/custos.yml
+++ b/ansible/custos.yml
@@ -21,24 +21,33 @@
 ---
 - hosts: old_custos
   roles:
-    - migrate_db
+    - role: migrate_db # execute migrate_db role only when migrate_db tag is specified
+      tags: [migrate_db, never]
 - hosts: old_keycloak
   roles:
-    - migrate_db
+    - role: migrate_db
+      tags: [migrate_db, never]
 - hosts: old_hashicorp
   roles:
-    - migrate_db
+    - role: migrate_db
+      tags: [migrate_db, never]
 - hosts: hashicorp
   roles:
+    - role: env_setup # execute env_setup role only when env_setup tag is specified
+      tags: [env_setup, never]
     - nginx
     - consul
     - vault
 - hosts: keycloak
   roles:
+    - role: env_setup
+      tags: [env_setup, never]
     - nginx
     - keycloak
 - hosts: custos
   roles:
+    - role: env_setup
+      tags: [env_setup, never]
     - nginx
     - database
     - zookeeper
diff --git a/ansible/roles/custos/files/start_envoy_proxy.sh b/ansible/roles/custos/files/start_envoy_proxy.sh
new file mode 100644
index 000000000..6cb6240b3
--- /dev/null
+++ b/ansible/roles/custos/files/start_envoy_proxy.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+if ! docker ps --format "apachecustos/custos-rest-proxy:latest" | grep -w apachecustos/custos-rest-proxy &> /dev/null; then
+  docker run -it -d --restart always  -v $(pwd)/logs:/var/log/envoy -e ENVOY_UID=777  -p 10000:50000    apachecustos/custos-rest-proxy:latest   -c /etc/envoy/envoy.yaml
+fi
\ No newline at end of file
diff --git a/ansible/roles/custos/tasks/main.yml b/ansible/roles/custos/tasks/main.yml
index 32800ad14..12c095ff9 100644
--- a/ansible/roles/custos/tasks/main.yml
+++ b/ansible/roles/custos/tasks/main.yml
@@ -26,8 +26,6 @@
   become: yes
   when: ansible_os_family == "Debian"
 
-
-
 - name: Create Custos deployment directory {{ custos_deployment_dir }}
   become: yes
   file: path={{ custos_deployment_dir }}
@@ -111,14 +109,9 @@
   become: yes
   become_user: "{{ user }}"
 
-- name: Start Custos Core service
-  service:
-    name: corecustos
-    state: restarted
-  become: yes
+- include: start_custos.yml
 
-- name: Start Custos Integration service
-  service:
-    name: intcustos
-    state: restarted
+- name: Start envoy proxy
+  script: "start_envoy_proxy.sh"
   become: yes
+  become_user: "{{ user }}"
\ No newline at end of file
diff --git a/ansible/inventories/test/group_vars/database/vars.yml b/ansible/roles/custos/tasks/start_custos.yml
similarity index 53%
rename from ansible/inventories/test/group_vars/database/vars.yml
rename to ansible/roles/custos/tasks/start_custos.yml
index 029465ecb..74b9f9f27 100644
--- a/ansible/inventories/test/group_vars/database/vars.yml
+++ b/ansible/roles/custos/tasks/start_custos.yml
@@ -19,11 +19,31 @@
 #
 
 ---
-#firewall_allowed_tcp_ports:
-#  - "22"
-#  - "3306"
-#mysql_replication_user: {name: 'replication',password: 'secret'}
-#mysql_databases:
-#  - name: mycompany_database
-#    collation: utf8_general_ci
-#    encoding: utf-8
\ No newline at end of file
+- name: Copy Custos systemd files
+  template: "src={{ item.name }}
+            dest=/etc/systemd/system/{{ item.target }}
+            owner={{ user }}
+            group={{ group }}
+            mode=\"u=rw,g=r,o=r\""
+  with_items:
+    - { name: corecustos.service.j2,
+        target: corecustos.service}
+    - { name: intcustos.service.j2,
+        target: intcustos.service}
+  become: yes
+
+- name: reload systemctl daemon
+  command: systemctl daemon-reload
+  become: yes
+
+- name: Start Custos Core service
+  service:
+    name: corecustos
+    state: restarted
+  become: yes
+
+- name: Start Custos Integration service
+  service:
+    name: intcustos
+    state: restarted
+  become: yes
\ No newline at end of file
diff --git a/ansible/roles/custos/templates/corecustos.service.j2 b/ansible/roles/custos/templates/corecustos.service.j2
new file mode 100644
index 000000000..6874f42c6
--- /dev/null
+++ b/ansible/roles/custos/templates/corecustos.service.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=Custos Core Service
+
+[Service]
+User={{ user }}
+Group={{ group }}
+ExecStart={{ custos_deployment_dir }}/Custos-Core-Services-Server-1.1-SNAPSHOT/bin/custos.sh
+Restart=always
+TimeoutSec=60
+Type=Forking
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/ansible/roles/custos/templates/intcustos.service.j2 b/ansible/roles/custos/templates/intcustos.service.j2
new file mode 100644
index 000000000..a7f257604
--- /dev/null
+++ b/ansible/roles/custos/templates/intcustos.service.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=Custos Integration Service
+
+[Service]
+User={{ user }}
+Group={{ group }}
+ExecStart={{ custos_deployment_dir }}/Custos-Integration-Services-Server-1.1-SNAPSHOT/bin/custos.sh
+Restart=always
+TimeoutSec=60
+Type=Forking
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/ansible/roles/database/tasks/import_db.yml b/ansible/roles/database/tasks/import_db.yml
index a576367ba..eab56767e 100644
--- a/ansible/roles/database/tasks/import_db.yml
+++ b/ansible/roles/database/tasks/import_db.yml
@@ -19,14 +19,6 @@
 #
 
 ---
-
-- name: Create a new database with name "{{ db_name }}"
-  community.mysql.mysql_db:
-    name: "{{ db_name }}"
-    state: present
-    encoding: "UTF8mb3"
-    collation: "utf8_general_ci"
-
 - name: Copy dump file from master node to new server
   copy:
     src: tmp/core_services_server_db_arch.sql
diff --git a/ansible/roles/database/tasks/main.yml b/ansible/roles/database/tasks/main.yml
index 62915f80c..81093c413 100644
--- a/ansible/roles/database/tasks/main.yml
+++ b/ansible/roles/database/tasks/main.yml
@@ -32,6 +32,16 @@
     state: started
     enabled: yes
 
-- include: secure_install.yml
+- name: Set up MySQL
+  include_tasks: secure_install.yml
 
-- include: import_db.yml
\ No newline at end of file
+- name: Create a new database with name "{{ db_name }}"
+  community.mysql.mysql_db:
+    name: "{{ db_name }}"
+    state: present
+    encoding: "UTF8mb3"
+    collation: "utf8_general_ci"
+
+- name: Import old server's dump file
+  include_tasks: import_db.yml
+  tags: [never, migrate_db]
diff --git a/ansible/roles/database/vars/main.yml b/ansible/roles/database/vars/main.yml
deleted file mode 100644
index 7fdfe7603..000000000
--- a/ansible/roles/database/vars/main.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
----
-#mysql_packages:
-#  - MariaDB-server
-#  - MariaDB-client
-#
-#mysql_databases:
-#    - "{{ app_catalog }}"
-#    - "{{ exp_catalog }}"
-#    - "{{ replica_catalog }}"
-#    - "{{ workflow_catalog }}"
-#    - "{{ credential_store }}"
-#    - "{{ sharing_catalog }}"
-#    - "{{ profile_service }}"
-#
-#mysql_privs:
-#    - "{{ app_catalog }}.*:ALL"
-#    - "{{ exp_catalog }}.*:ALL"
-#    - "{{ replica_catalog }}.*:ALL"
-#    - "{{ workflow_catalog }}.*:ALL"
-#    - "{{ credential_store }}.*:ALL"
-#    - "{{ sharing_catalog }}.*:ALL"
-#    - "{{ profile_service }}.*:ALL"
-#
-#...
diff --git a/ansible/roles/database/defaults/main.yml b/ansible/roles/env_setup/handlers/main.yml
similarity index 91%
rename from ansible/roles/database/defaults/main.yml
rename to ansible/roles/env_setup/handlers/main.yml
index 5333f25ea..d99835134 100644
--- a/ansible/roles/database/defaults/main.yml
+++ b/ansible/roles/env_setup/handlers/main.yml
@@ -17,3 +17,9 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+
+---
+- name: restart nginx
+  service:
+    name: nginx
+    state: restarted
\ No newline at end of file
diff --git a/ansible/roles/env_setup/tasks/main.yml b/ansible/roles/env_setup/tasks/main.yml
index 004093c0a..20d457d01 100644
--- a/ansible/roles/env_setup/tasks/main.yml
+++ b/ansible/roles/env_setup/tasks/main.yml
@@ -19,76 +19,105 @@
 #
 
 ---
-#Tasks file can include smaller files if wanted
-#All commons tasks goes here
-- name: Create a new user group "{{ group }}"
-  group: name={{ group }}
+- name: apt-get update
+  apt:
+    update_cache: yes
+    cache_valid_time: 86400
   become: yes
 
-- name: Create a new user "{{ user }}"
-  user: name={{ user }} group={{ group }}
+- name: install nginx
+  apt:
+    name: nginx
+    state: latest
   become: yes
 
-- name: Install Firewalld (RedHat)
-  yum: name=firewalld state=latest update_cache=yes
+- name: allow OpenSSH
+  ufw:
+    rule: allow
+    name: "OpenSSH"
+    state: enabled
   become: yes
-  when: ansible_os_family == "RedHat"
 
-- name: Install Firewalld (Debian)
-  apt: name=firewalld state=latest update_cache=yes
+# It is recommended to enable the most restrictive profile
+#  that will still allow the traffic you’ve configured.
+#  Right now, we will only need to allow traffic on port 80.
+- name: allow traffic on port 80
+  ufw:
+    rule: allow
+    name: "Nginx HTTP"
+    state: enabled # enable the ufw rule
   become: yes
-  when: ansible_os_family == "Debian"
 
+- name: create www directory at "/var/www/{{ ansible_host }}"
+  file:
+    path: /var/www/{{ ansible_host }}
+    state: directory
+    mode: '0775'
+    owner: "{{ user }}"
+    group: "{{ group }}"
+  become: yes
 
-  # TODO: stop iptables service, can't have both iptables and firewalld on same host
-# firewalld is just a frontend for iptables - so we can't remove it
-  # if we try to stop non existing service ansible fails.
-# - name: Stop iptables, ip6tables services
-#   service: name="{{ item }}" state=stopped
-#   with_items:
-#     - iptables
-#     - ip6tables
+- name: copy sample index.html from {{ inventory_hostname }} to /var/www/{{ ansible_host }}/html
+  template: >
+    src={{ inventory_hostname }}/index.html.j2
+    dest="/var/www/{{ ansible_host }}/index.html"
+    owner="{{ user }}"
+    group="{{ group }}"
+    mode="u=rw,g=r,o=r"
 
-- name: Install Git (RedHat)
-  yum:
-    name:
-    - git
-    state: latest
-    update_cache: yes
+- name: delete default nginx config
+  file:
+    path: /etc/nginx/sites-enabled/default
+    state: absent
   become: yes
-  when: ansible_os_family == "RedHat"
 
-- name: Install Git (Debian)
-  apt:
-    name:
-      - git
-    state: latest
-    update_cache: yes
+- name: copy default nginx site.conf
+  template:
+    src: "{{ inventory_hostname }}/default_site.conf.j2"
+    dest: /etc/nginx/sites-available/{{ ansible_host }}
+    owner: root
+    group: root
+    mode: '0644'
   become: yes
-  when: ansible_os_family == "Debian"
 
-- name: Ansible flush zone=public
-  ansible.builtin.file:
-    path:
-      - /etc/firewalld/zones/public.xml
-      - /etc/firewalld/zones/public.xml.old
-    state: absent
+- name: link sample html to sites-enabled directory
+  file:
+    src: /etc/nginx/sites-available/{{ ansible_host }}
+    dest: /etc/nginx/sites-enabled/{{ ansible_host }}
+    state: link
+  become: yes
 
-#- name: Ansible flush zone=public public.xml
-#  shell: rm -rf /etc/firewalld/zones/public.xml
-#  become: yes
-#
-#- name: Ansible flush zone=public public.xml.old
-#  shell: rm -rf /etc/firewalld/zones/public.xml.old
-#  become: yes
+- name: allow HTTPS traffic
+  ufw:
+    rule: allow
+    name: "Nginx Full"
+    state: enabled # enable the ufw rule
+  become: yes
 
-- name: open firewall port 22 for SSH connections
-  firewalld: port="22/tcp"
-    zone=public permanent=true state=enabled immediate=yes
+- name: delete redundant Nginx HTTP
+  ufw:
+    rule: allow
+    name: "Nginx HTTP"
+    delete: yes
+    state: enabled # enable the ufw rule
   become: yes
 
-- name: Start firewalld service
-  service: name=firewalld state=started
+- name: Restart nginx
+  service:
+    name: nginx
+    state: restarted
   become: yes
 
-...
+- name: install certbot
+  apt:
+    name:
+      - certbot
+      - python3-certbot-nginx
+    state: latest
+  become: yes
+
+- name: Create certs directory
+  ansible.builtin.file:
+    path: "{{ user_home }}/certs"
+    state: directory
+    mode: '0755'
\ No newline at end of file
diff --git a/ansible/roles/nginx/templates/custos/envsetup_site.conf.j2 b/ansible/roles/env_setup/templates/custos/default_site.conf.j2
similarity index 100%
rename from ansible/roles/nginx/templates/custos/envsetup_site.conf.j2
rename to ansible/roles/env_setup/templates/custos/default_site.conf.j2
diff --git a/ansible/roles/env_setup/templates/custos/index.html.j2 b/ansible/roles/env_setup/templates/custos/index.html.j2
new file mode 100644
index 000000000..da5a6b58a
--- /dev/null
+++ b/ansible/roles/env_setup/templates/custos/index.html.j2
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Welcome to your_domain!</title>
+    </head>
+    <body>
+        <h1>Success!  The your_domain server block is working!</h1>
+    </body>
+</html>
\ No newline at end of file
diff --git a/ansible/roles/env_setup/templates/custos/nginx.conf.j2 b/ansible/roles/env_setup/templates/custos/nginx.conf.j2
new file mode 100644
index 000000000..706278c7c
--- /dev/null
+++ b/ansible/roles/env_setup/templates/custos/nginx.conf.j2
@@ -0,0 +1,85 @@
+user www-data;
+worker_processes auto;
+pid /run/nginx.pid;
+include /etc/nginx/modules-enabled/*.conf;
+
+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;
+
+	##
+	# SSL Settings
+	##
+
+	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
+	ssl_prefer_server_ciphers on;
+
+	##
+	# Logging Settings
+	##
+
+	access_log /var/log/nginx/access.log;
+	error_log /var/log/nginx/error.log;
+
+	##
+	# Gzip Settings
+	##
+
+	gzip on;
+
+	# 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/javascript text/xml application/xml application/xml+rss text/javascript;
+
+	##
+	# Virtual Host Configs
+	##
+
+	include /etc/nginx/conf.d/*.conf;
+	include /etc/nginx/sites-enabled/*;
+}
+
+
+#mail {
+#	# See sample authentication script at:
+#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
+#
+#	# auth_http localhost/auth.php;
+#	# pop3_capabilities "TOP" "USER";
+#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
+#
+#	server {
+#		listen     localhost:110;
+#		protocol   pop3;
+#		proxy      on;
+#	}
+#
+#	server {
+#		listen     localhost:143;
+#		protocol   imap;
+#		proxy      on;
+#	}
+#}
diff --git a/ansible/roles/nginx/templates/hashicorp/envsetup_site.conf.j2 b/ansible/roles/env_setup/templates/hashicorp/default_site.conf.j2
similarity index 100%
rename from ansible/roles/nginx/templates/hashicorp/envsetup_site.conf.j2
rename to ansible/roles/env_setup/templates/hashicorp/default_site.conf.j2
diff --git a/ansible/roles/env_setup/templates/hashicorp/index.html.j2 b/ansible/roles/env_setup/templates/hashicorp/index.html.j2
new file mode 100644
index 000000000..a557e65cd
--- /dev/null
+++ b/ansible/roles/env_setup/templates/hashicorp/index.html.j2
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Welcome to {{ inventory_hostname }}!</title>
+    </head>
+    <body>
+        <h1>Success!  The {{ inventory_hostname }} server block is working!</h1>
+    </body>
+</html>
\ No newline at end of file
diff --git a/ansible/roles/env_setup/templates/hashicorp/nginx.conf.j2 b/ansible/roles/env_setup/templates/hashicorp/nginx.conf.j2
new file mode 100644
index 000000000..706278c7c
--- /dev/null
+++ b/ansible/roles/env_setup/templates/hashicorp/nginx.conf.j2
@@ -0,0 +1,85 @@
+user www-data;
+worker_processes auto;
+pid /run/nginx.pid;
+include /etc/nginx/modules-enabled/*.conf;
+
+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;
+
+	##
+	# SSL Settings
+	##
+
+	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
+	ssl_prefer_server_ciphers on;
+
+	##
+	# Logging Settings
+	##
+
+	access_log /var/log/nginx/access.log;
+	error_log /var/log/nginx/error.log;
+
+	##
+	# Gzip Settings
+	##
+
+	gzip on;
+
+	# 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/javascript text/xml application/xml application/xml+rss text/javascript;
+
+	##
+	# Virtual Host Configs
+	##
+
+	include /etc/nginx/conf.d/*.conf;
+	include /etc/nginx/sites-enabled/*;
+}
+
+
+#mail {
+#	# See sample authentication script at:
+#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
+#
+#	# auth_http localhost/auth.php;
+#	# pop3_capabilities "TOP" "USER";
+#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
+#
+#	server {
+#		listen     localhost:110;
+#		protocol   pop3;
+#		proxy      on;
+#	}
+#
+#	server {
+#		listen     localhost:143;
+#		protocol   imap;
+#		proxy      on;
+#	}
+#}
diff --git a/ansible/roles/nginx/templates/keycloak/envsetup_site.conf.j2 b/ansible/roles/env_setup/templates/keycloak/default_site.conf.j2
similarity index 100%
rename from ansible/roles/nginx/templates/keycloak/envsetup_site.conf.j2
rename to ansible/roles/env_setup/templates/keycloak/default_site.conf.j2
diff --git a/ansible/roles/env_setup/templates/keycloak/index.html.j2 b/ansible/roles/env_setup/templates/keycloak/index.html.j2
new file mode 100644
index 000000000..da5a6b58a
--- /dev/null
+++ b/ansible/roles/env_setup/templates/keycloak/index.html.j2
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Welcome to your_domain!</title>
+    </head>
+    <body>
+        <h1>Success!  The your_domain server block is working!</h1>
+    </body>
+</html>
\ No newline at end of file
diff --git a/ansible/roles/env_setup/templates/keycloak/nginx.conf.j2 b/ansible/roles/env_setup/templates/keycloak/nginx.conf.j2
new file mode 100644
index 000000000..706278c7c
--- /dev/null
+++ b/ansible/roles/env_setup/templates/keycloak/nginx.conf.j2
@@ -0,0 +1,85 @@
+user www-data;
+worker_processes auto;
+pid /run/nginx.pid;
+include /etc/nginx/modules-enabled/*.conf;
+
+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;
+
+	##
+	# SSL Settings
+	##
+
+	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
+	ssl_prefer_server_ciphers on;
+
+	##
+	# Logging Settings
+	##
+
+	access_log /var/log/nginx/access.log;
+	error_log /var/log/nginx/error.log;
+
+	##
+	# Gzip Settings
+	##
+
+	gzip on;
+
+	# 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/javascript text/xml application/xml application/xml+rss text/javascript;
+
+	##
+	# Virtual Host Configs
+	##
+
+	include /etc/nginx/conf.d/*.conf;
+	include /etc/nginx/sites-enabled/*;
+}
+
+
+#mail {
+#	# See sample authentication script at:
+#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
+#
+#	# auth_http localhost/auth.php;
+#	# pop3_capabilities "TOP" "USER";
+#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
+#
+#	server {
+#		listen     localhost:110;
+#		protocol   pop3;
+#		proxy      on;
+#	}
+#
+#	server {
+#		listen     localhost:143;
+#		protocol   imap;
+#		proxy      on;
+#	}
+#}
diff --git a/ansible/roles/keycloak/tasks/main.yml b/ansible/roles/keycloak/tasks/main.yml
index be7417dc3..8dcca0e4c 100644
--- a/ansible/roles/keycloak/tasks/main.yml
+++ b/ansible/roles/keycloak/tasks/main.yml
@@ -98,86 +98,12 @@
     dest: "{{ keycloak_deployment_dir }}/modules/system/layers/keycloak/org/postgresql/main/postgresql-42.3.6.jar"
     mode: '0644'
 
-# setup postgresql for keycloak
-- name: Install postgresql and postgresql-contrib
-  apt:
-    name:
-      - postgresql
-      - postgresql-contrib
-  become: yes
-
-- name: "Install Python packages"
-  apt:
-    name: "{{ item }}"
-    state: present
-  with_items:
-    - python3-psycopg2
-  become: yes
+- name: Setup postgresql for keycloak
+  include_tasks: setup_postgres.yml
 
-- name: Start the postgresql service
-  service:
-    name: postgresql
-    state: started
-    enabled: yes
-  become: yes
-
-- name: "Create database"
-  postgresql_db:
-    state: present
-    name: "{{ keycloak_db_schema_name }}"
-    login_password: "{{ keycloak_db_password }}"
-  become: yes
-  become_user: postgres
-
-- name: "Create db user"
-  postgresql_user:
-    state: present
-    name: "{{ keycloak_db_username }}"
-    password: "{{ keycloak_db_password }}"
-    login_password: "{{ keycloak_db_password }}"
-  become: yes
-  become_user: postgres
-
-- name: "Grant db user access to app db"
-  postgresql_privs:
-    type: database
-    database: "{{ keycloak_db_schema_name }}"
-    roles: "{{ keycloak_db_username }}"
-    grant_option: no
-    privs: all
-    login_password: "{{ keycloak_db_password }}"
-  become: yes
-  become_user: postgres
-
-- name: copy postgres hba conf
-  template:
-    src: pg_hba.conf.j2
-    dest: /etc/postgresql/12/main/pg_hba.conf
-    owner: root
-    group: root
-    mode: '0644'
-  become: yes
-
-- name: Restart the postgresql service
-  service:
-    name: postgresql
-    state: restarted
-  become: yes
-
-- name: Copy dump file from master node to new server
-  copy:
-    src: tmp/postgresDB_arch.sql
-    dest: /home/exouser/backups/
-
-# TODO: It appends dump -> but we need to replace it
-- name: Restore dump
-  postgresql_db:
-    state: restore
-    name: "{{ keycloak_db_schema_name }}"
-    target: /home/exouser/backups/postgresDB_arch.sql
-    login_password: "{{ keycloak_db_password }}"
-  become: yes
-  become_user: postgres
+- name: Restore old server's dump file
+  include_tasks: restore_db.yml
+  tags: [never, migrate_db]
 
 # <---------------------------- Server Configuration -------------------------------->
 
@@ -235,7 +161,7 @@
   tags:
        - always
 
-- name: start Keycloak server
+- name: Restart Keycloak server
   service:
     name: keycloak
     state: restarted
diff --git a/ansible/roles/database/handlers/main.yml b/ansible/roles/keycloak/tasks/restore_db.yml
similarity index 66%
rename from ansible/roles/database/handlers/main.yml
rename to ansible/roles/keycloak/tasks/restore_db.yml
index d48aa97da..bb5a55370 100644
--- a/ansible/roles/database/handlers/main.yml
+++ b/ansible/roles/keycloak/tasks/restore_db.yml
@@ -1,5 +1,4 @@
 #
-#
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -19,16 +18,17 @@
 #
 
 ---
-- name: start mariadb
-  service: name=mariadb state=started enabled=yes
-  become: yes
+- name: Copy dump file from master node to new server
+  copy:
+    src: tmp/postgresDB_arch.sql
+    dest: /home/exouser/backups/
 
-- name: stop mariadb
-  service: name=mariadb state=stopped
+# TODO: It appends dump -> but we need to replace it
+- name: Restore dump
+  postgresql_db:
+    state: restore
+    name: "{{ keycloak_db_schema_name }}"
+    target: /home/exouser/backups/postgresDB_arch.sql
+    login_password: "{{ keycloak_db_password }}"
   become: yes
-
-- name: restart mariadb
-  service: name=mariadb state=restarted enabled=yes
-  become: yes
-
-...
+  become_user: postgres
\ No newline at end of file
diff --git a/ansible/roles/keycloak/tasks/setup_postgres.yml b/ansible/roles/keycloak/tasks/setup_postgres.yml
new file mode 100644
index 000000000..94f4bcc0c
--- /dev/null
+++ b/ansible/roles/keycloak/tasks/setup_postgres.yml
@@ -0,0 +1,84 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+---
+- name: Install postgresql and postgresql-contrib
+  apt:
+    name:
+      - postgresql
+      - postgresql-contrib
+  become: yes
+
+- name: "Install Python packages"
+  apt:
+    name: "{{ item }}"
+    state: present
+  with_items:
+    - python3-psycopg2
+  become: yes
+
+- name: Start the postgresql service
+  service:
+    name: postgresql
+    state: started
+    enabled: yes
+  become: yes
+
+- name: "Create database"
+  postgresql_db:
+    state: present
+    name: "{{ keycloak_db_schema_name }}"
+    login_password: "{{ keycloak_db_password }}"
+  become: yes
+  become_user: postgres
+
+- name: "Create db user"
+  postgresql_user:
+    state: present
+    name: "{{ keycloak_db_username }}"
+    password: "{{ keycloak_db_password }}"
+    login_password: "{{ keycloak_db_password }}"
+  become: yes
+  become_user: postgres
+
+- name: "Grant db user access to app db"
+  postgresql_privs:
+    type: database
+    database: "{{ keycloak_db_schema_name }}"
+    roles: "{{ keycloak_db_username }}"
+    grant_option: no
+    privs: all
+    login_password: "{{ keycloak_db_password }}"
+  become: yes
+  become_user: postgres
+
+- name: copy postgres hba conf
+  template:
+    src: pg_hba.conf.j2
+    dest: /etc/postgresql/12/main/pg_hba.conf
+    owner: root
+    group: root
+    mode: '0644'
+  become: yes
+
+- name: Restart the postgresql service
+  service:
+    name: postgresql
+    state: restarted
+  become: yes
\ No newline at end of file
diff --git a/ansible/roles/nginx/tasks/main.yml b/ansible/roles/nginx/tasks/main.yml
index 914a49bcf..99cf1e4f8 100644
--- a/ansible/roles/nginx/tasks/main.yml
+++ b/ansible/roles/nginx/tasks/main.yml
@@ -24,14 +24,12 @@
     update_cache: yes
     cache_valid_time: 86400
   become: yes
-  tags: env_setup
 
 - name: install nginx
   apt:
     name: nginx
     state: latest
   become: yes
-  tags: env_setup
 
 - name: allow OpenSSH
   ufw:
@@ -39,7 +37,6 @@
     name: "OpenSSH"
     state: enabled
   become: yes
-  tags: env_setup
 
 # It is recommended to enable the most restrictive profile
 #  that will still allow the traffic you’ve configured.
@@ -50,7 +47,6 @@
     name: "Nginx HTTP"
     state: enabled # enable the ufw rule
   become: yes
-  tags: env_setup
 
 - name: create www directory at "/var/www/{{ ansible_host }}"
   file:
@@ -60,7 +56,6 @@
     owner: "{{ user }}"
     group: "{{ group }}"
   become: yes
-  tags: env_setup
 
 - name: copy sample index.html from {{ inventory_hostname }} to /var/www/{{ ansible_host }}/html
   template: >
@@ -69,24 +64,12 @@
     owner="{{ user }}"
     group="{{ group }}"
     mode="u=rw,g=r,o=r"
-  tags: env_setup
 
 - name: delete default nginx config
   file:
     path: /etc/nginx/sites-enabled/default
     state: absent
   become: yes
-  tags: env_setup
-
-- name: copy nginx site.conf
-  template:
-    src: "{{ inventory_hostname }}/envsetup_site.conf.j2"
-    dest: /etc/nginx/sites-available/{{ ansible_host }}
-    owner: root
-    group: root
-    mode: '0644'
-  become: yes
-  tags: env_setup
 
 - name: copy nginx site.conf
   template:
@@ -96,7 +79,6 @@
     group: root
     mode: '0644'
   become: yes
-#  tags: env_setup
 
 - name: link sample html to sites-enabled directory
   file:
@@ -104,7 +86,6 @@
     dest: /etc/nginx/sites-enabled/{{ ansible_host }}
     state: link
   become: yes
-  tags: env_setup
 
 - name: adjust server_names_hash_bucket_size
   template: >
@@ -114,7 +95,6 @@
     group="{{ group }}"
     mode="u=rw,g=r,o=r"
   become: yes
-#  tags: env_setup
 
 - name: allow HTTPS traffic
   ufw:
@@ -122,7 +102,6 @@
     name: "Nginx Full"
     state: enabled # enable the ufw rule
   become: yes
-  tags: env_setup
 
 - name: delete redundant Nginx HTTP
   ufw:
@@ -131,14 +110,12 @@
     delete: yes
     state: enabled # enable the ufw rule
   become: yes
-  tags: env_setup
 
 - name: Restart nginx
   service:
     name: nginx
     state: restarted
   become: yes
-  tags: env_setup
 
 - name: install certbot
   apt:
@@ -147,11 +124,9 @@
       - python3-certbot-nginx
     state: latest
   become: yes
-  tags: env_setup
 
 - name: Create certs directory
   ansible.builtin.file:
     path: "{{ user_home }}/certs"
     state: directory
     mode: '0755'
-  tags: env_setup


Test patch:
diff --git a/ansible/inventories/test/group_vars/all/vars.yml b/ansible/inventories/test/group_vars/all/vars.yml
index c855cc73f..4f5e9f5e7 100644
--- a/ansible/inventories/test/group_vars/all/vars.yml
+++ b/ansible/inventories/test/group_vars/all/vars.yml
@@ -21,8 +21,8 @@
 ---
 ansible_connection: ssh
 
-user: ubuntu
-group: ubuntu
+user: exouser
+group: exouser
 user_home: "/home/{{ user }}"
 
 # Domain names for VMs
@@ -49,9 +49,6 @@ zookeeper_connection_timeout: 18000
 custos_host: "{{ hostvars['custos'].ansible_host }}"
 custos_port: 31499
 
-# Letsencrypt
-letsencrypt_email: "abhinav7sinha@gmail.com"
-
 #Keycloak
 keycloak_vhost_servername: "{{ hostvars['keycloak'].ansible_host }}"
 keycloak_repo: https://github.com/keycloak/keycloak.git
diff --git a/ansible/inventories/test/group_vars/all/vault.yml b/ansible/inventories/test/group_vars/all/vault.yml
index da667cf1e..723cf1575 100644
--- a/ansible/inventories/test/group_vars/all/vault.yml
+++ b/ansible/inventories/test/group_vars/all/vault.yml
@@ -1,346 +1,346 @@
 $ANSIBLE_VAULT;1.1;AES256
-63396166656139306662643631356666333936386234376664383934323633313362363364373466
-6531343735326332633239626661343961616663313438330a313664326339383466623339356434
-32613234613566613931613033353731353237613434623031633433633137643338653534333164
-3039353964623565620a363665393234616430396338316131306462346336643738326361363030
-34323333626565663138626137613762326437396236643666626439393832643139656132313438
-30663664616539366234656265626265346436393663333961393036653936323735316238623464
-66633366343965313566626231336661646666393731393139613231343963376630303764393035
-35306162636365636666323734303431323337666434343464613532356130336561636563303466
-61616336376135393837313364353166636366653039313638316434373163643638346661313337
-62336164363664363165316233323837393930663934366438383166323531333139393939356330
-62303031303132353264313137333430643463323238623338356466663162626234306661343636
-30643030613637353435346664653937343133663039333663646331373764666339666163616137
-64653937663666616539653264303237316462376633336365323232666133626139373062356437
-34633365343336363433666663636462613039386465396633613737626238616339383439616163
-61333930623934643436663031613462396130333965353032356337386630343861396366356264
-36643335656537383235633961383437633734323938373966373935343766363532623266623962
-63653038303564313161336432326630623565616161333038353831346538623464383261636135
-61303132313931303663376337656534393032373566366264316662376336666335306561666363
-32356164353063313831386238346462623962626233313835643165306132303664333566616132
-65333533383637356132393533626366636237656666653739346264323630353661373636333266
-34383564363133303433383065366463623337643462636639383338363665623535396231653733
-36386662393230383264653262396666313432623137656538323537303866393662393564656231
-39356664656432656131396238666633336161393062373965663239363330653936343733323465
-35333233613637393634356333656136386137633665383330643262303231613231636232643238
-64303337643737316662336231343439333662313932376131626363363364663961393663346238
-38336136666232653535306631313538313831363433353661323164633530653937393061353064
-38626464656438343636396436636339666631303239646462353766613463383932343833646466
-34373961373766663930333337656235326437353963333538343636626233336336326361326630
-36366231363264333061386562333835383963623761623732616132313461336662343639633039
-39373936633234646563366535633966306661646466343366373232323562333630636164343838
-65386131323338666533366530336537323664306238633534646130356638653063363337353437
-64636564616539346334643762376233656339613630303235306563336534373038343265343334
-35303734653164646261636362653839343836343736613238323934393739633933613465343833
-31646630623735623265303666623036323661643737656332626431373036343435626637656564
-37303234383331373766363131383461343764626264626232663462393932313363336633323761
-36333163386530643933303231653538613735653666353530633061363832623963336161383239
-66396333613132666538303264346566613638623934653434323332303234323166383132653132
-36613232626164386335353465313766323131346265643263386566623335336266383263326165
-63323235303730363461373165306564623465653833313561373464643535306531383763306339
-39323363633337643532373438383436303764636334653035666131323232623939366465386131
-33633933396532633261363564396632373163373461333236313437393436303431666266316432
-38643762653831656435613134303165656331653838336362613665366666393961353565386233
-36626533636538323532373164633439646365666464363137633234646334653462303137343433
-37363065653162386266393831373664633438373336623434383135663131643866386266303037
-65363561656130633362656534323161363937306165363064656163353864326565316638353263
-65613964356163646231366635373233613961663535323935376230633833623861336334386363
-66643833666264666166306138333735316534373466313932356161313835313732393539643961
-33656639353830346663356330666339333033363665656164353732346131633330396161343464
-36656562373034656565313037303235373038383334616438313839623338613736343566353232
-35626533626265373763396364326434646265646335666639393039346132626166646261366633
-34356634353732353339383238373638323065343935353830353762396261313932613564353036
-35393137646536636161366637313664623061383366666566383861613232663536666332326532
-61633262383062396362316465353032383962663537643066343164353363326639306531346632
-34363166366664316637633131313639623536383739303831363262323535346537333466396332
-65613932666661623564383661643932323263646530393138336138306163383165306131353835
-31356332396239396139363338663533393439383136373936366634396338346461306163396430
-65646539383662653364623931663466653437633638663230623762623634336435666630373136
-65333238386262663239303166326236393438343631303361333632623433636531613435666238
-31326164613761613937313036656263303537613431393966393535313039303534643537323135
-30643264643963376465646430623064616262333337316264353333353133303631663631643934
-64363238363632643963366337393538323135346335386533646262313262646166396461663832
-39376633623462633564663239353264353933333833366134376363666135666262323261333636
-35623333333064313238376231653839373937623565356666363431636161373030346262316565
-37366365366234643833333336653438386439656236343630393330656561303131303238616364
-61656532366234653038353334646333313731323638323038313466386338663066353464346639
-36613336653739613030663131626262646439616330626637333432373264636261653063383432
-32376236366135363630356534613834303833363732646262316235373563343535313139626565
-64303031366438656230623161363032643034306133396663653963303665333033383561653363
-36303033383861316530626464646465656263663133353235376264623066666335366165326333
-66336562306265363635356362343236383864386439376661643066623963383365663332613538
-33613034626134663536656438636162393963623539333338613930326335316236343838623963
-36383861633134343062303036363433653136383161623032323762396536306265633461653739
-33666533393261393333316162633030643934343233366333643334393161376433386261646161
-30356630653630303232633066646330346233646335353032656539343665336363386133373138
-32376331303466623636336232393964306130663163393334366333303765373364376365663430
-34643937353732373863313431633039303065386437336663653636663665306165336135663436
-33636336646338616434313033306438343832333737303433383935396439323662303361356566
-62636332396664616238386563366231346266366534633065646165366134316364633434616563
-32653238663964646165373966653563303934666535663762373631623062643765363565636130
-30303766373239323766663838376364306536383966356334343734303837353666653263383463
-33376265316664636561363832383839353761343461653939343365623333336561383538643163
-31653365353336323162303764663130636630313264396230306330316231333265636164623037
-62313363306464306631626461666433393532656437646637646135633431353361336363666335
-37333738333362643137393466656666363263663130383538636663643235336566646463343633
-65613639623137393338356337306431333465336137373830353563663231663735623538353262
-61613135376566306432653330326363326132303433323234613632333036343039653133303932
-30393936616630303662346439316436373665633837306465313265366136396637313435376136
-37616566373438653737323961646164633539373063316262646563643932646366633466333532
-36616239663430333663613435313161313565376266353837326337373236363964363432363338
-39623438616561636263333866613339366366313230353263623834383430623730636434383163
-31376632336439396236353066383266613838626562653330303536396530396137356638316163
-30313737333135393933356165366466386664653736353937373634383965363664626534666166
-39663937376530326164383635633566383366373766333231303238656539613139363938326665
-36613365656465386232613863346133303639636431343361326138363265393935366635346431
-30393063343136386464353761366330643061363930653037623437353636316564633838316161
-35663939646538643931646439323039643135393366336432616466633638363462383338316634
-34663131326562336333656161656262656561663062663964646661366231356537386363386662
-66396333633930303561393863656637626133653762666330306561323736313164633364613261
-35336565396266356563313436316234666632643765663833616137643031646533613334366661
-37363266386532366639336236376666663939363634306435323635616239303935613364613163
-63636164363939356139343661363065633439653364623363326133313035653962636536643264
-30306431633166333734613330626366393439313433636461626131663666323735386563333662
-65616339643463323735323235626531313632633735633237623435643164373332343262616234
-34356435656464326561353964316565346438653566613763636334356630346436316530316162
-33326362313232663738363330646131623932376361653561353263633235666530363137356463
-34623332323639333165373036663765336664643835313832653164393461306665613538373839
-61366466353164346164363565636637616131663330393937636361623136643965323061356334
-39613430376163373933356434656261383238323037666437633536363864343864356633366462
-30383235383538376566613131353132646137656439393036356461306635613466313336666431
-33393861653233303137616135353137663262303233623662646161313739613937626435366134
-39636461653638663336306561353166343035306633376531373162303538346430643432383838
-30333463343039663937613863363232306265363934663735643865303766336339666266343633
-61663430323638666434366139663835316637616163313237373437656235326138373936396538
-36383336386538373437663661643039396630663766666630643963653566313463666665613238
-34373537356161316461343163646630313232323537336635666564363565386535383361303039
-66393064633562626330623165356263306162366634623634386162636239396563393838353232
-32376266323962616362386433376662623236643535366363326234623835353133313762303432
-66353832383765313636663336323234613666663335313730633562303563313734653632633864
-36316538386261346232303666663230386463623432326536363933623833393136333235313038
-64636537336132633133653366616330616364663264343863653564353039303564623237656630
-34396330656339613836616364383638656361613061393332313533346463323932363738366562
-33663565373138623239323639313438393939343137316133333565613966363235363437313937
-61616365373139623431356536633566353962633866323266333533333632636136386432373936
-34393636636637333966646638323164356630653462323638623036626139323464623861313662
-64303231646162306536643666613763313866343665636234316131386438663166353763303735
-37373934666536656230393339383263653166643433613033633034356164396138306436366334
-62663062623564393037666237646431623933393861306331383565666464663631333464336662
-31356162313338356332386463323963363563616436366136653663663961353361396435393232
-31383865333962666131383635626665376331316639653264363561613965336232346635303163
-30306637343935316437396538653032306463616530623637333061323164656238316561636338
-32643537626436376265306137623566306234303065663735306330386139616161333834303664
-31313431366563623430643537323835333034663939626539373334333464643866623035323762
-34333365356132323539343433333932623862633930333964353137376237323437656634343661
-36656639656265373835623861626135666433626466396666306535323834313632653066623062
-34623766333630313037393764326633653631326538643862373265366263346536613661383739
-38653261383366376532323562393931383263356137616637663531333337383438353963313262
-39376130353936353533316238313466666361303063656232646335666638393634633265666666
-36643761356137343434333037336135326634653931363532306133663834663866336362623236
-34646532393731623030663331373231306636383039396363386536663138366233313236353161
-32326338303635313535653837616331326434376533313862356135633830373133376235633331
-33646565323566333064393938393862343732623964373935353032336339623663663235373135
-31613164646539353132643231336535396265373430633438643836323930313232633735373063
-36613037303932316366333565343364306561316434386163353064366562336262653439376538
-38613531346237333262363166633534663731363563623438323837376162323236356463326433
-33336533613063353639643636616433386266316562336337323032633936386631653330366666
-62666562636231643736633631613931653535326435313037653539363439386135613638626464
-37393639376234333831633664356133303035333166313433323138643232366534643334653439
-36303731336461396665613236393164653363636665373961323866656364373839623361356264
-39613738353537653465313265313037336135396631376438663433626365326237346233313463
-64336236313232336634343634666133393666643562623361313331666338343735383437383434
-34666265363532353833633463623533323735626366636532333837613062626265653961653766
-61333239316666666537646464353531333837386639666139306336616561656338313461353563
-33666336646237333539376638633537393964373239303263333839313761616339623131633737
-64336438376537356264306166313137373930303165396264366331636230346339656332636161
-39373965346366346531633437643832643334303663613263626636653538653830613832613031
-62643665393435373333653431626361393866346337343238323030363236376562323435313637
-62316133623538623234376336616666393037343135623961313131663561316239313262313461
-35313536626535623564656230323264623534643732323166343261636431343839356431393764
-36663233653531616538353730373763396431346264393531343238383431656135393932363137
-61373934373635346166636661616536663239613936396166343533336630623636666162346537
-36343862656362396362663638336262653839303736633436333066396563376330656361633165
-61396431396339636163346538303435646432356165626435366565633062396263363635333463
-36396462356438336666343962323334626135346132366135313436613439653431626233306537
-32386462666262613535323565366636613536396639336636326234343337646538636531313130
-36366464336263643633653538313336333162373332663330346239366534393161363230323666
-63643165356334626366626437343232386536313731323964626533326366366539323064653961
-31313662346432366633393938643466303134626635623663336333393663383563316231396534
-34346462383133373239353931333331626465663065643636386566323137333061333661386562
-39373264313833613863383439623862653430326136333862386461663066343562653763323634
-34396635316362313563613331333765653630356361383938313030386466333936353261663539
-39373336306635323739326238343061313561623338663764643263323235323739393037303663
-63373161316535613635393034636336616434313634633234333231623338343962656230643536
-36646230346538373763303965326130623838353936306663643132313537326632623031653564
-63616661356537323730346236623362616561373063323133353639626534326631336263633362
-66373835323962336539333839313766393636386336366634353431363034663236666266386134
-65323939383630353830393465616437383165646534663233653365656132316137366430353138
-34663236653662353364353161303437623164326165353763383038326434333765396537663134
-65653933333338626266323361366233646466303936643063323436366261313762633034616535
-34343538656466323266643435313336663337643064623232363463303863346664303065356263
-61623863626531333362613436303332356335646639616531383636623037393536343530333066
-37643932663139636365633766346638653462303466323763663461626161393436396330343537
-64383231386331653438356261656364363966663537346433373463613466373162643531346235
-62613132383762326639663333633138383763353737666435623061663432633930313632643731
-35396132356266663934376231616634306661396566376132643764666431383736353366396632
-35366264623937643338663432363632653162643237373637666164613462623838623037656165
-30363934303731373239393164336432366236343937613465353863623535663063373864363733
-34313165306266373765643535643336383637353362653866376633633161363564316330353461
-63653332326161636636326231363132356364663931643230666333366433613333373465613135
-63326531623166376131316139373939643434363939323862343639613536373465616564333631
-37373132646661316363323166373231666239623534323135643565656138333364646336373063
-35623462656338643539313462393633633236333936613764303565613238316564376231356132
-31326364336161626432623837653537363632313766663265633737666331326435303437363933
-63306462633333633261663436313065343335373462353762393264393737353039623731396463
-64373164613931633461643139363531323262313364383732323561336632386462626236366562
-61386135343031333830336663313564336362616163366562316339336161393235633332303665
-65396261363462346163613236636232356435653062326538316261323238343139373665636266
-35323032346461313262653163333333353633303733333236363337353765373336656133393838
-38613831333864323432393938313664343838663537356461616161336562383863626464373538
-31356266373730386232306365326262323064636138303938653965396462313031633864353066
-30613431656665666630646137303363643963393466306236303738313663393432643664636137
-61616361383561663030363636393938306536316230333631336439373466663733336237343162
-31653536376366376139343766353331386162363630393331343662663037343566363332346363
-34346439396236613936613661343332623434393138666266316433663135313637386262643539
-65656231643637396337653233356439303430663337333334633832653765623837376138316338
-38623536656662393566653563626365393139313566623664393432343330616464656162393339
-32316538386161383632393135623363346339376562376531373763626465316164636364353566
-66613164656437366663386536616561306231343763663932336233363962386237306334306234
-63643565656334316636313264653330386362623563666562393335326637363434663437653262
-39383038626263623732383266363864623863323765656161383530326261353863356332303739
-36333866373035623065306532386562323233343737613337313239646130623964663332383561
-66343963643064323738383730653739643838316539653038353231613131343664353863386162
-64346430646266393134623065643332333265356631633461383234623736653265646562353464
-34396637393662373731363338333664653933313437306561373133336634336466393234663633
-31303061613131353930393330663334656633356361633866333264663930636363393133623466
-34636237396239376464343238623833363838656234363836323338323838343465393462306465
-31376634663832366536663166643338623638666536363938623634646561343237313266636533
-62643437316435633634613062303463656364313936366231336531306239363633353236333831
-37373436373435636333303065613835333630376536353739653237356633663236613364366239
-31633935363062393862356432393263616263313037646666623432316630316666623464323866
-38336536636665373532623533383034386266666335663837303766656338646530373030396366
-63633166313530663166333065356338643066353164343964356331633236343966333837646561
-64363933376333383461363165666438303062346165323934326639393239643563313861316565
-66356465343437663963386438613561663063376431366166386133366137623761353130383364
-30653834643335313864663436323233333065643531623636656138663462633061376164663062
-39643061343361303537376339633839323130316266356639303539366464666130366532383135
-37346264303265356664373532306661636163383730313236666366616363306532303938613733
-32326232656531366334646463386131306461633834363861396164653231303731366566316234
-34333738326565386434373961326364356666633837383230376565383139616331663936613930
-30373630373239623230316461306332633765646338626437646561323234376232626561343136
-64643331663236616535636462653962336262333433656537333666373932623562633239623038
-35333736396236323537336431303532643233626630626133316635306665646536376430613435
-62323361346438646238666235623336663062626637353261363161616537346237373933353063
-38383530353661333566383166613062653062333834376635336338326463373332663839386639
-38396435346630316137616639343362343962383164333638326566346564376666356431626631
-37373838653232366238623063623936343432366563373165343662393166313834643162646264
-39353430633031386437383838323264303861306364623338376332336336323063356630653733
-66316661623265306166333137323738633963616531383834356231383833383064313839633036
-38643163633438303038623363393266343235396263373430396430666465316631653731386435
-37343362376232326634333336336438306464383665636132393937643163353738316265396561
-33663734633335313438643661336237303439316633353539366231306262393832313165666439
-37323162653931366163653564346262386238626166653462333132663264643738323033323131
-63303765336465393435633365346566343362613864343161383432323233656133316536383433
-65363131303631313231613362373166386161623066303561636362643237353439336637326335
-35343039376631373663376561343231346464333065393334383265646638393637383937666531
-64396539646563386461633134316239653863396634643833623638626636626636343838356637
-31396338653535643533383339663861343065383430663030633064353465656139366631626134
-37346434333630333133363866613665353164626163383039393661636265373933363361343262
-66383261366562336663376164363733666331326664616230383665353534363362303332666337
-35636262363532363836313937656639326233303032656366383165343438343465336539303162
-34323835656465356436613164323137353366646266326464616662393535326436623538383938
-39383934353164636434633532343538343431653939373730373630366438636465386666626239
-31653239653164326131343134376161626337666638623733363734393866613338383737383761
-39663664303963343066363665333732366539316535363036363565616565636139306663346263
-61313131333138303730353237393231636539643563356238653164396330353132363735313536
-33363162306665653433336339323965336161386339313564646638353334613832653066323536
-38326661376230306135386136393661383765393363373438646239663938306666366464636637
-34333732316461616534393063653964343262643933303864666136313433626261663833666233
-39663431303139373165646236376631326336623964663830663461343238303962663635376330
-66316266323765303731353136663035373434313938303333613063343236653630396663616464
-30613430313435396639313930373832363262383530623061303966346336363635623139336434
-36346664663965366538656335356437623863343030393765313166643837393263363061376135
-33653262373230373237396663376533656438333135646365326264656635373439633162633534
-39353131663530393264306363643532303761633331343562363665323236663334396366663561
-35613666613631633038353635323833333338346239666163633237613633626461343162646339
-66333332383732613231616630383433346637363036643936346431326139363132393064616234
-64653466643338383766396338626439333531306534313635663032663835353765393034613235
-39643564383036333531393731346432303339666266366234346562663862383932626430376436
-33363666626664376162313733376237353137346361646263353335656563313563383634316365
-31313461373630353563303931353135623364636536363237656337663064633032366236393039
-62653663643136623638666633373362653862383566373935613165616462643031626539353965
-33353638313831306134306564356663663363613731353534316239353930383561363462316631
-39396164396235613033613832633566333461623862646266653737663832363063313962323232
-32383733643635376363636137323362393035353466666666373633623462633635336665366336
-36336365656137666163643832396237313565313033623865343333383837396638616438353531
-63623738386634373965613662623566303430343733656132656236303461373461373837396236
-38373762316362633261306239396236393539336632643636376233303538396162373261333730
-30643365633165313037643535613961303836366434393837393063363864363764306231643866
-63383039343864643632306261353564326433666561343237613430623735623461646332366565
-39653663306438336466373566343130343062383862633262633863313638373966366133333664
-37333831636163333533636362396439653536613532663931653030306664313833303637616132
-35623662623137653830633438613034633433653961663936623365303432396231366635353065
-34386434373830366538346666336361333139623236326332633833623439346333393034663531
-63313338376432666666363565373930373733343734363766363462373139666234386333616537
-31323965663737336539616365613064373165363932366538646536313239633565346433666630
-33303134653362306462636165613639333163303738643463393864346164343032393832323230
-36396531613336353734653736323764393838323661356133313961306161356431663832383735
-66313735386661333030643538313230373035376334393636613036373864323161386430346430
-34626366613034333963303130383039313438643564333134646536636332613938323535646135
-33376165653937626561363231353133313533663237636632316338656535373730653730356332
-66363931356539386463373463373736386665313862356636666337383262393065636536376335
-39366330343934333262396337663938656362313030363963393063613464323333343330646665
-61613432323332353333383263633662646564633932373862623638613538326136616231376536
-31343331316238653339313166396161323865326139616433633465356666393631393533306165
-32613661666332353366376563326163663833303262383461373830333133346337613237323530
-66333363376164373661646464633161366564616339393131313466646534643432623033323238
-33353632353064333239343639396435336131363238653139373262663439663433343235646266
-35643539313761346239643631326130373266303439383239336531343339646334356265303935
-30366363633536663163333165396535373763343566356431303662313232393063383862326535
-31353635366638336339613064353133663132383837613031316466303139333539343831653632
-33303036653464356434353437313765363938393664343761653038363231636231343333353539
-38653961653663383035333264333464326164303035376332663366616431313632653731386439
-66376562366231613839383937396431313761383764666637626434626262323831343336326433
-66343234353566323861313034633664656130663932336264653963613636623263636161363638
-39323062346237393838626136636136333462623132376361323061376332303566306338303631
-39313365646365393034393830376165383966326666353838343036666633306134643032346363
-63343432386165383764326230343964646233623931653366366530363032363734343635333334
-37333162613362336262393139666139393230393465353635323239656338386563333735303330
-39323135343930356562386566613766366264323137636633323535313563393664383766633538
-33633236613064633236646463396237333030326333316337383934623037613833363733363064
-32356662353530356563366635623231666532376264366666663934636664363563663962363436
-30343534636532663161393561376561303035653030633163646530653462393336396539313937
-38666633383830633863306664323831333235633335643039346338633130313061653263303636
-33323534636430633432636530316135376639353437336437636332613031343637636561333863
-34396138623437356336366531333464333733313939356638313463646131623366643039313336
-38336536663436323764363766303561666461363937393738646564613532323639613764353032
-34383537376664643261393232323530616561376662386633613235316137346433633530646131
-39663438313130316638663730386635323964323561363337643566626437383338663938383438
-38366635393939626633396331333563303466363863326138306337303566633166326565376636
-61356665616662386630626663636665613730626230356538366635393965636236336132396236
-39643862633937343165376536633364646264623733373464633537396230306639386163386137
-30386461353661376537326665363031313065653731383638376365363061303366373132623238
-37346536663536373763336666663932303062616533383631373030636437386532396236646137
-62313037616234363535343863633733313461333835316137336638396666363764346135633938
-32303836613334383737343461613938626636666138386464373238663639363638396535393333
-38623033376161626438303866623531666433333133366132333237306365336338326434323864
-33623033626134363537613435323734656231326366646362646538643839373833306661316434
-36323437333663313233393465333964396161636432323134313732303835323735336164303435
-39636565306163323730653564316233306632663834616631636430363433396434386263633863
-63346330313938313262353435653830356265353065393666306663306337393936363435383538
-32316131653630366431643863396435666163313634663161326332353038613066396434386538
-61363539383963653732306133363132343737306262656236333638393235306530623938656438
-33356530373963343563663439656336383964633833643565663639396236323565643032386261
-62396665643464306665343037323563623636643134656632613963306533343831356437626261
-66306336386365303963626334396662333130336435333334343137663635343138616235316238
-33353337653338343933343539633565636635636133326265646563323034333532656136303939
-35333636386139306638366666376466393763373936313433363461373062333738373765623866
-61646666323639613035343363613839383765323063353033646639646437386537326436366261
-64363966316639646131313437303234373965613565336164383866616265393563666638343664
-66396130643433316333636164383566653138326239623535353136636138623839666537383166
-62373531613132623761636662346538653334393031623865356534626235373564666561656533
-61383262626133356231306365396331303335613130333335313131613130633637366437356238
-63613931393833633961626333626433353864316133323265653934613533646565353764643239
-36653463353635313536353462323862373939383330356663373239373237313133333531663463
-39623464663063363962626231356236383065303239366131313565383663343835623034383063
-6637
+33653364646365366435313336633432653263373030393630313539393139313837383066663732
+6330323333646339356565366636636433373834396537380a373231363032366338396365633661
+31363064633961313433313236303730653561616332316237636161363962616530373230663833
+6434343664636265340a323162383837663133356331653836376139666666613066666237626237
+36656336643435623730623866316231323734383238343639323130383133316364633866623631
+65663466336661626632613762656230656162646238326136633834623565643561373362373061
+64353630363738313832663139353735356362366463336137393164666531616134636664326435
+65653736383865393230393462313635653134386436393863643862356131393166396435346339
+35303332323635613031666232323533383561313639336538393930633731333662616262333937
+31366163393863306633306565383861333635386533346233333963666537666533373063306434
+30643735643639346139363931633661663766643364393135353034343639306339643761666433
+38613966313832643830623862643636666138663031363633303932333330616538316336633862
+65306439353930373237376539353538643065623930653634313139633833363738386331373237
+32316430643535386364313431323037666630663164633132656433353264626137316439643838
+36323734323465616436326436303264326139313865363639623335613435643632636132373333
+63373836616161396265363266323633366133343836613633613762386531333731626162633330
+37643836373039643730666135643063666438656330303765303335656237373330313438346636
+30653035363062306265383762373431653164663738323231343462613739366365363939343031
+35303564306539616164303362353864623863323033363763323161623336653932636639353231
+66623163623862613732366337643537363362313039616162343032336362653630363063386431
+32306530663032393933643136623962393639366363626235663539323936633734663433613338
+61623861653364356432353434313164313531333739343164656133376661343236616464343233
+31343730363661356537653963623931616164343236396434343466343833386337643465303735
+32623136386430366430356336353233656564373962613736303333663434646139643530373166
+36306631663535323233643436393231663932343066616366393635313764343637653738643262
+33303735653930346635666234643365333032643430626235313064336566346439616434633161
+30353735386533366463663331646462386233623539353334643733643734346138393239353939
+36383466316264323564336462636636336538316664356234343037356134396665336362376634
+32343736633630333063656135343439363035626264343534343936333635366332356366366566
+37613139396235356133313338343336386535383731303364393238363961316630346232356230
+62643362643930333236663262636235376363363631656331613232393834636364343861383461
+37373462323463643139633837663833393262626566306231346566313363326333613465373363
+35386337663230343331343234633361373935626562663535656635616366316132643533396437
+33363266623036356161616635333631323139626332386536396536326539646361366632373034
+31653438616264323631323538656165613362396632383539616365346232336430623331636565
+62386665323039353135396638663162393533306262336330623131643436636165363334663365
+33633161363838633861373165323336623364663234633830343535353439666536306234386364
+65356633613638396535333064636138356233383931346539643036363535663638333633366639
+33663632313664306435373633633832386336636266663337646430333937633235303866353764
+34353733653061343138373331626532323862656330613231313236316634306135316631613264
+63313530663239343365653662313465366537353066643932383531353438653534323666343330
+32393262333562336135633331383438613937393538633535643461376165666438653639393438
+63633533396366313730616336326435353462393033313666623232333238646335663830663863
+33376163326138613938666433326438383663313330373937626533613834626530323061306464
+66666433613063633466633038343564653134653133623133366462393366613434396236396530
+34613031663534333830303236303261363937623266326162613261613564336265376638653234
+64363035636263633636313038353038663834363435383332353666373538333239346636653164
+31316465366266316266323434633138393635663237356661666166636434343464633835616539
+37343833323662333337366136356330653066623662663233316231373962383631383136666538
+33633537393134363031663061666330666234666665313635383838633034393065316165323132
+35393763356465353337626361623230666664346165366134303261633030376364663865643837
+61353739363633333038353033323738333333323763326362313263623663666332623833376235
+34626366383637633934366533643036636465313261376565396463323939616337623834393931
+39363334663637666136393630653638346564383462363162633435636264646434613734656466
+39316261306164393964663835393765393030613563623064386562346237323130346361626663
+66636139653234313636346566616266316139393036383162663063343235313931326262393034
+39303062323361613933333765316433616630306566363165363838323533323939383934303033
+33393233393766653266663665323763646564323561653531623735616661633837663936626237
+31366263343639643231313365663966303535353261613736613361346231623061346335383131
+33383562613635353264623330303364356261363162323861643366663631303332313666646434
+32623632393433636164376265386635316633343736383539326264613566326663356437656139
+31643733393837363162623839326264663732346165653934626138663661356236626461636434
+34643964343833396136373638613836353463666464633562633761623835336230653432653661
+61636166323936396361643966343465393739316138353463373130313466343031346333633961
+63393365373235393434353762353939383064383661383038643637653830373630383032333962
+63393335626431393530633064336663663035376233333862636336663837333638646462613537
+65386663623965376263643935353665656236333233613161646630636163356538316161336363
+33326263613664373339363737366661366438656331383133343835343039366466663434623064
+37366238366331636334303365366362613539396332363633616162613964383763363662633765
+63336462396137323061616464613732383730666465386263376536653036653832383238353864
+30336563323931626366303465323435613937323136363566663734653335396139666235643638
+30373333313961306265346537383030326134616138366265316365393933316533363364663631
+30663837393632346330313265613465623165373066633433636236343133626332316530333963
+61333466336235303232626136666664343137366561383730656666313230393037323465353634
+39376436356130313536373537353239666330323162373037383466363165366462613631376638
+34313364613462356135623062623635356130313832323434323238393838343266623435626663
+38643132616263356338396530316537393933616439373031356532323765633232643937303931
+30316337663237303938323736666531363363326135623437383937356162613638666464626566
+34313334613964336564316637383532306562653565396466623266643035656464616236656631
+66386435626530653464363635376638383139376431333034306432656337633537376531343238
+38623037656465386531643864643437333437616462613962373866663138323966336332376331
+31343136623032376131613364383236633362636661326462623663666236386166633339666663
+35303766633034336634353765303432373039633633336636633133373032343961333231636438
+38643064323635383136306365363463343037303735363263376466613937376238393934376265
+61316232633738623061343933353135623664643162373237346438386164356539353830353263
+38356537386539633331656661313134616636616363396230323263613030333731383961316234
+65396638393039303664373830636134353331376163616532323131326566613363373130663964
+38303132303437613566373838653466626330613331663166643336303930373063646539373933
+38306336333134356337333431383962633961636237393031623633316565633136366466383730
+34316430373162383663653763666234316266396465326637643033376636373965396431643339
+39613362353033636663303239363461653765626561653131643631393965376361316662303233
+39316234656630396635323639353932353437336334323066633136353631386230333065663730
+31663534356332376332333731376564623066313539313430616539353663643833653031616531
+32626434313236663334326161333437613831666136663835383539303432613162316139646532
+38393037343865336431613966326436313866633932633566623035646661366434643863386635
+63633430323866383435313663393039393963353563636434663563353565386265653139363238
+61393531303631666166343261666134303361646638316261306135383066366635323730613237
+33323335373533633532633461636335383534663261383165646335323934353136653132343737
+33383934366461383032663232316435323839316366343136626533613131653937323938366132
+37646664646539383531323465633139396436386539666166303362336638373134663231643864
+64353231656236363162623831386564633532666262386635396462356130646536343763653237
+61376139303634366638323861363263613463633334343434306361313166616238356565376231
+32613138323163353161316361616663363936626462323237336139656161346234623233363165
+62333939373837666566643931323837333535333230616165393831656466346164646632346663
+38376565313339623133326234393632626464366666343766366439303864396439373665306432
+33633064383734396465636435326330383063386536393533633761623861336135313166366465
+33623035363638626335613132363539383564663735373539326539616433663138613834366665
+66396639646466366631633733376534333239613763666565306464323937623933663433316134
+35306131656365333561323762613039393761623237386163626432306433373961343561336362
+61326665646334383764363164316463353962623263373266363164663436316137346666383136
+35623330616434666364343963333733623264333032663033336439383263333134653131383130
+30383766623463353563373164643064313336353139373636346537313836653335656636386461
+61303534613962343535643433393661653134653833646166336536386137376662303861303238
+62376530633836393136346233653466643837626563383065343064323166633034643337356630
+31303062383137373266313265333030643832633536316434626234656665653738373264363261
+38306534616638623133356130336432643466343139626634343031316439623137623130323036
+38386266656632313662613964336630303262633564613735623038333031343266383065383966
+64626535623163333463343632383230386339306265376438666438653965366636326661303363
+65666135336266636264373865373030366234383839643230363437653662353632323034356332
+39626132356131326333336431616363393634346362643763666333323164303535323139646439
+35343636623435323134356530333234366562343161323333343935643565393739653232383031
+61616334646337353330666661306331313264386262366664323264623732323663333630366463
+34396664613638313161316133366335303463373338646438316362653164613365393061643661
+37366539653339353663393534663634643663366530363730626336396139303639666338343663
+39393133613761663939613862663537663165303838633534393234636136646230356562633939
+34343830616636383061313330356634623364346335663639656134373362333336343664643165
+34323732316162633064353032383262316132336265623930646131353164646237623065666238
+36613463383765376563373736396662363732303139373633346662373331626631353033303237
+39303864326635393463616264653361323963616633623065643366383364353861323337353131
+37396133393034646531316535393461666563643764396330326235343034313466396366623466
+63623062356131643233356239373436373839623936663066363738396130343165376133653662
+32306133313662633537666330333133623265333234623436623330333637653261633434316161
+31386332626138306663353563383866613362313136383535393735393033386662636463323035
+65376565363736636238303161306533366536373731366666373839306564333766646138343130
+34636439313837653430663439383033643739326364386331616364393165326636653764646665
+64323931346165333930383036366563333634303930656233613636393361383130666133386166
+34663062636634646133326237306163623639396631623537373131323731393462323134303761
+37346462323563343463326366366335323762323834343837663533353333313233353037663933
+32363736646536356132353236393663666439373766656234323538313536613033373935636165
+37373166663837663538316235303935373963393737613665303233623862373733323537616638
+63336465626235656566386163313438643661386465333437383765616331353136396239396439
+34623465376337623435353965323038646665313534613536626530303565613234306530323536
+65656536353739636439653432616637313163333832316166363838356435303034356230323338
+30336332336365636530633765633034323865353731373431663830336535383763363239353530
+35373535313566626530343261643435343638393361383231386631356435313466663266623765
+33313830356363653636636162393063363865653061356533646364633166316365613636316661
+30353237666466616135353336323166333739643938613035323139376237623533366639373861
+30343539633561633837393034636534333531623930636139316663633636323431336434316434
+64336434383132353361636666373037666534663763326334343762653239663363623261633432
+65353139323266366631636165633265353033626131613933396564333139663132343261363932
+39383036613964626439653764353261376439613232326361663662623065633236363935643261
+62323163326639333063313233366538383830653635656566393163346332666163316164633536
+37613335646133656134333839336463353662626131336565343537643839666634396434363532
+32346330316132656235343063313637363537666165386461366532363165383166653233653137
+34656661613930626364386331353064393631633935396537316630383734643863346662363834
+66663837393362313330306161643937386265616137396235626233303333626439653330346536
+66613663363438343936386362313735366162373531306438323165613238613837643132326133
+35393132373339366164623235393432353230616531363631646636663534306533626364396361
+34333066313137383061623038316333383164333933316139363631666139653438376332326435
+33313539663266306463343361616436386430646430383134373032373636323365613063323537
+65613034336265343562356633333537623837303836646430636561616239333866336664343833
+35333062663633386333373934353238616638643237396330346634356135616164623766663564
+31386461623464323134313561326439333461633762616630636335616564363237333439386431
+37353261613834623964366430633561623633316332363038313939363537356161363165376534
+35303430613630346637373237663063366666343936383262666138643130336438353863316165
+61656337323832306137363061663865396264626333396566313366323836396234346231666362
+63663462393065656663353966333533316665363666303039333866303330376633343366613838
+35343661653165653531316237623634303861633430343330633631376437633765333561656664
+63643332306334376364346130653532316666393731643933396161376337353862363762303164
+65373461653239363531613364303735623133653039323865363936663765613535373666376661
+65646537303033386130633231373335616539643435653339326537623032363766373236383536
+39313938646564636632303765643165333239363934353939623836353563343863393539623231
+63326437313664653236366437613132656632333931356436633264393664363461303165313166
+32306337306136353465333730613264623039373661656166623331323962376535383763323363
+33613763316561333663613933643937396139633039633636343834313936383030373664623165
+35346433353633353663313738613564613534343162383434333236653131396435393038343531
+64636463623231613632376337613533623531333337646134303336366231633737363539663133
+30396530363538663862396166353561613135333964396431343230623366376536623439633532
+30656130316562346338656438646664353464356161313834646633353165636562333838303430
+31336265303338393664396235613565633730643230363061353639393538363766346139643863
+31653837373136643938336639363538626133643132306336616661356138636162373266383536
+65643333313565376565366663396336346236636535353435636665653431366534346135343435
+34343861633966333230376264383661623437393539333839623332613434313166386631646530
+63383036656236346635336632643431643666343661353636306539343661383338303864613439
+63663337386539303231626663323937376132323464353230333361353230376532383539613536
+33326230643363333163633135333634636630353464383836363732633561323837653832636561
+31636134373539353465326336373963646366643161363437623333326562323263323037326334
+37366364616538636231653965653433393136646231643965363930393061393634643137366164
+33366566393763613836663461373637663062376438663666336538666439346432353132393332
+38386537326239653537336338643236656534643430653435343431346532656233663162373432
+30353166323864316564646439653266393837626435613133313534353630383530636231653330
+32343936616336373638376330363965363936383363613738663132646561396638393166306666
+33303238386366366465653634636332623934306165333232653462343732626165376138396661
+37643933653532666264336334323334393439656664633138393435393664356336356436323563
+62313838383866303565613162396134663865313737613737366132623939326661366331396136
+38373162636632333662643563303737613766636439643231656635303438613264366663643032
+37373532336362366364386132666166306531653330353138316239356264373432373966353863
+35616438653437616562396238336136653934633230323437346164346638326538383762373436
+31616631643736376634633461326263666534613930393738663632363731323535353138613561
+36393536383835613664653639656461626334626333363864303231623133643365303463666239
+64316233326137386264326265633935366163316537666239386134643362343338613531326638
+31643363633263646362326230643933663031306534383561316463373235666362373634666431
+61633666393262356661353863396561613364613131323632393766643666323233303834643930
+39366132353033633562653964636335373137343734666165646333383666393236353061343566
+34316261636431336239366637336636643962306165623732656135353065656565306639306163
+39333662616630346263386337323234613438343564373961303431303634333434373431643233
+37643038363165363866373138383534336330663865356632613834366662666339396138623465
+36356239636637333831326366353164343162333063613934646465623362663838613561653536
+66613037616237366563663564383336666333373264366663313465626536376430643361313465
+37353564393261343964353435303464653637643335306363376466653539343064326162366263
+33643031393833313666633031373865303631623932303966383835643664643264626261333738
+63663861326531396664326661666334643336346537623736663266356630393162323865653038
+36663536346233376133653439383863326635663332333961383462343935623337613436343630
+64326634396565323939666239656236363039366534623937373764386133363731633633663131
+66323366623561316666313761666630346464623565353265306231363033313565616236613466
+35396639616538306335663563633261386135623730666566366265666130343463353238336536
+66363135363635346165643765356261643861336130306265626537393261613230643635633532
+62346231396334636434643634626131363161356334356636333635393532663163303861643465
+62356436666138393964366131643932386166616463623762323730316361366633393662386162
+35623964353133623363663333666530313732396338636532343336616439356631333733393537
+39333466306561643938363362663131366637316635306633333364623361633232303062373233
+38303866306263633365646162393030356239656263626136316639663065323435326663316439
+30333962383033373934343135343164643031386534613163663465356433313837366537313232
+66613261636530313764663665376535643666656363363231653766653332393238383363356430
+35353035343935393036633865396365666363333031343737366366643862326564316235623930
+34306565613761616330393637373463326333623731353138616163663931613835323631386463
+39386234636161326636336135313739336164643431393332386237376362316430383165396266
+31633835626338663063313366653165643232633365303935366335353362363438666438383431
+65376634663131336136353034393931336666306336323862373137353837326263313235343861
+65313265343233393666383263313565336464646462633532313730333864333736653531353235
+34656338396130393861383464373566623830663733383566653739396134313762356465663637
+34643362323731306434306134613930313165366138383933303736313265323466323837393737
+61336566366264363663333766336364313131656363323362383233333639386136376438626534
+62316262363530333039396331386131383038373731373466393534616536373830653333653733
+39303630303031666535396666666336353264383431653064383666313564363933373939646665
+34393231623836363665643237303831346363353232623066386362303637646636316664373535
+62306164333434613034366561626538366564396661653737363138316335356362376634396134
+31366638666632666366626230396664316638303336353035656166363062616534313939343066
+64613766356364363762323437313961353566653437303136323130356334656661356233643336
+35363166373239336262623263663164363463303165303137616431313361316361323531363936
+36366639373732643062333833373330626639663561613838313762383562633330653231366236
+31383463386263303539653461363537313465363261616166393434376232333736366164623635
+62623962373738383633356261656166653335313430643863396266376335343532633633623336
+62383633363035376535363864393336333462336536623866646365663965666266613836643237
+61323862636535346231346531656364326164666466666137346530333036633831356662383639
+39396231656130653330343236653834653264303538366132373663393735333065666632346132
+35363664666138376335326432353066393264396632613562323663633137353130643565333361
+38303934373931316362366261316638613832316337313139346263666564393633343363393435
+34316564633935333133646362396631373131313034623032393038663938336561663862393730
+62366465396166646137393230393661663135343665663037663337313937643163323866623231
+61336462656337373166396430303964353037323465363139626231633433303163363432303239
+65363538616666666362643566636530363735663738393162666539353862303466666138396131
+62663564643636653138663234393336373235653532643039656137306463653935626330643836
+62343833363130383730333531326439346335363065643731393161386435336264613937306235
+62313636376462666665626261393736383133386530373734383232643333396131653863373237
+32376630646262643134356236386332363532646237393262353738346239356133666335313139
+39376662363734646139363465383830343533633935616664343464613736386630363037383038
+34393030373738656337633766343365323832373164653566366132316635633363303331646631
+66613161336633363034366562393737333336333265623664666366613330636637386162353562
+62333038616530343536616564663531303136643332623564336539383039366561326338663561
+63363164336361653335616362643833353738373838626637623830323331326539643861386630
+66653739646638643030663461343465653530333131333962333535383439373631353064383037
+65623439313065373366326363636237623331663465383936356430653065626234653766393234
+31336230666435666236396163393035343362396264373161373030333138366135656335636262
+36313666383334663666653261383664646262363836366365313635643933333338313333396133
+66356531653665653131666236303132346561306364336565316139346333633837373035353561
+39623538623032333939633037643438313664373064343063653664373731383634663264343532
+66366436636266373763303961633734326665633865643732616363636635616231363538643962
+39356238613132366265366539636634376162643834653738626232393734653335323265666331
+66393530653462373664393333616565666536396137313661646335613631663034306265333830
+34313563643133316261656236333039663262323032666630306362336362333965633335363338
+65623133396131343561363530613764326635646339353463333134623562616535343734316532
+32646661613232623563653931313738303939313436623838643763383139313061363832613461
+33613934343538376230663535393164366561636232653735663737303033356239613137373432
+35346362363065383464323237353234363332633930663535646432613062333634356134653336
+33653961346664613734346436646138373562613337393738333061333038313532376635636565
+61653933663735303035393365396632393936376336303062643739356235326435323134613931
+34653834623236323466346464623231626139386462346566356432343631383230356264643237
+35386430306264363835363566343937363937376365346466646263613764303330383663646663
+62633030663962373236343833393331636530626162313434666233376633633863653764306562
+38653062633936343238643365383565336438313165393661663338633061646261336263636665
+37343866336533663138363738326364643661343034666166396165306230316564636330313838
+34303765633162383864373863616634353163653632633265363930626330663666393836636130
+65396638356466333937306665393966643861383334396533633062636532666330316466303666
+30306666386265356161623465303765333265386564313462346565303364343734366137383865
+66303565663838333833613465643436383861613665613032623336653461666333613262366239
+32346663633735373634363863356166613238613161626235363432303836306661343735303437
+61616363623936663665353161393038373438333764346563313363343137376430333537313461
+34336364343963393033336630343037383836336261356137303835633665313536306164386662
+66333661306534643539616162333039316130383333396534316166333965303438393462633961
+64363133393830303366376338396534336262316430306466363434366535333563663065363835
+34396563353866303639313137396562613764396431366331653861633930366438636266633331
+62366432643236633063623931613930306330623231363239656234383761336633366332643930
+37313939323737323734333932383363343838656365333335613831323965376563386638613234
+30353763376435623363366434363338616636623135396232303762616231623539356263326136
+32343434343964633034356266643261656263323465323339336465363030646530656533636166
+62656264386362653863313666643933623036356238633235326232346530373034356639376166
+65656636363861643034653331376366393335636334626139343962323263386235373466383864
+33383531636439653837633935383363306433623432316535616165346337373037616439373236
+35303132613962336132356262323164633566326333326534623630326535666436333364653863
+34663036326330656532636632636463626531656333316463313463333462336630633032386139
+66393439386165346236363564343261623962646435653038653066656566666463303165306431
+64646434313930396263383238366262363131343866336263333231613530396231303666626565
+37333064333538336635396661353766366333653266653762386239356161356634343336393235
+36353035393962623565656632613538616535393038323265653730323763666138656239353531
+36363139616163356362376232316630366230306230613237633539333166363433653665373436
+66323139326434346264316530653464663731356162343330396161653734326633663136633764
+66333737333039386238346433316535383861366335386234383238666564326366386261623830
+37316135633832313066316534346164336362396166643131393238363062313364636465646361
+37366262313831376530663731616361326366326330366534366635383632616562346162393264
+63346633303661636638316330343939633966633736393237363162366362373835346334646161
+66323633643836623334363330653032633238666537343861313735373634393130303666336337
+37333564343337386263633563353736303264613163373061386265396163663464353965373361
+35356263333032663764653664633863643530303738623066653930616263386662303934376362
+65656237616461383232356231333338303665313632656537353461326461333764393935666666
+39333664356630336163633036666265633037333334363233373466663736366238633364333761
+63383936376236396264376638346234396438333136343637613834346135666435383030343932
+64613738613138303863616262353736306139313936383065316239613063353236393639643735
+65303661306638343365393533666332383937373437343337343830336330323633383435356361
+35653962346335663135333735383661383935343261393939383532386665613438343861303366
+65323432356631636365656164623532313562656136626139643937303838363237303461343930
+64616536376438303033663030663265646162396636353464633533333463626463663463336338
+37343362386661636166323066323739353537666430616430373135653939393331363964333562
+39333238653161643536663933326332613537643464383532333234633563306561343737343365
+64646661386165633532663333313564323864323038306263653932393031393034653934633839
+62316130373764393065643362643638393263393630353461383062363637386566663565643562
+32363963646164333064616666643535386664303836346361336133633932626561613364363566
+34343137636332306165346338346132663734363435616234343334653035646132316462663730
+31636332373737306561636364356262316637626462653262356635346563646633373964313839
+33386136626535323366336639343738346132343764666363383363396562303434366561313136
+66356265396564613862646261313365366538303830323732666336666530343963363535363935
+39663737616131373562666366373432336562646533333538306437633033323963666337623366
+33366566623538336635343637636533623237356131313531303662353134303361376638336636
+39303136633438356164613038653562306564633038626438663236653230333536326361306662
+36336639333263626563356363626530336632316366303134373966303636386631653635343436
+30653834653434636130613430336430666635396566613439646366393034646537383334346639
+36663464363465623165383662363862613836626431623666656435636266396133633534386364
+37643336613262376637326231666163643330313033376362626236623635373037626236323265
+65353466386664643933633338306431663231633162633231306264323131396336616662396332
+33326638353363363462326362666138393031636231373963636137386666353966373237656662
+33356237643336623538633536636139386434623961303334333831323662376537613232393735
+36343838336231626433386634363232333539396131623238616438343039666536323439376332
+34663665646132336130393538666635653733666637656130343030323061656330333130356137
+33326435616362333232623166363037333638653333363866376331313565353133386236373732
+3638
diff --git a/ansible/inventories/test/host_vars/custos/vars.yml b/ansible/inventories/test/host_vars/custos/vars.yml
index 333c955eb..cbc60cc54 100644
--- a/ansible/inventories/test/host_vars/custos/vars.yml
+++ b/ansible/inventories/test/host_vars/custos/vars.yml
@@ -21,5 +21,4 @@
 ---
 pkcs12_filename: 'custos-client-truststore.pkcs12'
 pkcs12_passphrase:
-#ansible_ssh_password: "{{ custos_ssh_password }}"
 nginx_site_config: site.conf.j2
\ No newline at end of file
diff --git a/ansible/inventories/test/host_vars/hashicorp/vars.yml b/ansible/inventories/test/host_vars/hashicorp/vars.yml
index fa4ccc70b..df45e25b3 100644
--- a/ansible/inventories/test/host_vars/hashicorp/vars.yml
+++ b/ansible/inventories/test/host_vars/hashicorp/vars.yml
@@ -21,5 +21,4 @@
 ---
 pkcs12_filename: 'vault-client-truststore.pkcs12'
 pkcs12_passphrase: "{{ hashicorp_pkcs12_passphrase }}"
-#ansible_ssh_password: "{{ hashicorp_ssh_password }}"
 nginx_site_config: site.conf.j2
\ No newline at end of file
diff --git a/ansible/inventories/test/host_vars/keycloak/vars.yml b/ansible/inventories/test/host_vars/keycloak/vars.yml
index d7358545e..30c06a724 100644
--- a/ansible/inventories/test/host_vars/keycloak/vars.yml
+++ b/ansible/inventories/test/host_vars/keycloak/vars.yml
@@ -21,5 +21,4 @@
 ---
 pkcs12_filename: 'keycloak-client-truststore.pkcs12'
 pkcs12_passphrase: "{{ keycloak_pkcs12_passphrase }}"
-#ansible_ssh_password: "{{ keycloak_ssh_password }}"
 nginx_site_config: "{{ ansible_host }}.j2"
\ No newline at end of file
diff --git a/ansible/inventories/test/host_vars/testcustos/vars.yml b/ansible/inventories/test/host_vars/testcustos/vars.yml
deleted file mode 100644
index 2475b7f81..000000000
--- a/ansible/inventories/test/host_vars/testcustos/vars.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
----
-domain: testcustos-ub20.com
-ansible_ssh_password:
-  !vault |
-  $ANSIBLE_VAULT;1.1;AES256
-  63353537323261646536313439313664393466616161373836346462386638376532636230356531
-  3133326663666630323332666238366534353039303838390a643233393131323165303034653333
-  30633362376530363330616132306230313939386430336135333131363437326131343032363039
-  3636626562373463380a343464636437393536653931343664313630363663626536343232393936
-  32376561636334396264666336336432666465626234333163326536386336613165313336373265
-  64663931643462623634363438333839396666356464323931376164373333633866623632323163
-  623132306164346131313066613337316133
\ No newline at end of file
diff --git a/ansible/inventories/test/hosts.yml b/ansible/inventories/test/hosts.yml
index 0e90bd075..97f7fb4f5 100644
--- a/ansible/inventories/test/hosts.yml
+++ b/ansible/inventories/test/hosts.yml
@@ -24,15 +24,15 @@ all:
     custos:
       ansible_host: bm-dev-1.usecustos.org
       ansible_user: exouser
-      ansible_ssh_pass: "{{ ansible_ssh_password }}"
+      ansible_ssh_pass: "{{ custos_ssh_password }}"
     keycloak:
       ansible_host: bm-dev-2.usecustos.org
       ansible_user: exouser
-      ansible_ssh_pass: "{{ ansible_ssh_password }}"
+      ansible_ssh_pass: "{{ keycloak_ssh_password }}"
     hashicorp:
       ansible_host: bm-dev-3.usecustos.org
       ansible_user: exouser
-      ansible_ssh_pass: "{{ ansible_ssh_password }}"
+      ansible_ssh_pass: "{{ hashicorp_ssh_password }}"
     old_custos:
       ansible_host: dev.custos.usecustos.org
       ansible_user: ubuntu