From 5311cf9f94a071e71a66ee38b43f21e9842d7b7b Mon Sep 17 00:00:00 2001
From: Mathieu Leguay <mathieu.leguay@teamdlab.com>
Date: Sat, 9 May 2020 21:17:22 +0200
Subject: [PATCH] [WIP]

---
 .../group_vars/all/vitamui_vars.yml           |  6 +++---
 .../environments/vitamui_extra_vars.yml       |  2 --
 .../roles/mongo_init/tasks/check_auth.yml     |  2 +-
 .../roles/mongo_init/tasks/execute_script.yml | 12 +++++------
 deployment/roles/mongo_init/tasks/main.yml    | 21 ++++++++++++++++---
 .../templates/cas-server/application.yml.j2   |  2 +-
 .../templates/iam-external/application.yml.j2 |  2 +-
 .../templates/iam-internal/application.yml.j2 |  2 +-
 .../iam-internal/server-identity.conf.j2      |  2 +-
 .../security-internal/application.yml.j2      |  2 +-
 .../ui-identity-admin/application.yml.j2      |  2 +-
 .../templates/ui-identity/application.yml.j2  |  2 +-
 .../templates/ui-portal/application.yml.j2    |  2 +-
 tools/docker/mongo/hosts                      |  9 ++++++++
 tools/docker/mongo/mongo_vars_dev.yml         |  2 ++
 15 files changed, 47 insertions(+), 23 deletions(-)

diff --git a/deployment/environments/group_vars/all/vitamui_vars.yml b/deployment/environments/group_vars/all/vitamui_vars.yml
index 1e47dbe9..b03e875e 100755
--- a/deployment/environments/group_vars/all/vitamui_vars.yml
+++ b/deployment/environments/group_vars/all/vitamui_vars.yml
@@ -1,7 +1,7 @@
 ---
 
 single_vm_hostnames: ['localhost']
-vitamui_env_name: "{{ vitam_site_name }}"
+vitamui_site_name: "{{ vitam_site_name }}"
 
 pki_dir: "{{ inventory_dir }}/certs"
 
@@ -193,5 +193,5 @@ mongodb:
   included_scripts:
     - ".*"
   excluded_scripts:
-    - ".*_dev.js"
-    - ".*_demo.js"
+    - ".*_dev.js.*"
+    - ".*_demo.js.*"
diff --git a/deployment/environments/vitamui_extra_vars.yml b/deployment/environments/vitamui_extra_vars.yml
index 44232384..63816ad9 100644
--- a/deployment/environments/vitamui_extra_vars.yml
+++ b/deployment/environments/vitamui_extra_vars.yml
@@ -6,8 +6,6 @@ url_prefix: "changeme"
 
 ###
 # consul_vars.yml overload
-vitamui_site_name: "changeme"
-
 consul_remote_sites:
     - vitamui:
       name: "changeme"
diff --git a/deployment/roles/mongo_init/tasks/check_auth.yml b/deployment/roles/mongo_init/tasks/check_auth.yml
index 95e7b2d8..2afac0e3 100644
--- a/deployment/roles/mongo_init/tasks/check_auth.yml
+++ b/deployment/roles/mongo_init/tasks/check_auth.yml
@@ -1,7 +1,7 @@
 ---
 
 - name: Check if authent is enabled
-  command: "mongo {{ ip_service }}:{{ mongodb.mongod_port }}/admin -u {{ mongodb.localadmin.user }} -p {{ mongodb.localadmin.password }} --quiet --eval 'db.help()'"
+  command: "mongo --host {{ mongod_uri }}/admin -u {{ mongodb.localadmin.user }} -p {{ mongodb.localadmin.password }} --quiet --eval 'db.help()'"
   register: mongo_authent_enabled
   failed_when: false
   no_log: "{{ hide_passwords_during_deploy }}"
diff --git a/deployment/roles/mongo_init/tasks/execute_script.yml b/deployment/roles/mongo_init/tasks/execute_script.yml
index 38e1f136..03ec476f 100644
--- a/deployment/roles/mongo_init/tasks/execute_script.yml
+++ b/deployment/roles/mongo_init/tasks/execute_script.yml
@@ -18,7 +18,7 @@
 - block:
 
   - name: Check if the script has already been executed
