# Check if there is a keycloak directory in the base_path - name: Check for existing keycloak installation find: paths: "{{ keycloak_base_path }}/keycloak-*" file_type: "directory" depth: 1 register: keycloak_existing_installations - name: Checking if there is an existing installation that needs to be updated block: # We need to extract the version of each directory and add them to a list # If so, what is it's version ? ( cut from "keycloak-$version ") - name: Check existing versions from directorie's names set_fact: keycloak_list_of_versions="{{ keycloak_existing_installations.files | map(attribute='path') | regex_search('-([0-9]+\.[0-9]+\.[0-9]+\b)$') | list }}" # Compare such version to the one given - name: Compare every version with the keycloak_version set_fact: keycloak_needs_an_update="keycloak_list_of_versions | version(keycloak_list_of_versions, "<") | reject(false, omit) | list" # If the $old_version < $new_version, we need to update # They may be multi keycloak directories when: keycloak_existing_installations.matched >= 1 - name: Updating if keycloak needs an update block: # Stop the service - name: Stopping the service for the update. become: yes systemd: name: "{{ keycloak_service_name }}" state: stopped # NB: We are installing to a new directory. We don't touch # the old directory. # Backup the database - name: Backing up the of database become: yes shell: mysqldump keycloak > /root/keycloak-backup-$(date --iso).sql # Upgrade the server #- name: Upgrading the server with the new files # This is actually reinstalling the files. when: true in keycloak_needs_an_update - name: Force systemd to reread configs become: yes ansible.builtin.systemd: daemon_reload: yes