From 4cb2eb697fa2a75cc1901c44b8b37d5db341f779 Mon Sep 17 00:00:00 2001
From: David Mehren <git@herrmehren.de>
Date: Sun, 17 Jan 2021 14:05:12 +0100
Subject: [PATCH] Add connection validation and setup DB before using it

---
 tasks/main.yml | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/tasks/main.yml b/tasks/main.yml
index a070c62..093a0a8 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -1,10 +1,4 @@
 ---
-- name: Gather facts about db host
-  gather_facts:
-  delegate_to: "{{ keycloak_pgdb_host }}"
-  delegate_facts: True
-  when: "'ansible_default_ipv4' not in hostvars[keycloak_pgdb_host]"
-
 - name: Import Azul public key (for Zulu JRE)
   apt_key:
     id: B1998361219BD9C9
@@ -107,6 +101,15 @@
   notify: restart keycloak
   when: keycloak_postgresql_module_installed.count == 0
 
+- name: Create user and db on server
+  import_role:
+    name: postgresql_client
+  vars:
+    db_user:
+      name: "{{ keycloak_pgdb_user }}"
+      password: "{{ keycloak_pgdb_pass }}"
+    db_host: "{{ keycloak_pgdb_host }}"
+
 - name: Add postgresql config in JBoss
   xml:
     path: "{{ keycloak_jboss_home }}/standalone/configuration/standalone.xml"
@@ -116,6 +119,12 @@
       - <driver>postgresql</driver>
       - <pool><max-pool-size>10</max-pool-size></pool>
       - "<security><user-name>{{ keycloak_pgdb_user }}</user-name><password>{{ keycloak_pgdb_pass }}</password></security>"
+      - <validation>
+        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker>
+        <validate-on-match>true</validate-on-match>
+        <background-validation>false</background-validation>
+        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
+        </validation>
     input_type: xml
     namespaces:
       x: urn:jboss:domain:10.0
@@ -133,15 +142,6 @@
       y: urn:jboss:domain:undertow:10.0
   notify: restart keycloak
 
-- name: Create user and db on server
-  import_role:
-    name: postgresql_client
-  vars:
-    db_user:
-      name: "{{ keycloak_pgdb_user }}"
-      password: "{{ keycloak_pgdb_pass }}"
-    db_host: "{{ keycloak_pgdb_host }}"
-
 - name: Install systemd unit file
   template:
     src: keycloak.service.j2
-- 
GitLab