-    shell: "mongo {{ ip_service }}:{{ mongodb.mongod_port }}/versioning {{ mongo_credentials }} --quiet --eval \"db.changelog.find({filename: '{{ mongo_file.finalname }}', checksum: '{{ stat_result.stat.checksum}}'});\""
+    shell: "mongo \"mongodb://{{ mongod_uri }}/admin\" {{ mongo_credentials }} --quiet --eval \"db.changelog.find({filename: '{{ mongo_file.finalname }}', checksum: '{{ stat_result.stat.checksum}}'});\""
     no_log: "{{ hide_passwords_during_deploy }}"
     register: mongo_versionning_result
 
@@ -28,12 +28,12 @@
 
   - block:
       - name: Load script in database
-        shell: "mongo {{ ip_service }}:{{ mongodb.mongod_port }}/admin {{ mongo_credentials }} {{ mongod_output_dir_entry_point }}/{{ mongo_file.finalname }}"
+        shell: "mongo \"mongodb://{{ mongod_uri }}/admin\" {{ mongo_credentials }} {{ mongod_output_dir_entry_point }}/{{ mongo_file.finalname }}"
         no_log: "{{ hide_passwords_during_deploy }}"
         when: mock_insert_data is not defined
       
       - name: Update changelog
-        shell: "mongo {{ ip_service }}:{{ mongodb.mongod_port }}/versioning {{ mongo_credentials }} --eval \"db.changelog.insertOne({filename: '{{ mongo_file.finalname }}', date: new Date(), version: '{{ mongo_file.version }}', checksum: '{{ stat_result.stat.checksum}}'});\""
+        shell: "mongo \"mongodb://{{ mongod_uri }}/versioning\" {{ mongo_credentials }} --eval \"db.changelog.insertOne({filename: '{{ mongo_file.finalname }}', date: new Date(), version: '{{ mongo_file.version }}', checksum: '{{ stat_result.stat.checksum}}'});\""
         no_log: "{{ hide_passwords_during_deploy }}"
     when: 
       - "'_id' not in mongo_versionning_result.stdout"
@@ -42,7 +42,7 @@
 
 - block:
   - name: Check if the script has already been executed (docker)
-    shell: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo {{ ip_service }}:{{ mongodb.mongod_port }}/versioning {{ mongo_credentials }} --quiet --eval \\\"db.changelog.find({filename: '{{ mongo_file.finalname }}', checksum: '{{ stat_result.stat.checksum}}'});\\\"\""
+    shell: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo \\\"mongodb://{{ mongod_uri }}/versioning\\\" {{ mongo_credentials }} --quiet --eval \\\"db.changelog.find({filename: '{{ mongo_file.finalname }}', checksum: '{{ stat_result.stat.checksum}}'});\\\"\""
     no_log: "{{ hide_passwords_during_deploy }}"
     register: mongo_versionning_result
 
@@ -52,12 +52,12 @@
 
   - block:
     - name: Load script in database (docker)
-      command: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo {{ ip_service }}:{{ mongodb.mongod_port }}/admin {{ mongo_credentials }} {{ mongodb.docker.internal_dir}}/app/mongod/{{ mongo_file.finalname }}\""
+      command: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo \\\"mongodb://{{ mongod_uri }}/admin\\\" {{ mongo_credentials }} {{ mongodb.docker.internal_dir}}/app/mongod/{{ mongo_file.finalname }}\""
       no_log: "{{ hide_passwords_during_deploy }}"
       when: mock_insert_data is not defined
 
     - name: Update changelog (docker)
