mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-12-12 12:16:06 +00:00
Refactored web-app-keycloak
This commit is contained in:
22
roles/web-app-keycloak/tasks/05_login.yml
Normal file
22
roles/web-app-keycloak/tasks/05_login.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
- name: "Wait until '{{ KEYCLOAK_CONTAINER }}' container is healthy"
|
||||||
|
community.docker.docker_container_info:
|
||||||
|
name: "{{ KEYCLOAK_CONTAINER }}"
|
||||||
|
register: kc_info
|
||||||
|
retries: 60
|
||||||
|
delay: 5
|
||||||
|
until: >
|
||||||
|
kc_info is succeeded and
|
||||||
|
(kc_info.container | default({})) != {} and
|
||||||
|
(kc_info.container.State | default({})) != {} and
|
||||||
|
(kc_info.container.State.Health | default({})) != {} and
|
||||||
|
(kc_info.container.State.Health.Status | default('')) == 'healthy'
|
||||||
|
|
||||||
|
- name: kcadm login (master)
|
||||||
|
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
||||||
|
shell: >
|
||||||
|
{{ KEYCLOAK_EXEC_KCADM }} config credentials
|
||||||
|
--server {{ KEYCLOAK_SERVER_INTERNAL_URL }}
|
||||||
|
--realm master
|
||||||
|
--user {{ KEYCLOAK_MASTER_API_USER_NAME }}
|
||||||
|
--password {{ KEYCLOAK_MASTER_API_USER_PASSWORD }}
|
||||||
|
changed_when: false
|
||||||
@@ -13,82 +13,18 @@
|
|||||||
include_tasks: 04_dependencies.yml
|
include_tasks: 04_dependencies.yml
|
||||||
when: KEYCLOAK_LOAD_DEPENDENCIES | bool
|
when: KEYCLOAK_LOAD_DEPENDENCIES | bool
|
||||||
|
|
||||||
- name: "Wait until '{{ KEYCLOAK_CONTAINER }}' container is healthy"
|
- name: "Load Login routines for '{{ application_id }}'"
|
||||||
community.docker.docker_container_info:
|
include_tasks: 05_login.yml
|
||||||
name: "{{ KEYCLOAK_CONTAINER }}"
|
|
||||||
register: kc_info
|
|
||||||
retries: 60
|
|
||||||
delay: 5
|
|
||||||
until: >
|
|
||||||
kc_info is succeeded and
|
|
||||||
(kc_info.container | default({})) != {} and
|
|
||||||
(kc_info.container.State | default({})) != {} and
|
|
||||||
(kc_info.container.State.Health | default({})) != {} and
|
|
||||||
(kc_info.container.State.Health.Status | default('')) == 'healthy'
|
|
||||||
|
|
||||||
- name: kcadm login (master)
|
- name: "Load Client Update routines for '{{ application_id }}'"
|
||||||
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
include_tasks: update/01_client.yml
|
||||||
shell: >
|
|
||||||
{{ KEYCLOAK_EXEC_KCADM }} config credentials
|
|
||||||
--server {{ KEYCLOAK_SERVER_INTERNAL_URL }}
|
|
||||||
--realm master
|
|
||||||
--user {{ KEYCLOAK_MASTER_API_USER_NAME }}
|
|
||||||
--password {{ KEYCLOAK_MASTER_API_USER_PASSWORD }}
|
|
||||||
changed_when: false
|
|
||||||
|
|
||||||
- name: "Update Client settings"
|
- name: "Load Mail Update routines for '{{ application_id }}'"
|
||||||
vars:
|
include_tasks: update/02_mail.yml
|
||||||
kc_object_kind: "client"
|
|
||||||
kc_lookup_value: "{{ KEYCLOAK_CLIENT_ID }}"
|
|
||||||
kc_desired: >-
|
|
||||||
{{
|
|
||||||
KEYCLOAK_DICTIONARY_REALM.clients
|
|
||||||
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
|
||||||
| list | first
|
|
||||||
}}
|
|
||||||
kc_force_attrs:
|
|
||||||
publicClient: >-
|
|
||||||
{{
|
|
||||||
(KEYCLOAK_DICTIONARY_REALM.clients
|
|
||||||
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
|
||||||
| map(attribute='publicClient')
|
|
||||||
| first)
|
|
||||||
}}
|
|
||||||
serviceAccountsEnabled: >-
|
|
||||||
{{
|
|
||||||
(KEYCLOAK_DICTIONARY_REALM.clients
|
|
||||||
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
|
||||||
| map(attribute='serviceAccountsEnabled')
|
|
||||||
| first )
|
|
||||||
}}
|
|
||||||
frontchannelLogout: >-
|
|
||||||
{{
|
|
||||||
(KEYCLOAK_DICTIONARY_REALM.clients
|
|
||||||
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
|
||||||
| map(attribute='frontchannelLogout')
|
|
||||||
| first)
|
|
||||||
}}
|
|
||||||
attributes: >-
|
|
||||||
{{
|
|
||||||
( (KEYCLOAK_DICTIONARY_REALM.clients
|
|
||||||
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
|
||||||
| list | first | default({}) ).attributes | default({}) )
|
|
||||||
| combine({'frontchannel.logout.url': KEYCLOAK_FRONTCHANNEL_LOGOUT_URL}, recursive=True)
|
|
||||||
}}
|
|
||||||
include_tasks: _update.yml
|
|
||||||
|
|
||||||
- name: "Update REALM mail settings from realm dictionary (SPOT)"
|
- name: "Load RBAC Update routines for '{{ application_id }}'"
|
||||||
include_tasks: _update.yml
|
include_tasks: update/03_rbac_client_scope.yml
|
||||||
vars:
|
|
||||||
kc_object_kind: "realm"
|
|
||||||
kc_lookup_field: "id"
|
|
||||||
kc_lookup_value: "{{ KEYCLOAK_REALM }}"
|
|
||||||
kc_desired:
|
|
||||||
smtpServer: "{{ KEYCLOAK_DICTIONARY_REALM.smtpServer | default({}, true) }}"
|
|
||||||
kc_merge_path: "smtpServer"
|
|
||||||
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
|
||||||
|
|
||||||
- include_tasks: 05_rbac_client_scope.yml
|
- name: "Load LDAP Update routines for '{{ application_id }}'"
|
||||||
|
include_tasks: update/04_ldap.yml
|
||||||
- include_tasks: 06_ldap.yml
|
|
||||||
when: KEYCLOAK_LDAP_ENABLED | bool
|
when: KEYCLOAK_LDAP_ENABLED | bool
|
||||||
|
|||||||
40
roles/web-app-keycloak/tasks/update/01_client.yml
Normal file
40
roles/web-app-keycloak/tasks/update/01_client.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
- name: "Update Client settings"
|
||||||
|
vars:
|
||||||
|
kc_object_kind: "client"
|
||||||
|
kc_lookup_value: "{{ KEYCLOAK_CLIENT_ID }}"
|
||||||
|
kc_desired: >-
|
||||||
|
{{
|
||||||
|
KEYCLOAK_DICTIONARY_REALM.clients
|
||||||
|
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
||||||
|
| list | first
|
||||||
|
}}
|
||||||
|
kc_force_attrs:
|
||||||
|
publicClient: >-
|
||||||
|
{{
|
||||||
|
(KEYCLOAK_DICTIONARY_REALM.clients
|
||||||
|
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
||||||
|
| map(attribute='publicClient')
|
||||||
|
| first)
|
||||||
|
}}
|
||||||
|
serviceAccountsEnabled: >-
|
||||||
|
{{
|
||||||
|
(KEYCLOAK_DICTIONARY_REALM.clients
|
||||||
|
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
||||||
|
| map(attribute='serviceAccountsEnabled')
|
||||||
|
| first )
|
||||||
|
}}
|
||||||
|
frontchannelLogout: >-
|
||||||
|
{{
|
||||||
|
(KEYCLOAK_DICTIONARY_REALM.clients
|
||||||
|
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
||||||
|
| map(attribute='frontchannelLogout')
|
||||||
|
| first)
|
||||||
|
}}
|
||||||
|
attributes: >-
|
||||||
|
{{
|
||||||
|
( (KEYCLOAK_DICTIONARY_REALM.clients
|
||||||
|
| selectattr('clientId','equalto', KEYCLOAK_CLIENT_ID)
|
||||||
|
| list | first | default({}) ).attributes | default({}) )
|
||||||
|
| combine({'frontchannel.logout.url': KEYCLOAK_FRONTCHANNEL_LOGOUT_URL}, recursive=True)
|
||||||
|
}}
|
||||||
|
include_tasks: _update.yml
|
||||||
10
roles/web-app-keycloak/tasks/update/02_mail.yml
Normal file
10
roles/web-app-keycloak/tasks/update/02_mail.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
- name: "Update REALM mail settings from realm dictionary (SPOT)"
|
||||||
|
include_tasks: _update.yml
|
||||||
|
vars:
|
||||||
|
kc_object_kind: "realm"
|
||||||
|
kc_lookup_field: "id"
|
||||||
|
kc_lookup_value: "{{ KEYCLOAK_REALM }}"
|
||||||
|
kc_desired:
|
||||||
|
smtpServer: "{{ KEYCLOAK_DICTIONARY_REALM.smtpServer | default({}, true) }}"
|
||||||
|
kc_merge_path: "smtpServer"
|
||||||
|
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# --- Ensure RBAC client scope exists (idempotent) ---
|
|
||||||
- name: Ensure RBAC client scope exists
|
- name: Ensure RBAC client scope exists
|
||||||
shell: |
|
shell: |
|
||||||
cat <<'JSON' | {{ KEYCLOAK_EXEC_KCADM }} create client-scopes -r {{ KEYCLOAK_REALM }} -f -
|
cat <<'JSON' | {{ KEYCLOAK_EXEC_KCADM }} create client-scopes -r {{ KEYCLOAK_REALM }} -f -
|
||||||
@@ -16,7 +15,6 @@
|
|||||||
('already exists' not in (create_rbac_scope.stderr | lower))
|
('already exists' not in (create_rbac_scope.stderr | lower))
|
||||||
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
|
||||||
|
|
||||||
# --- Get the scope id we will attach to the client ---
|
|
||||||
- name: Get all client scopes
|
- name: Get all client scopes
|
||||||
shell: "{{ KEYCLOAK_EXEC_KCADM }} get client-scopes -r {{ KEYCLOAK_REALM }} --format json"
|
shell: "{{ KEYCLOAK_EXEC_KCADM }} get client-scopes -r {{ KEYCLOAK_REALM }} --format json"
|
||||||
register: all_scopes
|
register: all_scopes
|
||||||
Reference in New Issue
Block a user