-      shell: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo {{ ip_service }}:{{ mongodb.mongod_port }}/versioning {{ mongo_credentials }} --quiet --eval \\\"db.changelog.insertOne({filename: '{{ mongo_file.finalname }}', date: new Date(), version: '{{ mongo_file.version }}', checksum: '{{ stat_result.stat.checksum}}'});\\\"\""
+      shell: "docker exec --tty vitamui-mongo /bin/bash -c \"mongo \\\"mongodb://{{ mongod_uri }}/versioning\\\" {{ mongo_credentials }} --quiet --eval \\\"db.changelog.insertOne({filename: '{{ mongo_file.finalname }}', date: new Date(), version: '{{ mongo_file.version }}', checksum: '{{ stat_result.stat.checksum}}'});\\\"\""
       no_log: "{{ hide_passwords_during_deploy }}"
 
     when: 
diff --git a/deployment/roles/mongo_init/tasks/main.yml b/deployment/roles/mongo_init/tasks/main.yml
index 67c70501..36d383de 100644
--- a/deployment/roles/mongo_init/tasks/main.yml
+++ b/deployment/roles/mongo_init/tasks/main.yml
@@ -3,6 +3,15 @@
 - fail: msg="Variable '{{ mongod_source_template_dir }}' is not defined"
   when: mongod_source_template_dir is undefined
 
+- name: Compute list of mongo nodes
+  set_fact:
+    mongo_nodes: "{{ mongo_nodes | default([]) + [ hostvars[item]['ip_service'] + ':'+ mongodb.mongod_port | string ] }}"
+  loop: "{{ groups['hosts_vitamui_mongod'] }}"
+
+- name: Set Mongo URI
+  set_fact:
+    mongod_uri: "{{ mongo_nodes| join(',') }}"
+
 - name: Set mongod_output_dir_entry_point
   set_fact:
     mongod_output_dir_entry_point: "{{ vitamui_defaults.folder.root_path }}/app/mongod/"
@@ -43,16 +52,22 @@
   loop: "{{ output.results }}"
 
 # We apply regex for included and excludes files in order to compute the eligible scripts.
-- name: Compute list of eligibles files
+- name: Compute list of excluded files
   delegate_to: localhost
   set_fact:
-    mongod_eligible_files : "{{ (mongod_eligible_files| default([])) + [ {'name': item.0, 'version': item.0 | regex_replace('^(.+)/(.+)$', '\\1') ,'finalname': item.0 | regex_replace('/', '_') | basename | regex_replace('\\.j2$')} ] }}"
-  when: item.0 is match(item.1) and item.0 is not match(item.2)
+    mongod_excluded_files : "{{ (mongod_excluded_files| default([])) + [ item.0 ] }}"
+  when: item.0 is not match(item.1) or item.0 is match(item.2)
   with_nested: 
     - "{{ mongod_files }}"
     - "{{ mongodb.included_scripts }}"
     - "{{ mongodb.excluded_scripts }}"
 
+- name: Compute list of eligible files
+  delegate_to: localhost
+  set_fact:
+    mongod_eligible_files : "{{ (mongod_eligible_files| default([])) + [ {'name': item, 'version': item | regex_replace('^(.+)/(.+)$', '\\1') ,'finalname': item | regex_replace('/', '_') | basename | regex_replace('\\.j2$')} ] }}"
+  loop: "{{ mongod_files | difference(mongod_excluded_files| default([])) }}"
+
 # We generate scripts and upload on remote host
 - name: Compute and copy script files
   template:
diff --git a/deployment/roles/vitamui/templates/cas-server/application.yml.j2 b/deployment/roles/vitamui/templates/cas-server/application.yml.j2
index 17af8b7d..21fa8aeb 100644
--- a/deployment/roles/vitamui/templates/cas-server/application.yml.j2
+++ b/deployment/roles/vitamui/templates/cas-server/application.yml.j2
@@ -152,7 +152,7 @@ ip.header: X-Real-IP
 
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/iam-external/application.yml.j2 b/deployment/roles/vitamui/templates/iam-external/application.yml.j2
index 2acafe48..2999083e 100644
--- a/deployment/roles/vitamui/templates/iam-external/application.yml.j2
+++ b/deployment/roles/vitamui/templates/iam-external/application.yml.j2
@@ -36,7 +36,7 @@ management:
       enabled: false
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/iam-internal/application.yml.j2 b/deployment/roles/vitamui/templates/iam-internal/application.yml.j2
index 3ec4daa4..55e4be4a 100644
--- a/deployment/roles/vitamui/templates/iam-internal/application.yml.j2
+++ b/deployment/roles/vitamui/templates/iam-internal/application.yml.j2
@@ -39,7 +39,7 @@ management:
       enabled: false
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/iam-internal/server-identity.conf.j2 b/deployment/roles/vitamui/templates/iam-internal/server-identity.conf.j2
index 89f7a25e..efe35400 100644
--- a/deployment/roles/vitamui/templates/iam-internal/server-identity.conf.j2
+++ b/deployment/roles/vitamui/templates/iam-internal/server-identity.conf.j2
@@ -1,3 +1,3 @@
-identityName: {{ vitamui_env_name }}
+identityName: {{ vitamui_site_name }}
 identityRole: {{ vitamui_struct.vitamui_component }}
 identitySiteId: 1
diff --git a/deployment/roles/vitamui/templates/security-internal/application.yml.j2 b/deployment/roles/vitamui/templates/security-internal/application.yml.j2
index ee5e77b8..b462b4a0 100644
--- a/deployment/roles/vitamui/templates/security-internal/application.yml.j2
+++ b/deployment/roles/vitamui/templates/security-internal/application.yml.j2
@@ -12,7 +12,7 @@ spring:
 
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/ui-identity-admin/application.yml.j2 b/deployment/roles/vitamui/templates/ui-identity-admin/application.yml.j2
index 05670dca..be35acaf 100644
--- a/deployment/roles/vitamui/templates/ui-identity-admin/application.yml.j2
+++ b/deployment/roles/vitamui/templates/ui-identity-admin/application.yml.j2
@@ -41,7 +41,7 @@ logging:
     config: {{ vitamui_folder_conf }}/logback.xml
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/ui-identity/application.yml.j2 b/deployment/roles/vitamui/templates/ui-identity/application.yml.j2
index 9c086100..a2000f3c 100644
--- a/deployment/roles/vitamui/templates/ui-identity/application.yml.j2
+++ b/deployment/roles/vitamui/templates/ui-identity/application.yml.j2
@@ -38,7 +38,7 @@ logging:
     config: {{ vitamui_folder_conf }}/logback.xml
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/deployment/roles/vitamui/templates/ui-portal/application.yml.j2 b/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
index f8c3f4bd..6b78242b 100644
--- a/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
+++ b/deployment/roles/vitamui/templates/ui-portal/application.yml.j2
@@ -34,7 +34,7 @@ logging:
     config: {{ vitamui_folder_conf }}/logback.xml
 
 server-identity:
-  identityName: {{ vitamui_env_name }}
+  identityName: {{ vitamui_site_name }}
   identityRole: {{ vitamui_struct.vitamui_component }}
   identityServerId: 1
 
diff --git a/tools/docker/mongo/hosts b/tools/docker/mongo/hosts
index 0a82a3b9..ba3e1445 100644
--- a/tools/docker/mongo/hosts
+++ b/tools/docker/mongo/hosts
@@ -54,4 +54,13 @@ localhost
 hosts_cas_server
 
 [hosts_cas_server]
+localhost
+
+########################################################
+# ZONE DATA
+########################################################
+[zone_vitamui_data:children]
+hosts_vitamui_mongod
+
+[hosts_vitamui_mongod]
 localhost
\ No newline at end of file
diff --git a/tools/docker/mongo/mongo_vars_dev.yml b/tools/docker/mongo/mongo_vars_dev.yml
index 2cdd2d96..0fbcb2ee 100644
--- a/tools/docker/mongo/mongo_vars_dev.yml
+++ b/tools/docker/mongo/mongo_vars_dev.yml
@@ -53,6 +53,8 @@ mongodb:
       password: "mongod_dbpwd_versioning"
       roles: '[{ role: "readWrite", db: "versioning" }]'
 
+mongod_replicaset_name: "rs0"
+
 url_prefix: ""
 
 # Variables for users
-- 
GitLab