DEV-526 added pmci tenant management

qa
Ketelsen, Sven 3 years ago
parent f686073dc8
commit 8e9268ca3b

@ -51,7 +51,7 @@
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'workflow_index', 'workflow_proxy', 'pdns']
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'pdns']
- name: "Add maria servers to hosts if necessary"
add_host:
@ -93,12 +93,6 @@
- role: webdav_postgres
when: "'webdav' in group_names"
- role: workflow_index_postgres
when: "'workflow_index' in group_names"
- role: workflow_proxy_postgres
when: "'workflow_proxy' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"

@ -57,7 +57,7 @@
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['confirm', 'connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'workflow_index', 'workflow_proxy', 'pdns']
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'pdns']
- name: "Add maria servers to hosts if necessary"
add_host:
@ -87,9 +87,6 @@
- always
roles:
- role: confirm_postgres
when: "'confirm' in group_names"
- role: connect_postgres
when: "'connect' in group_names"
@ -112,12 +109,6 @@
- role: webdav_postgres
when: "'webdav' in group_names"
- role: workflow_index_postgres
when: "'workflow_index' in group_names"
- role: workflow_proxy_postgres
when: "'workflow_proxy' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"

@ -77,9 +77,6 @@
- role: gitea_realm
when: '"gitea" in group_names'
- role: workflow_proxy_realm
when: '"workflow-proxy" in group_names'
#############################################################
# Sending smardigo management message to process
#############################################################

@ -1,4 +0,0 @@
---
connect_client_admin_username: "connect-admin"
connect_realm_admin_username: "connect-realm-admin"

@ -24,7 +24,7 @@ prom_prom2teams_version: "3.2.3"
traefik_version: "v2.8.5"
connect_version: "10.4.12"
connect_version: "10.5"
iam_version: "10.0"
webdav_version: "8.4.1"

@ -4,7 +4,7 @@ hetzner_server_type: cx21
connect_client_admin_username: "{{ management_admin_username }}"
connect_client_admin_password: "{{ management_admin_password }}"
connect_workflow_env: "stage:{{ stage }};smardigoUserToken:{{ smardigo_auth_token_value }}"
connect_workflow_env: "baseUrl:{{ connect_base_url }};stage:{{ stage }};smardigoUserToken:{{ smardigo_auth_token_value }}"
connect_oidc_client_secret: "{{ management_oidc_client_secret }}"
connect_config_delete_scope_enabled: true
@ -42,16 +42,14 @@ current_realm_clients: [
}
]
current_realm_users: [
{
"username": "{{ management_admin_username }}",
"password": "{{ management_admin_password }}",
"email": "{{ connect_admin_email }}",
"requiredActions": []
}
]
current_realm_admin_user:
username: "{{ management_realm_admin_username }}"
current_realm_users:
- username: "{{ management_admin_username }}"
password: "{{ management_admin_password }}"
email: "{{ connect_admin_email }}"
requiredActions: []
current_realm_admin_users:
- username: "{{ management_realm_admin_username }}"
password: "{{ management_realm_admin_password }}"
email: "{{ connect_admin_email }}"
requiredActions: []

@ -1,3 +1,3 @@
---
awx_hetzner_ansible_revision: "main"
awx_hetzner_ansible_revision: "feature/DEV-526"

@ -1,9 +1,9 @@
---
# Parameters:
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
# stage := name of the stage (e.g. dev, int, qa, prod)
# scope_id := scope id from management process
# process_instance_id := process instance id from management process
#############################################################
# Sending smardigo management message to process

@ -0,0 +1,94 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# custom_backup_name :=
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least {{ ansible_minimal_version }}"
assert:
that:
- ansible_version.string is version(ansible_minimal_version, ">=")
msg: "The ansible version has to be at least {{ ansible_minimal_version }}"
# add virtual server to load stage specific variables as context
- name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
add_host:
name: "{{ stage }}-virtual-host-to-read-groups-vars"
groups:
- "stage_{{ stage }}"
changed_when: False
tasks:
- name: "Add postgres servers to hosts if necessary"
add_host:
name: "{{ stage }}-postgres-01"
groups:
- "stage_{{ stage }}"
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect']
- name: "Add maria servers to hosts if necessary"
add_host:
name: "{{ stage }}-maria-01"
groups:
- "stage_{{ stage }}"
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect_wordpress']
#############################################################
# Creating database backups for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
database_backup_state: dump
ansible_ssh_host: "{{ stage_server_domain }}"
roles:
- role: connect_postgres
when: "'connect' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
run_once: true
vars:
connect_jwt_username: "{{ management_admin_username }}"
tasks:
- name: "Sending smardigo management message to <{{ shared_service_url_management }}>"
include_tasks: tasks/smardigo_management_message.yml

@ -0,0 +1,90 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least {{ ansible_minimal_version }}"
assert:
that:
- ansible_version.string is version(ansible_minimal_version, ">=")
msg: "The ansible version has to be at least {{ ansible_minimal_version }}"
# add virtual server to load stage specific variables as context
- name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
add_host:
name: "{{ stage }}-virtual-host-to-read-groups-vars"
groups:
- "stage_{{ stage }}"
changed_when: False
tasks:
- name: Add maria servers to hosts if necessary
add_host:
name: "{{ stage }}-maria-01"
groups:
- "stage_{{ stage }}"
- "{{ item }}"
changed_when: False
with_items: "{{ cluster.features }}"
when: item in ['connect_wordpress']
#############################################################
# Importing database backups for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
database_backup_file: "{{ data.database.backup_file }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: import_maria_database
when:
- "'connect_wordpress' in group_names"
- "target_database is defined"
- "database_backup_file is defined"
- role: import_maria_database
vars:
target_database: "{{ connect_wordpress_maria_database }}"
when:
- "'connect_wordpress' in group_names"
- "database_backup_file is defined"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,84 @@
---
# restores a database backup
# - postgres
# - executed on stage specific server: {{ stage }}-postgres-01
# - restores a database backup
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant_id := (unique key for the tenant, e.g. customer)
# cluster_name := (business name for the cluster, e.g. product, department )
# cluster_service := (service to setup, e.g. 'connect', ...)
# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...])
# custom_backup_name := defines a substring for backup file => {{ stage }}_{{ tenant_id }}_{{ cluster_name }}_{{ cluster_service }}__gehtdichnixan.sql
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least {{ ansible_minimal_version }}"
assert:
that:
- ansible_version.string is version(ansible_minimal_version, ">=")
msg: "The ansible version has to be at least {{ ansible_minimal_version }}"
# add virtual server to load stage specific variables as context
- name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
add_host:
name: "{{ stage }}-virtual-host-to-read-groups-vars"
groups:
- "stage_{{ stage }}"
changed_when: False
tasks:
- name: "Add postgres servers to hosts if necessary"
add_host:
name: "{{ stage }}-postgres-01"
groups:
- "stage_{{ stage }}"
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'pdns']
#############################################################
# Restoring databases for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
database_backup_state: restore
ansible_ssh_host: "{{ stage_server_domain }}"
roles:
- role: connect_postgres
when: "'connect' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
run_once: true
vars:
connect_jwt_username: "{{ management_admin_username }}"
tasks:
- name: "Sending smardigo management message to <{{ shared_service_url_management }}>"
include_tasks: tasks/smardigo_management_message.yml

@ -0,0 +1,63 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-database.yml
#############################################################
# Creating databases for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: connect_postgres
when: "'connect' in group_names"
- role: gitea_postgres
when: "'gitea' in group_names"
- role: keycloak_postgres
when: "'keycloak' in group_names"
- role: webdav_postgres
when: "'webdav' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,64 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-database.yml
#############################################################
# Deleting databases for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
database_state: absent
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: connect_postgres
when: "'connect' in group_names"
- role: gitea_postgres
when: "'gitea' in group_names"
- role: keycloak_postgres
when: "'keycloak' in group_names"
- role: webdav_postgres
when: "'webdav' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -5,9 +5,11 @@
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# key :=
# size :=
# service :=
# features :=
# data := object with action specific data (optional)
# ...
@ -51,7 +53,7 @@
- name: "Add hosts for given cluster"
add_host:
name: "{{ stage }}-{{ tenant.key }}-{{ cluster.key }}-{{ '%02d' | format(item|int) }}"
groups: "{{ ['stage_' + stage ] + [cluster.service] + cluster.features }}"
groups: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}"
with_sequence: start=1 end={{ cluster.size | default(1) }}
changed_when: False
when:

@ -0,0 +1,58 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# cluster := object with cluster specific data (optional)
# key :=
# size :=
# service :=
# features :=
# data := object with action specific data (optional)
# ...
#############################################################
# Creating inventory dynamically for given cluster
#############################################################
- hosts: localhost
gather_facts: false
connection: local
pre_tasks:
- name: "Check if ansible version is at least {{ ansible_minimal_version }}"
assert:
that:
- ansible_version.string is version(ansible_minimal_version, ">=")
msg: "The ansible version has to be at least {{ ansible_minimal_version }}"
# add virtual server to load stage specific variables as context
- name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
add_host:
name: "{{ stage }}-virtual-host-to-read-groups-vars"
groups:
- "stage_{{ stage }}"
changed_when: False
tasks:
- name: "Add postgres servers to hosts if necessary"
add_host:
name: "{{ stage }}-postgres-01"
groups:
- "{{ item }}"
- "stage_{{ stage }}"
changed_when: False
with_items: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}"
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'pdns']
- name: "Add maria servers to hosts if necessary"
add_host:
name: "{{ stage }}-maria-01"
groups:
- "{{ item }}"
- "stage_{{ stage }}"
changed_when: False
with_items: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}"
when: item in ['connect_wordpress']

@ -0,0 +1,169 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Running the PMCI roles
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: no
remote_user: root
vars:
ansible_connection: local
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
cluster_service: "{{ cluster.service }}"
elastic_state: present
elastic_users:
-
username: '{{ stage }}-{{ tenant_id }}'
roles:
- '{{ stage }}-{{ tenant_id }}'
full_name: ''
password: '{{ password | default( stage + "-" + tenant_id ) }}'
email: '{{ email | default("") }}'
enabled: true
elastic_state: '{{ elastic_state }}'
elastic_roles:
-
elastic_state: '{{ elastic_state }}'
name: '{{ stage }}-{{ tenant_id }}'
elasticsearch:
cluster: []
indices:
- names:
- '{{ stage }}-{{ tenant_id }}-*'
privileges:
- read
- read_cross_cluster
- view_index_metadata
allow_restricted_indices: false
run_as: []
kibana:
- base: []
feature:
advancedSettings:
- all
dashboard:
- all
discover:
- all
indexPatterns:
- all
savedObjectsManagement:
- all
visualize:
- all
spaces:
- '{{ stage }}-{{ tenant_id }}'
elastic_spaces:
-
elastic_state: '{{ elastic_state }}'
id: &es_space_name '{{ stage }}-{{ tenant_id }}'
name: '{{ stage }}-{{ tenant_id }}'
description: ''
disabledFeatures:
- canvas
- maps
- ml
- visualize
- enterpriseSearch
- logs
- infrastructure
- apm
- uptime
- observabilityCases
- siem
- monitoring
- fleet
- stackAlerts
- actions
- osquery
- savedObjectsTagging
es_index_pattern_tenant: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*'
es_index_pattern_services:
- id: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*-{{ cluster_service }}-*"
name: "{{ cluster_service }}"
tasks:
- name: "Do some stuff in elastic with spaces ... "
include_role:
name: kibana
tasks_from: _configure_spaces.yml
apply:
tags:
- es-spaces
loop: "{{ elastic_spaces }}"
loop_control:
loop_var: elastic_space
tags:
- es-spaces
- name: "Do some stuff in elastic with roles ..."
include_role:
name: kibana
tasks_from: _configure_roles.yml
apply:
tags:
- es-roles
loop: "{{ elastic_roles }}"
loop_control:
loop_var: elastic_role
tags:
- es-roles
- name: "Do some stuff in elastic with users ..."
include_role:
name: kibana
tasks_from: _configure_users.yml
apply:
tags:
- es-users
loop: "{{ elastic_users }}"
loop_control:
loop_var: elastic_user
tags:
- es-users
- name: "Do some stuff in elastic with spaces ..."
include_role:
name: kibana
tasks_from: _import_savedobjects.yml
apply:
tags:
- es-importobjects
vars:
es_space: *es_space_name
es_indexpattern_title: '{{ es_indexpattern_name }}'
es_index_pattern_tenant_uuid: '{{ es_index_pattern_tenant | to_uuid }}'
es_panel_uuid: "{{ 'panel_' + es_dashboard_name | to_uuid }}"
tags:
- es-importobjects
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,70 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Add all servers for stage {{ stage }} to inventory"
add_host:
name: "{{ item.name }}"
groups:
- "stage_{{ stage }}"
- "{{ item.service }}"
stage_server_infos: "{{ stage_server_infos }}"
changed_when: False
with_items: "{{ stage_server_infos }}"
#############################################################
# Updating monitoring for all servers
#############################################################
- hosts: "{{ stage }}-prometheus-01"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tasks:
- include_role:
name: prometheus
tasks_from: _update_config
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,60 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Creating realms for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility
connect_client_admin_username: "{{ data.connect.admin.username }}" # legacy paramater, backwards compatibility
connect_client_admin_password: "{{ data.connect.admin.password }}" # legacy paramater, backwards compatibility
connect_wordpress_buergerportal_username: "{{ data.wordpress.admin.username }}" # legacy paramater, backwards compatibility
connect_wordpress_buergerportal_password: "{{ data.wordpress.admin.password }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: connect_realm
when: '"connect" in group_names'
- role: gitea_realm
when: '"gitea" in group_names'
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,56 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Deleting client for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Delete client in realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _delete_client
vars:
realm_name: "{{ current_realm_name }}"
client_name: "{{ cluster_name }}"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,127 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Creating servers for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(5) }}"
gather_facts: false
remote_user: root
pre_tasks:
- name: Get all Firewalls from Hetzner
uri:
url: "https://api.hetzner.cloud/v1/firewalls"
headers:
accept: application/json
authorization: Bearer {{ hetzner_authentication_ansible }}
return_content: yes
register: hetzner_firewalls_response
delegate_to: 127.0.0.1
tags:
- update_networks
- name: Save firewall entries as variable (fact)
set_fact:
hetzner_firewalls_response_json: "{{ hetzner_firewalls_response.json }}"
tags:
- update_networks
- name: Parse firewall entries
set_fact:
firewall_records: "{{ hetzner_firewalls_response_json.firewalls | json_query(jmesquery) }}"
vars:
jmesquery: '[*].{id: id, name: name}'
tags:
- update_networks
- name: Print firewall entries
debug:
msg: "{{ firewall_records }}"
tags:
- update_networks
roles:
- role: hetzner-ansible-hcloud
- role: hetzner-ansible-dns
vars:
record_data: "{{ stage_server_ip }}"
record_name: "{{ inventory_hostname }}"
#############################################################
# Provisioning servers for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
pre_tasks:
- name: Remove outdated dependencies
apt:
name: [
'docker',
'docker-client',
'docker-client-latest',
'docker-common',
'docker-latest',
'docker-latest-logrotate',
'docker-logrotate',
'docker-engine',
'smartmontools',
]
state: 'absent'
when: ansible_distribution == "Ubuntu"
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: ansible-role-docker
when:
- docker_enabled
- role: common
- role: filebeat
when: filebeat_enabled | default(True)
- role: node_exporter
when: node_exporter_enabled | default(True)
- role: traefik
when: traefik_enabled | default(True)
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,51 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Deleting servers/domains for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
gather_facts: false
tasks:
- name: "Delete server <{{ inventory_hostname }}>"
include_role:
name: hetzner-ansible-hcloud
tasks_from: _set_server_state
vars:
- server_state: "absent"
- name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>"
include_role:
name: hetzner-ansible-dns
tasks_from: _remove_dns
vars:
record_to_remove: '{{ inventory_hostname }}'
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,60 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Creating services for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility
connect_version: "{{ data.connect.version }}" # legacy paramater, backwards compatibility
connect_client_admin_username: "{{ data.connect.admin.username }}" # legacy paramater, backwards compatibility
connect_client_admin_password: "{{ data.connect.admin.password }}" # legacy paramater, backwards compatibility
connect_wordpress_buergerportal_username: "{{ data.wordpress.admin.username }}" # legacy paramater, backwards compatibility
connect_wordpress_buergerportal_password: "{{ data.wordpress.admin.password }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: connect
when: "'connect' in group_names"
- role: connect_wordpress
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,64 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# key :=
# name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
#############################################################
# Removing services for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
vars:
ansible_ssh_host: "{{ stage_server_domain }}"
tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility
cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>"
include_role:
name: hetzner-ansible-dns
tasks_from: _remove_dns
vars:
record_to_remove: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01-connect'
when: "'connect' in group_names"
- name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>"
include_role:
name: hetzner-ansible-dns
tasks_from: _remove_dns
vars:
record_to_remove: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01-wordpress'
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,89 @@
---
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant_id := (unique key for the tenant, e.g. customer)
# cluster_name := (business name for the cluster, e.g. product, department )
# cluster_features := (services to setup, e.g. ['connect', 'wordpress', ...])
# service_state := the state of the service (e.g. up, down, upgrade)
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
gather_facts: false
connection: local
pre_tasks:
- name: "Check if ansible version is at least {{ ansible_minimal_version }}"
assert:
that:
- ansible_version.string is version(ansible_minimal_version, ">=")
msg: "The ansible version has to be at least {{ ansible_minimal_version }}"
# add virtual server to load stage specific variables as context
- name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
add_host:
name: "{{ stage }}-virtual-host-to-read-groups-vars"
groups:
- "stage_{{ stage }}"
changed_when: False
tasks:
- name: Add hosts
add_host:
name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}"
groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}"
with_sequence: start=1 end={{ cluster_size | default(1) }}
changed_when: False
#############################################################
# Stopping services for created inventory
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
remote_user: root
vars:
service_state: up
ansible_ssh_host: "{{ stage_server_domain }}"
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
roles:
- role: service_state
vars:
service_id: "{{ connect_id }}"
when: "'connect' in group_names"
- role: service_state
vars:
service_id: "{{ wordpress_id }}"
when: "'connect_wordpress' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################
- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
run_once: true
vars:
connect_jwt_username: "{{ management_admin_username }}"
tasks:
- name: "Sending smardigo management message to <{{ shared_service_url_management }}>"
include_tasks: tasks/smardigo_management_message.yml

@ -0,0 +1,66 @@
---
# Tenant creation
# (keycloak realm)
# (kibana space, user, role)
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# id := uuid used in pmci
# key := unique tenant key
# name := name of the tenant
# admin := teannt admin account
# email :=
# first_name :=
# last_name :=
# data :=
# admin :=
# username :=
# password :=
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
vars:
cluster:
key: pmci
service: 'pmci_tenant_create'
features: []
#############################################################
# Running the PMCI roles
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
vars:
management_realm_name: "management"
management_base_url: "{{ stage }}-management-01-connect.{{ domain }}"
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Creating keycloak realm <{{ tenant.key }}>"
include_role:
name: pmci/tenant/create
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,66 @@
---
# Tenant deletion
# (keycloak realm)
# (kibana space, user, role)
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# id := uuid used in pmci
# key := unique tenant key
# name := name of the tenant
# admin := teannt admin account
# email :=
# first_name :=
# last_name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
vars:
cluster:
key: pmci
service: 'realm'
features: []
#############################################################
# Running the PMCI roles
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
vars:
management_realm_name: "management"
management_base_url: "{{ stage }}-management-01-connect.{{ domain }}"
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Delete keycloak realm <{{ tenant.key }}>"
include_role:
name: pmci/tenant/delete
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,66 @@
---
# Tenant maintenance
# (keycloak realm)
# (kibana space, user, role)
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# id := uuid used in pmci
# key := unique tenant key
# name := name of the tenant
# admin := teannt admin account
# email :=
# first_name :=
# last_name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
vars:
cluster:
key: pmci
service: 'pmci_realm'
features: []
#############################################################
# Running the PMCI roles
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
vars:
management_realm_name: "management"
management_base_url: "{{ stage }}-management-01-connect.{{ domain }}"
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Edit keycloak realm <{{ tenant.key }}>"
include_role:
name: pmci/tenant/edit
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -0,0 +1,68 @@
---
# Tenant maintenance
# (keycloak realm)
# (kibana space, user, role)
# Parameters:
# playbook inventory
# stage := the name of the stage (e.g. dev, int, qa, prod)
# tenant := object with tenant related data
# id := uuid used in pmci
# key := unique tenant key
# name := name of the tenant
# admin := teannt admin account
# email :=
# first_name :=
# last_name :=
# cluster := object with cluster specific data (optional)
# ...
# data := object with action specific data (optional)
# ...
# smardigo message callback
# scope_id := (scope id of the management process)
# process_instance_id := (process instance id of the management process)
# smardigo_management_action := (smardigo management action anme of the management process)
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- import_playbook: pmci-inventory-cluster.yml
vars:
cluster:
key: pmci
service: 'pmci_realm'
features: []
#############################################################
# Running the PMCI roles
#############################################################
- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars"
serial: "{{ serial_number | default(1) }}"
gather_facts: false
connection: local
vars:
management_realm_name: "management"
management_base_url: "{{ stage }}-management-01-connect.{{ domain }}"
sma_management_scope_id: "pmci"
sma_management_role_id: "user"
pre_tasks:
- name: "Import autodiscover pre-tasks"
import_tasks: tasks/autodiscover_pre_tasks.yml
become: false
tags:
- always
tasks:
- name: "Updating assigned tenant ids for each user <{{ tenant.key }}>"
include_role:
name: pmci/tenant/sync
#############################################################
# Sending smardigo management message to process
#############################################################
- import_playbook: pmci-callback.yml

@ -49,7 +49,7 @@
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'workflow_index', 'workflow_proxy', 'pdns']
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'pdns']
- name: Add maria servers to hosts if necessary
add_host:
@ -98,12 +98,6 @@
- role: webdav_postgres
when: "'webdav' in group_names"
- role: workflow_index_postgres
when: "'workflow_index' in group_names"
- role: workflow_proxy_postgres
when: "'workflow_proxy' in group_names"
- role: connect_wordpress_maria
when: "'connect_wordpress' in group_names"

@ -50,7 +50,7 @@
- "{{ item }}"
changed_when: False
with_items: "{{ cluster_features }}"
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea', 'workflow_index', 'workflow_proxy', 'pdns']
when: item in ['connect', 'management_connect', 'keycloak', 'webdav', 'gitea']
#############################################################
# Restoring databases for created inventory
@ -76,12 +76,6 @@
- role: webdav_postgres
when: "'webdav' in group_names"
- role: workflow_index_postgres
when: "'workflow_index' in group_names"
- role: workflow_proxy_postgres
when: "'workflow_proxy' in group_names"
#############################################################
# Sending smardigo management message to process
#############################################################

@ -1,8 +0,0 @@
---
confirm_postgres_database: '{{ stage }}_{{ tenant_id }}_{{ cluster_name }}_confirm'
confirm_postgres_password: 'confirm-postgres-admin'
postgres_acls:
- name: "{{ confirm_postgres_database }}"
password: "{{ confirm_postgres_password }}"
trusted_cidr_entry: "{{ shared_service_network }}"

@ -1,18 +0,0 @@
---
### tags:
- name: "Updating <confirm> database on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _update_database_state
when:
- database_backup_state is not defined
- name: "Creating/Restoring <confirm> database backup on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _create_database_backup.yml
when:
- database_backup_state is defined
- database_backup_state in ['dump', 'restore']

@ -37,8 +37,6 @@ connect_environment: [
"TENANT_ID: \"{{ connect_client_id }}\"",
"SMA_LANGUAGE_CODE: \"{{ connect_language_code | default('de') }}\"",
"ADMIN_LOGIN: \"{{ connect_client_admin_username }}\"",
"ADMIN_PASSWORD: \"{{ connect_client_admin_password }}\"",
"SMA_JWT_ENABLED: \"{{ connect_jwt_enabled | default('false') }}\"",
"SMA_JWT_SECRET: \"{{ connect_jwt_secret | default('') }}\"",
"SMA_CSRF_TOKEN_NAME: \"{{ connect_csrf_token_name | default('') }}\"",
@ -124,6 +122,8 @@ connect_environment: [
"OPENTRACING_JAEGER_HTTP_SENDER_URL: \"{{ connect_opentracing_jaeger_http_sender_url | default() }}\"",
"JDK_JAVA_OPTIONS: \"{{ ( connect_java_options + connect_java_options_default ) | join(' ') }}\"",
"SMA_CUSTOM_SCRIPTING_WHITELIST_FILE: \"/usr/share/smardigo/custom-whitelist\"",
]
connect_docker: {
@ -147,6 +147,7 @@ connect_docker: {
environment: "{{ connect_environment + ( connect_environment_additional | default([])) }}",
volumes: [
'"./certs/ca/ca.crt:/usr/share/smardigo/ca.crt:ro"',
'"./config/custom-whitelist:/usr/share/smardigo/custom-whitelist:ro"',
],
networks: [
'"back-tier"',

@ -1,8 +1,5 @@
---
connect_client_admin_password: "C0nnect-Admin!"
connect_realm_admin_password: "C0nnect-Realm-Admin!"
client_web_origin_connect: "{{ http_s }}://{{ connect_base_url }}"
client_web_origin_wordpress: "{{ http_s }}://{{ wordpress_base_url }}"
client_web_origin_connect_external: "{{ http_s }}://{{ connect_external_subdomain | default('unset') }}.{{ domain }}"
@ -46,9 +43,4 @@ current_realm_users: >-
[{{ current_realm_users_base }}]
{%- endif -%}
current_realm_admin_users: [
{
"username": "{{ connect_realm_admin_username }}",
"password": "{{ connect_realm_admin_password }}",
}
]
current_realm_admin_users: []

@ -18,13 +18,14 @@ current_realm_clients: [
}
]
current_realm_users: [
{
"username": "{{ gitea_admin_username }}",
"password": "{{ gitea_admin_password }}",
"requiredActions": []
}
]
current_realm_admin_user:
username: "{{ gitea_realm_admin_username }}"
current_realm_users:
- username: "{{ gitea_admin_username }}"
password: "{{ gitea_admin_password }}"
email: "{{ gitea_admin_email }}"
requiredActions: []
current_realm_admin_users:
- username: "{{ gitea_realm_admin_username }}"
password: "{{ gitea_realm_admin_password }}"
email: "{{ gitea_admin_email }}"
requiredActions: []

@ -28,26 +28,14 @@ current_realm_groups: [
},
]
current_realm_users: [
{
"username": "{{ harbor_oidc_admin_username }}",
"password": "{{ harbor_oidc_admin_password }}",
"email": "{{ harbor_oidc_admin_email }}",
"requiredActions": []
}
]
current_realm_admin_users: [
{
"username": "{{ harbor_oidc_admin_username }}",
"password": "{{ harbor_oidc_admin_password }}",
"email": "{{ harbor_oidc_admin_email }}",
"requiredActions": []
}
]
current_realm_users:
- username: "{{ harbor_oidc_admin_username }}"
password: "{{ harbor_oidc_admin_password }}"
email: "{{ harbor_oidc_admin_email }}"
requiredActions: []
current_realm_admin_user:
username: "{{ harbor_oidc_admin_username }}"
current_realm_admin_users:
- username: "{{ harbor_oidc_admin_username }}"
password: "{{ harbor_oidc_admin_password }}"
email: "{{ harbor_oidc_admin_email }}"
requiredActions: []

@ -25,20 +25,17 @@ current_realm_clients: [
}
]
current_realm_admin_user:
username: "infrastructure-realm-admin"
password: "{{ infrastructure_realm_admin_password_vault }}"
current_realm_users:
- username: "{{ argocd_admin_username }}"
password: "{{ argocd_admin_password_vault }}"
email: "{{ argocd_admin_email }}"
firstName: "Netgo"
lastName: "Administrator"
requiredActions: []
current_realm_admin_users:
- "{{ current_realm_admin_user }}"
current_realm_users:
- username: "{{ argocd_admin_username }}"
password: "{{ argocd_admin_password_vault }}"
- username: "infrastructure-realm-admin"
password: "{{ infrastructure_realm_admin_password_vault }}"
email: "{{ argocd_admin_email }}"
firstName: "Netgo"
lastName: "Administrator"

@ -1,12 +1,13 @@
---
- name: "Authenticating with keycloak server"
- name: "Authenticating with keycloak server <{{ shared_service_url_keycloak }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_keycloak }}/auth/realms/master/protocol/openid-connect/token"
method: POST
body_format: form-urlencoded
body: 'username={{ keycloak_admin_username }}&password={{ keycloak_admin_password }}&client_id=admin-cli&grant_type=password'
register: keycloak_authentication
become: false
retries: 5
delay: 5
@ -17,6 +18,7 @@
- name: "Printing access_token for keycloak server"
debug:
msg: "{{ access_token }}"
become: false
tags:
- always
when:
- debug

@ -1,5 +1,5 @@
---
- name: "Reading users of realm {{ current_realm_name }}"
- name: "Reading admin users of realm {{ current_realm_name }}"
uri:
url: "{{ shared_service_url_keycloak }}/auth/admin/realms/{{ current_realm_name }}/users"
method: GET
@ -10,7 +10,7 @@
delegate_to: 127.0.0.1
become: false
- name: "Printing realm users"
- name: "Printing realm admin users"
debug:
msg: "{{ realm_users }}"
delegate_to: 127.0.0.1
@ -18,13 +18,13 @@
when:
- debug
- name: "Saving users of realm {{ current_realm_name }} as variable (fact)"
- name: "Saving admin users of realm {{ current_realm_name }} as variable (fact)"
set_fact:
realm_users_json: "{{ realm_users.json }}"
delegate_to: 127.0.0.1
become: false
- name: "Reading user ids of realm {{ current_realm_name }}"
- name: "Reading admin user ids of realm {{ current_realm_name }}"
set_fact:
realm_user_usernames: "{{ realm_users_json | json_query(jmesquery) }}"
vars:
@ -32,7 +32,7 @@
delegate_to: 127.0.0.1
become: false
- name: "Printing usernames of realm {{ current_realm_name }}"
- name: "Printing admin usernames of realm {{ current_realm_name }}"
debug:
msg: "{{ realm_user_usernames }}"
delegate_to: 127.0.0.1
@ -40,7 +40,7 @@
when:
- debug
- name: "Printing usernames for realm {{ current_realm_name }}"
- name: "Printing admin usernames for realm {{ current_realm_name }}"
debug:
msg: "{{ current_realm_admin_users }}"
delegate_to: 127.0.0.1
@ -48,7 +48,7 @@
when:
- debug
- name: "Creating users for realm {{ current_realm_name }}"
- name: "Creating admin users for realm {{ current_realm_name }}"
uri:
url: "{{ shared_service_url_keycloak }}/auth/admin/realms/{{ current_realm_name }}/users"
method: POST
@ -68,3 +68,6 @@
- name: "Adding admin users from realm {{ current_realm_name }}"
include_tasks: _configure_realm_admin_users.yml
loop: "{{ current_realm_admin_users }}"
loop_control:
loop_var: current_realm_admin_user

@ -0,0 +1,11 @@
---
- name: "Deleting keycloak realm <{{ tenant.key }}>"
community.general.keycloak_realm:
auth_client_id: admin-cli
auth_keycloak_url: "{{ shared_service_url_keycloak }}/auth"
auth_realm: master
auth_username: "{{ keycloak_admin_username }}"
auth_password: "{{ keycloak_admin_password }}"
realm: "{{ current_realm_name }}"
state: absent

@ -129,3 +129,4 @@ kibana_technical_users:
typeMeta: "{}"
references: []
elastic_state: present

@ -8,7 +8,6 @@ awx_ansible_password: ansible
# plz move it so separate DIR and do a lookup for all file in $DIR
# not doing it right now due avoiding breaking change within <migrating awx to k8s>
awx_job_templates:
- name: "pmci-empty-playbook"
- name: "create-database"
- name: "create-database-backup"
- name: "create-kibana-objects"

@ -4,7 +4,7 @@
delegate_to: localhost
no_log: true
uri:
url: "{{ awx_base_url }}/api/v2/{{ awx_rest_api_type }}/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/{{ awx_rest_api_type }}/"
method: GET
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"

@ -8,7 +8,7 @@
- name: "Search {{ awx_rest_api_type }} informations for {{ awx_search_name }}"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/v2/{{ awx_rest_api_type }}/?search={{ awx_search_name | urlencode }}"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/{{ awx_rest_api_type }}/?search={{ awx_search_name | urlencode }}"
method: GET
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"

@ -6,7 +6,7 @@
- name: "Get {{ job.name }} job_template credential id's from awx server"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/v2/job_templates/{{ awx_job_template_id }}/credentials"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/job_templates/{{ awx_job_template_id }}/credentials"
method: GET
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -48,7 +48,7 @@
- name: "Add credential id {{ awx_credential_id }} to {{ job.name }} job_template"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/v2/job_templates/{{ awx_job_template_id }}/credentials/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/job_templates/{{ awx_job_template_id }}/credentials/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"

@ -29,7 +29,7 @@
playbook: "{{ job.playbook_file | default(job.name + '.yml') }}"
ask_variables_on_launch: true
uri:
url: "{{ awx_base_url }}/api/v2/job_templates/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/job_templates/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"

@ -0,0 +1,68 @@
---
- name: "Initialize VARs"
set_fact:
awx_job_template_id: "None"
job:
name: "{{ item | regex_replace('^(.*)/pmci-(.*).yml$', 'pmci-\\2') }}"
description: "{{ item | regex_replace('^(.*)/pmci-(.*).yml$', 'pmci-\\2') }}"
changed_when: False
- name: "Search job template {{ job.name }}"
include_tasks: awx-config-get-typ-id.yml
vars:
awx_rest_api_type: job_templates
awx_search_key: name
awx_search_name: "{{ job.name }}"
- name: "Update awx_job_template_id"
set_fact:
awx_job_template_id: "{{ awx_type_id }}"
when:
- (awx_type_id | default(None)) != "None"
- name: "Add job template {{ job.name }}"
delegate_to: localhost
vars:
name: "{{ job.name }}"
description: "{{ job.description | default(job.name) }}"
inventory_id: "{{ awx_localhost_inventory_id }}"
project_id: "{{ awx_hetzner_ansible_project_id }}"
execution_environment_id: "{{ awx_ee_hetzner_ansible_id }}"
playbook: "{{ job.playbook_file | default(job.name + '.yml') }}"
ask_variables_on_launch: true
uri:
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/job_templates/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
headers:
Content-Type: "application/json"
Accept: "application/json"
body_format: "json"
body: "{{ lookup('template','awx-create-job-template.json.j2') }}"
force_basic_auth: true
validate_certs: false
status_code: 201
register: response
changed_when: response.status == 201
when: awx_job_template_id == "None"
- name: "Search job template {{ job.name }}"
include_tasks: awx-config-get-typ-id.yml
vars:
awx_rest_api_type: job_templates
awx_search_key: name
awx_search_name: "{{ job.name }}"
when: awx_job_template_id == "None"
- name: "Update awx_job_template_id"
set_fact:
awx_job_template_id: "{{ awx_type_id }}"
when: awx_job_template_id == "None"
- include_tasks: awx-config-job-template-credential.yml
loop: "{{ job_templates_credentials }}"
loop_control:
loop_var: awx_credential_id
when: awx_job_template_id is defined

@ -1,4 +1,5 @@
---
- name: "Remove all <job_templates>"
include_tasks: awx-config-cleanup.yml
vars:
@ -25,7 +26,7 @@
password: "{{ awx_ansible_password }}"
is_system_auditor: "true"
uri:
url: "{{ awx_base_url }}/api/v2/users/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/users/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -108,7 +109,7 @@
- name: "Add <Machine> credentials <{{ awx_credential_machine_hetzner_name }}> with user: {{ ansible_awx_user_id }}"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/v2/credentials/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/credentials/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -167,7 +168,7 @@
- name: "Add <Source Control> credentials <{{ stage }}-gitea>"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/v2/credentials/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/credentials/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -225,12 +226,16 @@
awx_rest_api_type: credentials
awx_search_key: name
awx_search_name: "hetzner-ansible-vault"
tags:
- always
- name: "Update awx_credential_hetzner_ansible_vault_id"
set_fact:
awx_credential_hetzner_ansible_vault_id: "{{ awx_type_id }}"
when:
- awx_type_id != "None"
tags:
- always
- name: "Add <Vault> credentials <hetzner-ansible-vault>"
delegate_to: localhost
@ -240,7 +245,7 @@
credential_type_name: "Vault"
vault_password: "{{ ansible_vault_password }}"
uri:
url: "{{ awx_base_url }}/api/v2/credentials/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/credentials/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -307,7 +312,7 @@
username: "{{ harbor_username }}"
password: "{{ harbor_token }}"
uri:
url: "{{ awx_base_url }}/api/v2/credentials/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/credentials/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -364,7 +369,7 @@
credential: "{{ awx_credential_harbor_id }}"
pull: "always"
uri:
url: "{{ awx_base_url }}/api/v2/execution_environments/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/execution_environments/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -418,7 +423,7 @@
name: "localhost"
description: "localhost"
uri:
url: "{{ awx_base_url }}/api/v2/inventories/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/inventories/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -484,7 +489,7 @@
default_environment_id: "{{ awx_ee_hetzner_ansible_id }}"
credential_id: '{{ awx_credential_stagedspecific_gitea_id }}'
uri:
url: "{{ awx_base_url }}/api/v2/projects/"
url: "https://{{ shared_service_kube_awx_hostname }}/api/v2/projects/"
method: POST
user: "{{ awx_rest_api_access_user }}"
password: "{{ awx_rest_api_access_pw }}"
@ -537,3 +542,8 @@
loop: "{{ awx_job_templates | flatten(levels=1) }}"
loop_control:
loop_var: job
- name: "Create job templates"
include_tasks: awx-config-pmci-template.yml
with_fileglob:
- "{{ playbook_dir }}/pmci-*.yml"

@ -1,14 +1,9 @@
---
- name: "Set awx_base_url"
set_fact:
awx_base_url: "https://{{ stage_kube }}-awx.{{ domain }}"
tags:
- awx
- name: "Checkin if awx in k8s cluster is avail"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/login"
url: "https://{{ shared_service_kube_awx_hostname }}/api/login"
method: GET
user: "{{ awx_admin_username }}"
password: "{{ awx_admin_password }}"
@ -28,7 +23,7 @@
- name: "Authenticating with awx server"
delegate_to: localhost
uri:
url: "{{ awx_base_url }}/api/login"
url: "https://{{ shared_service_kube_awx_hostname }}/api/login"
method: GET
user: "{{ awx_admin_username }}"
password: "{{ awx_admin_password }}"
@ -58,6 +53,7 @@
args:
apply:
tags:
- awx
- update_awx_config
tags:
- awx
- never # shouldn't be done automatically due to removal logic
- update_awx_config

@ -31,5 +31,6 @@ current_realm_password_policy: ''
connect_config_delete_scope_enabled: true
connect_configurations:
- pmci
- backup
- provisioning

@ -0,0 +1,15 @@
---
current_realm_name: "{{ tenant.key }}"
current_realm_display_name: "{{ tenant.name }}"
current_realm_users: []
current_realm_clients: []
current_realm_admin_users:
- username: "{{ data.admin.username }}"
password: "{{ data.admin.password }}"
email: "{{ tenant.admin.email }}"
firstName: "{{ tenant.admin.first_name }}"
lastName: "{{ tenant.admin.last_name }}"

@ -0,0 +1,27 @@
---
- name: "Authenticate on keycloak "
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Creating realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _configure_realm
- name: "Creating admin users for realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _create_realm_admin
when:
- data is defined
- data.admin is defined
- name: "Creating users for realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _create_realm_users
when:
- data is defined
- data.admin is defined

@ -0,0 +1,15 @@
---
current_realm_name: "{{ tenant.key }}"
current_realm_display_name: "{{ tenant.name }}"
current_realm_users: []
current_realm_clients: []
current_realm_admin_users:
- username: "{{ data.admin.username }}"
password: "{{ data.admin.password }}"
email: "{{ tenant.admin.email }}"
firstName: "{{ tenant.admin.first_name }}"
lastName: "{{ tenant.admin.last_name }}"

@ -0,0 +1,11 @@
---
- name: "Authenticate on keycloak "
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Creating realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _delete_realm

@ -0,0 +1,15 @@
---
current_realm_name: "{{ tenant.key }}"
current_realm_display_name: "{{ tenant.name }}"
current_realm_users: []
current_realm_clients: []
current_realm_admin_users:
- username: "{{ data.admin.username }}"
password: "{{ data.admin.password }}"
email: "{{ tenant.admin.email }}"
firstName: "{{ tenant.admin.first_name }}"
lastName: "{{ tenant.admin.last_name }}"

@ -0,0 +1,27 @@
---
- name: "Authenticate on keycloak "
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Creating realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _configure_realm
- name: "Creating admin users for realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _create_realm_admin
when:
- data is defined
- data.admin is defined
- name: "Creating users for realm <{{ current_realm_name }}>"
include_role:
name: keycloak
tasks_from: _create_realm_users
when:
- data is defined
- data.admin is defined

@ -0,0 +1,15 @@
---
current_realm_name: "{{ tenant.key }}"
current_realm_display_name: "{{ tenant.name }}"
current_realm_users: []
current_realm_clients: []
current_realm_admin_users:
- username: "{{ data.admin.username }}"
password: "{{ data.admin.password }}"
email: "{{ tenant.admin.email }}"
firstName: "{{ tenant.admin.first_name }}"
lastName: "{{ tenant.admin.last_name }}"

@ -0,0 +1,55 @@
---
- name: "Authenticate on keycloak "
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Creating smardigo user token"
delegate_to: 127.0.0.1
become: false
smardigo_user_token:
secret: "{{ connect_jwt_secret }}"
user_id: "{{ management_admin_username }}"
register: smardigo_user_token_result
- name: "Setting smardigo_auth_token_value as fact"
set_fact:
smardigo_auth_token_value: "{{ smardigo_user_token_result.token }}"
- name: "Reading all pmci users from <{{ management_base_url }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ http_s }}://{{ management_base_url }}/api/v1/scopes/{{ sma_management_scope_id }}/groups/workflow/members?roleIds={{ sma_management_role_id }}"
method: GET
headers:
"Smardigo-User-Token": "{{ smardigo_auth_token_value }}"
status_code: [200,201]
register: pmci_users_results
- name: "Reading users from <{{ management_base_url }}>"
delegate_to: 127.0.0.1
become: false
set_fact:
pmci_users: "{{ pmci_users_results.json | json_query(querystr1) | json_query(querystr2) | unique | sort | default([]) }}"
vars:
querystr1: "[*].id"
querystr2: "[]"
- name: "Reading tenants from <{{ management_base_url }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ http_s }}://{{ management_base_url }}/api/v1/scopes/pmci/tags/latest/datasources/data-entity-tenants/query"
method: GET
headers:
"Smardigo-User-Token": "{{ smardigo_auth_token_value }}"
status_code: [200,201]
register: pmci_tenants_results
- name: "Updating assigned tenants for each user"
include_tasks: update_user_tenants.yml
loop: '{{ pmci_users }}'
loop_control:
loop_var: current_user_id

@ -0,0 +1,59 @@
---
- name: "Reading users by username <{{ current_user_id }}> from realm <{{ management_realm_name }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_keycloak }}/auth/admin/realms/{{ management_realm_name }}/users?username={{ current_user_id }}"
method: GET
headers:
Authorization: "Bearer {{ access_token }} "
status_code: [200]
register: keycloak_user_result
- name: "Reading user id for username <{{ current_user_id }}>"
set_fact:
keycloak_user_id: "{{ keycloak_user_result.json | json_query(querystr1) | first }}"
vars:
querystr1: "[*].id"
- name: "Reading user attibutes for username <{{ current_user_id }}>"
set_fact:
keycloak_user_attributes: "{{ keycloak_user_result.json | json_query(querystr1) | first | default([]) }}"
vars:
querystr1: "[*].attributes"
- name: "Calculate assigned tenant ids for username <{{ current_user_id }}>"
set_fact:
user_tenant_ids: "\
{% set list= [] %}\
{% for tenant in pmci_tenants_results.json %}\
{% for user in tenant.user_ids %}\
{% if user == current_user_id %}\
{{ list.append(tenant.key) }}\
{% endif %}\
{% endfor %}\
{% endfor %}\
{{ list | list | unique | sort }}"
- name: "Calculate assigned tenant ids for username <{{ current_user_id }}>"
set_fact:
keycloak_user_attributes_tenant_ids:
tenantIds: "{{ (['###'] + user_tenant_ids) | join(',') }}"
- name: "Calculate assigned tenant ids for username <{{ current_user_id }}>"
set_fact:
keycloak_user_attributes: "{{ keycloak_user_attributes | combine( keycloak_user_attributes_tenant_ids ) }}"
- name: "Updating user attributes for username <{{ current_user_id }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_keycloak }}/auth/admin/realms/{{ management_realm_name }}/users/{{ keycloak_user_id }}"
method: PUT
body_format: json
body: '{"attributes": {{ keycloak_user_attributes }}}'
headers:
Content-Type: "application/json"
Authorization: "Bearer {{ access_token }}"
status_code: [204]

@ -1,13 +0,0 @@
---
workflow_index_postgres_database: "{{ stage }}_{{ tenant_id }}_workflow_index"
workflow_index_postgres_password: "workflow-index-postgres-admin"
postgres_acls:
- name: "{{ workflow_index_postgres_database }}"
password: "{{ workflow_index_postgres_password }}"
trusted_cidr_entry: "{{ shared_service_network }}"
database_create: True
database_backup: False
database_restore: False

@ -1,18 +0,0 @@
---
### tags:
- name: "Updating <workflow_index> database on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _update_database_state
when:
- database_backup_state is not defined
- name: "Creating/Restoring <workflow_index> database backup on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _create_database_backup.yml
when:
- database_backup_state is defined
- database_backup_state in ['dump', 'restore']

@ -1,13 +0,0 @@
---
workflow_proxy_postgres_database: "{{ stage }}_{{ tenant_id }}_workflow_proxy"
workflow_proxy_postgres_password: "workflow-proxy-postgres-admin"
postgres_acls:
- name: "{{ workflow_proxy_postgres_database }}"
password: "{{ workflow_proxy_postgres_password }}"
trusted_cidr_entry: "{{ shared_service_network }}"
database_create: True
database_backup: False
database_restore: False

@ -1,18 +0,0 @@
---
### tags:
- name: "Updating <workflow_proxy> database on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _update_database_state
when:
- database_backup_state is not defined
- name: "Creating/Restoring <workflow_proxy> database backup on {{ inventory_hostname }}"
include_role:
name: postgres
tasks_from: _create_database_backup.yml
when:
- database_backup_state is defined
- database_backup_state in ['dump', 'restore']

@ -1,35 +0,0 @@
---
workflow_proxy_client_id: "{{ cluster_name }}"
workflow_proxy_base_url: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}.{{ domain }}"
current_realm_clients: [
{
name: '{{ workflow_proxy_client_id }}',
clientId: "{{ workflow_proxy_client_id }}",
admin_url: '',
root_url: '',
redirect_uris: '
[
"http://{{ workflow_proxy_base_url }}/*",
"https://{{ workflow_proxy_base_url }}/*",
]',
secret: '{{ workflow_proxy_client_id }}',
web_origins: '
[
"http://{{ workflow_proxy_base_url }}/*",
"https://{{ workflow_proxy_base_url }}/*",
]',
}
]
current_realm_users: [
{
"username": "{{ connect_client_admin_username }}",
"password": "{{ connect_client_admin_password }}",
}
]
current_realm_admin_user:
username: "{{ connect_realm_admin_username }}"
password: "{{ connect_realm_admin_password }}"

@ -1,25 +0,0 @@
---
### tags:
- name: "Setup realm for {{ inventory_hostname }}"
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Setup realm for {{ inventory_hostname }}"
include_role:
name: keycloak
tasks_from: _configure_realm
vars:
current_realm_password_policy: ''
- name: "Create realm users"
include_role:
name: keycloak
tasks_from: _create_realm_users
- name: "Create realm admin"
include_role:
name: keycloak
tasks_from: _create_realm_admin

@ -8,3 +8,6 @@ zip -r template.zip template/
rm -f backup.zip
zip -r backup.zip backup/
rm -f pmci.zip
zip -r pmci.zip pmci/

File diff suppressed because one or more lines are too long

@ -0,0 +1,68 @@
{
"name" : "Serviceverwaltung",
"configType" : "datasource-action",
"configKey" : "service-management",
"datasource" : {
"key" : "data-entity-services-processed",
"parameter" : [ {
"key" : "param1",
"value" : "envStage"
} ]
},
"columns" : [ {
"key" : "id",
"name" : "ID",
"width" : 100
}, {
"key" : "cluster.stage",
"name" : "Stage",
"width" : 50
}, {
"key" : "tenant_key",
"name" : "Mandantenschlüssel",
"width" : 50
}, {
"key" : "cluster.key",
"name" : "Servicename",
"width" : 100
}, {
"key" : "cluster.service",
"name" : "Service",
"width" : 100
}, {
"key" : "connect_version",
"name" : "Version",
"width" : 100
} ],
"actions" : [ {
"icon" : "add_circle",
"name" : "Service erstellen...",
"processDefinitionKey" : "service-create"
} ],
"rowActions" : [ {
"icon" : "replay",
"name" : "Setup starten...",
"processDefinitionKey" : "service-replay-setup",
"variable" : "service"
}, {
"icon" : "edit",
"name" : "Service ändern...",
"processDefinitionKey" : "service-change",
"variable" : "service"
}, {
"icon" : "delete",
"name" : "Service löschen...",
"processDefinitionKey" : "service-delete",
"variable" : "service"
}, {
"type" : "open-link",
"icon" : "open_in_new",
"name" : "Anwendung öffnen...",
"link" : "https://{{ cluster.stage }}-{{ tenant_key }}-{{ cluster.key }}-01-{{ cluster.service }}.smardigo.digital"
}, {
"type" : "open-link",
"icon" : "manage_accounts",
"name" : "Benutzerverwaltung öffnen...",
"link" : "https://{{ cluster.stage }}-keycloak-01.smardigo.digital/auth/admin/{{ tenant_key }}/console/"
} ]
}

@ -1,40 +1,53 @@
{
"name" : "Tenant Management",
"name" : "Mandantenverwaltung",
"configType" : "datasource-action",
"configKey" : "tenant-management",
"datasource" : {
"key" : "data-entity-tenants"
"key" : "data-entity-tenants",
"parameter" : [ {
"key" : "userId",
"value" : "{{user.id}}"
} ]
},
"columns" : [ {
"key" : "id",
"name" : "ID",
"width" : 100
}, {
"key" : "key",
"name" : "Mandantenschlüssel",
"width" : 50
}, {
"key" : "name",
"name" : "Name",
"width" : 200
"name" : "Mandantenname",
"width" : 100
}, {
"key" : "key",
"name" : "Key",
"key" : "admin.last_name",
"name" : "Administrator",
"width" : 100
} ],
"actions" : [ {
"icon" : "add_circle",
"name" : "Create New Tenant",
"searchKey": "tenant-events",
"processDefinitionKey" : "tenant-create"
"name" : "Mandant erstellen...",
"processDefinitionKey" : "tenant-create",
"groups" : [ "tenant-create" ]
} ],
"rowActions" : [ {
"icon" : "edit",
"name" : "Edit Tenant",
"searchKey": "tenant-events",
"processDefinitionKey" : "tenant-edit",
"name" : "Mandant ändern...",
"processDefinitionKey" : "tenant-change",
"groups" : [ "tenant-change" ],
"variable" : "tenant"
}, {
"icon" : "delete",
"name" : "Delete Tenant",
"searchKey": "tenant-events",
"name" : "Mandant löschen...",
"processDefinitionKey" : "tenant-delete",
"groups" : [ "tenant-delete" ],
"variable" : "tenant"
}, {
"type" : "open-link",
"icon" : "manage_accounts",
"name" : "Benutzerverwaltung öffnen...",
"link" : "https://dev-keycloak-01.smardigo.digital/auth/admin/{{ key }}/console/"
} ]
}

@ -1,23 +1,19 @@
{
"name": "awx-job-plain",
"restApi": true,
"configKey": "awx-job-plain",
"payloadType": "REST",
"config": [
{
"name": "connection",
"type": "CONNECTION",
"value": "awx"
},
{
"name": "resource",
"type": "STRING",
"value": "api/v2/jobs/${id}/"
},
{
"name": "sqlStatement",
"type": "STRING",
"value": "SELECT status,failed,started,finished,name,description FROM default_table"
}
]
"name" : "awx-job-plain",
"restApi" : true,
"configKey" : "awx-job-plain",
"payloadType" : "REST",
"config" : [ {
"name" : "connection",
"type" : "CONNECTION",
"value" : "awx"
}, {
"name" : "resource",
"type" : "STRING",
"value" : "api/v2/jobs/${id}/"
}, {
"name" : "sqlStatement",
"type" : "STRING",
"value" : "SELECT status,failed,started,finished,name,description FROM default_table"
} ]
}

@ -1,23 +1,19 @@
{
"name": "awx-job-templates-plain",
"restApi": true,
"configKey": "awx-job-templates-plain",
"payloadType": "REST",
"config": [
{
"name": "connection",
"type": "CONNECTION",
"value": "awx"
},
{
"name": "resource",
"type": "STRING",
"value": "api/v2/job_templates?search=${name}"
},
{
"name": "sqlStatement",
"type": "STRING",
"value": "SELECT results FROM default_table"
}
]
"name" : "awx-job-templates-plain",
"restApi" : true,
"configKey" : "awx-job-templates-plain",
"payloadType" : "REST",
"config" : [ {
"name" : "connection",
"type" : "CONNECTION",
"value" : "awx"
}, {
"name" : "resource",
"type" : "STRING",
"value" : "api/v2/job_templates?search=${name}"
}, {
"name" : "sqlStatement",
"type" : "STRING",
"value" : "SELECT results FROM default_table"
} ]
}

@ -1,18 +1,15 @@
{
"name": "awx-job-templates",
"restApi": true,
"configKey": "awx-job-templates",
"payloadType": "POST_PROCESSING",
"config": [
{
"name": "datasource_key",
"type": "STRING",
"value": "awx-job-templates-plain"
},
{
"name": "groovy_script",
"type": "STRING",
"value": "def result = []\ndata.each{templates ->\n templates.results.each{ template ->\n if (parameters['name'] == template.name) {\n result.add([id: template.id, name: template.name])\n }\n }\n}\nresult"
}
]
"name" : "awx-job-templates",
"restApi" : true,
"configKey" : "awx-job-templates",
"payloadType" : "POST_PROCESSING",
"config" : [ {
"name" : "datasource_key",
"type" : "STRING",
"value" : "awx-job-templates-plain"
}, {
"name" : "groovy_script",
"type" : "STRING",
"value" : "def result = []\ndata.each{templates ->\n templates.results.each{ template ->\n if (parameters['name'] == template.name) {\n result.add([id: template.id, name: template.name])\n }\n }\n}\nresult"
} ]
}

@ -0,0 +1,38 @@
{
"name": "connect-features",
"restApi": true,
"configKey": "connect-features",
"payloadType": "EXCEL",
"config": [
{
"name": "file",
"type": "FILE",
"value": "connect-features.xlsx"
},
{
"name": "columnNames",
"type": "STRING",
"value": ""
},
{
"name": "sqlStatement",
"type": "STRING",
"value": "select * from features where default in (${default})"
},
{
"name": "columnNameLineNumber",
"type": "INT",
"value": 1
},
{
"name": "skipEmptyLines",
"type": "BOOLEAN",
"value": false
},
{
"name": "skipEmptyColumns",
"type": "BOOLEAN",
"value": false
}
]
}

@ -0,0 +1,18 @@
{
"name": "data-entity-services-processed",
"restApi": true,
"configKey": "data-entity-services-processed",
"payloadType": "POST_PROCESSING",
"config": [
{
"name": "datasource_key",
"type": "STRING",
"value": "data-entity-services"
},
{
"name": "groovy_script",
"type": "STRING",
"value": "data.collect{ row ->\n row.link = 'https://' + row.cluster.stage + '-' + row.tenant_key + '-01-' + row.cluster.service + '.smardigo.digital'\n row\n}"
}
]
}

@ -0,0 +1,25 @@
{
"name": "data-entity-services",
"restApi": true,
"configKey": "data-entity-services",
"payloadType": "ENTITY",
"config": [
{
"name": "entityId",
"type": "STRING",
"value": "service"
},
{
"name": "propertyFilterKey",
"type": "STRING"
},
{
"name": "propertyFilterValue",
"type": "STRING"
},
{
"name": "filterParameters",
"type": "STRING"
}
]
}

@ -12,7 +12,7 @@
{
"name": "groovy_script",
"type": "STRING",
"value": "def result = []\ndata.each{tenant ->\n if (tenant.user_ids.contains(parameters['user_id'])) {\n result.add(tenant)\n }\n}\nresult"
"value": "data.findAll{it.user_ids.findAll{it == parameters.user_id}}"
}
]
}

@ -1,6 +1,7 @@
{
"configKey": "data-entity-tenants",
"name": "data-entity-tenants",
"restApi": true,
"configKey": "data-entity-tenants",
"payloadType": "ENTITY",
"config": [
{
@ -15,7 +16,11 @@
{
"name": "propertyFilterValue",
"type": "STRING"
},
{
"name": "filterParameters",
"type": "STRING",
"value": "key,id"
}
],
"restApi": true
]
}

@ -0,0 +1,21 @@
{
"name" : "whitelabel-docker-image-tags-plain",
"restApi" : true,
"configKey" : "whitelabel-docker-image-tags-plain",
"payloadType" : "REST",
"config" : [ {
"name" : "connection",
"type" : "CONNECTION",
"value" : "harbor"
},
{
"name" : "resource",
"type" : "STRING",
"value" : "/smardigo/connect-whitelabel-app/tags/list"
},
{
"name" : "sqlStatement",
"type" : "STRING",
"value" : "SELECT * FROM default_table"
} ]
}

@ -0,0 +1,16 @@
{
"name" : "whitelabel-docker-image-tags",
"restApi" : true,
"configKey" : "whitelabel-docker-image-tags",
"payloadType" : "POST_PROCESSING",
"config" : [ {
"name" : "datasource_key",
"type" : "STRING",
"value" : "whitelabel-docker-image-tags-plain"
},
{
"name" : "groovy_script",
"type" : "STRING",
"value" : "def result = []\ndata.each{values ->\n values.tags.each{ value ->\n result.add([value: value, label: value])\n }\n}\nresult"
} ]
}

@ -0,0 +1,7 @@
{
"scopeId" : null,
"name" : "Dependencies",
"configKey" : "dependency",
"configType" : "dependency",
"scopes" : [ ]
}

@ -0,0 +1,14 @@
{
"configKey" : "service-create",
"processDefinitionKey" : "service-create",
"documents" : [ ],
"dossiers" : [ {
"configKey" : "vorgang",
"currentUserConfig" : [ [ {
"key" : "filterTenantId",
"operation" : "in",
"value" : "${currentUserAttributes.tenantIds}"
} ] ],
"gruppenConfigs" : { }
} ]
}

@ -0,0 +1,10 @@
{
"configKey" : "service-replay-setup",
"processDefinitionKey" : "service-replay-setup",
"documents" : [ ],
"dossiers" : [ {
"configKey" : "vorgang",
"currentUserConfig" : [ [ ] ],
"gruppenConfigs" : { }
} ]
}

@ -0,0 +1,82 @@
{
"components" : [ {
"label" : "Entscheidung",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "select",
"input" : true,
"key" : "request_decision",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"select" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"custom" : "values = [\n { \"label\": \"Ablehnen\", \"value\": \"requestRejected\" }\n];\nif (true) {\n values.splice(1, 0, { \"label\": \"Freigeben\", \"value\": \"requestApproved\" });\n}",
"values" : [ ]
},
"valueProperty" : "value",
"selectThreshold" : 0.3,
"encrypted" : false,
"properties" : { },
"customConditional" : "",
"logic" : [ ],
"tags" : [ ],
"dataSrc" : "custom",
"searchEnabled" : false,
"tabs" : null,
"lazyLoad" : false,
"selectValues" : "",
"disableLimit" : false,
"sort" : "",
"reference" : false,
"reorder" : false
}, {
"label" : "Optionaler Kommentar",
"isUploadEnabled" : false,
"showWordCount" : false,
"showCharCount" : false,
"autofocus" : true,
"tableView" : true,
"alwaysEnabled" : false,
"rows" : 5,
"wysiwyg" : "",
"type" : "textarea",
"input" : true,
"key" : "createComment",
"defaultValue" : "",
"validate" : {
"unique" : false,
"json" : "",
"customMessage" : ""
},
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"spellcheck" : true,
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"encrypted" : false,
"logic" : [ ],
"customConditional" : "",
"tabs" : null,
"uploadUrl" : "",
"uploadOptions" : "",
"uploadDir" : "",
"reorder" : false
} ],
"display" : "form",
"configKey" : "approve-dialog",
"name" : "Dialog zur Freigabe"
}

@ -6,7 +6,7 @@
"attr" : "",
"value" : ""
} ],
"content" : "Sie sind dabei den Tenant zu löschen.",
"content" : "<h3>Sind Sie sich sicher, dass der Mandant gelöscht werden soll?</h3>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
@ -24,12 +24,12 @@
"json" : ""
},
"tabs" : null,
"reorder" : false,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ]
"logic" : [ ],
"reorder" : false
} ],
"display" : "form",
"configKey" : "confirm-delete-tenant",

@ -0,0 +1,168 @@
{
"name" : "Current Job Left",
"configKey" : "current-job-left",
"page" : 0,
"components" : [ {
"label" : "Current Job",
"hideLabel" : true,
"persistent" : false,
"mask" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "datasourcecontainer",
"input" : true,
"key" : "job",
"defaultValue" : {
"tenant" : {
"id" : ""
}
},
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job-plain/query?id={{data.current_job_id}}",
"method" : "GET",
"values" : [ { } ]
},
"components" : [ {
"label" : "Current Job",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "job",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Name",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "name",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"inputFormat" : "plain",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
}, {
"label" : "Beschreibung",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "description",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"inputFormat" : "plain",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
}, {
"label" : "Status",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "status",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"inputFormat" : "plain",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"datapath" : "0",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -0,0 +1,138 @@
{
"name" : "Current Job Right",
"configKey" : "current-job-right",
"page" : 0,
"components" : [ {
"label" : "Current Job",
"hideLabel" : true,
"persistent" : false,
"mask" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "datasourcecontainer",
"input" : true,
"key" : "job",
"defaultValue" : {
"tenant" : {
"id" : ""
}
},
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job-plain/query?id={{data.current_job_id}}",
"method" : "GET",
"values" : [ { } ]
},
"components" : [ {
"label" : "Current Job",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "job",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "HTML",
"labelPosition" : "left-left",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"h2\">\n <!-- pending, running, successful, error, failed, canceled -->\n <span style=\"display: {{ data.status == 'pending' ? '' : 'none' }}\" class=\"badge badge-info\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'running' ? '' : 'none' }}\" class=\"badge badge-primary\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'successful' ? '' : 'none' }}\" class=\"badge badge-success\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'error' ? '' : 'none' }}\" class=\"badge badge-danger\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'failed' ? '' : 'none' }}\" class=\"badge badge-warning\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'canceled' ? '' : 'none' }}\" class=\"badge badge-warning\">{{ data.status }}</span>\n</div>",
"refreshOnChange" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"refreshOn" : "data",
"reorder" : false
}, {
"label" : "Status",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"hidden" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "status",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"inputFormat" : "plain",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"datapath" : "0",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -0,0 +1,280 @@
{
"name" : "Current Jobs",
"configKey" : "current-jobs",
"page" : 0,
"components" : [ {
"label" : "Jobs",
"persistent" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "list",
"input" : true,
"key" : "jobs",
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "job",
"mask" : false,
"hideLabel" : true,
"tableView" : true,
"alwaysEnabled" : false,
"customClass" : "pb-0",
"type" : "datasourcecontainer",
"input" : true,
"key" : "job",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job-plain/query?id={{ row }}",
"method" : "GET",
"values" : [ { } ]
},
"components" : [ {
"label" : "job",
"hideLabel" : true,
"customClass" : "pb-0",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "job",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Columns",
"hideLabel" : true,
"columns" : [ {
"components" : [ {
"label" : "Name",
"hideLabel" : true,
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "name",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
}, {
"components" : [ {
"label" : "Name",
"hideLabel" : true,
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "description",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
}, {
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column",
"components" : [ {
"label" : "Name",
"hideLabel" : true,
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"clearOnHide" : false,
"hidden" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "status",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
}, {
"label" : "HTML",
"labelPosition" : "left-left",
"className" : "pb-0",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"h4\">\n <!-- pending, running, successful, error, failed, canceled -->\n <span style=\"display: {{ data.status == 'pending' ? '' : 'none' }}\" class=\"badge badge-info\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'running' ? '' : 'none' }}\" class=\"badge badge-primary\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'successful' ? '' : 'none' }}\" class=\"badge badge-success\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'error' ? '' : 'none' }}\" class=\"badge badge-danger\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'failed' ? '' : 'none' }}\" class=\"badge badge-warning\">{{ data.status }}</span>\n <span style=\"display: {{ data.status == 'canceled' ? '' : 'none' }}\" class=\"badge badge-warning\">{{ data.status }}</span>\n</div>",
"refreshOnChange" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"refreshOn" : "data",
"reorder" : false
} ]
} ],
"customClass" : "pb-0",
"mask" : false,
"tableView" : false,
"alwaysEnabled" : false,
"type" : "columns",
"input" : false,
"key" : "columns",
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"datapath" : "0",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"customConditional" : "",
"properties" : { },
"tags" : [ ],
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -6,8 +6,8 @@
"attr" : "",
"value" : ""
} ],
"content" : "Sie sind danbei den Tenant zu löschen.",
"refreshOnChange" : false,
"content" : "<div class=\"card bg-light\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">Es ist ein Fehler aufgetreten</h5>\n <p class=\"card-text\">Es ist ein nicht behandelbarer Fehler aufgetreten, bitte wenden Sie sich an einen Administrator.</p>\n <ul>\n <li>Fehlercode: {{ data.error_code }}</li>\n <li>Fehlerbeschreibung: {{ data.error_message }}</li>\n </ul>\n </div>\n</div>",
"refreshOnChange" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
@ -24,14 +24,14 @@
"json" : ""
},
"tabs" : null,
"reorder" : false,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ]
"logic" : [ ],
"reorder" : false
} ],
"display" : "form",
"configKey" : "cons-delete-tenant",
"name" : "cons-delete-tenant"
"configKey" : "error-dialog",
"name" : "error-dialog"
}

@ -0,0 +1,98 @@
{
"name" : "Progress Bar",
"configKey" : "progress-bar",
"page" : 0,
"components" : [ {
"label" : "HTML",
"labelPosition" : "left-left",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"progress\">\n <div\n class=\"progress-bar progress-bar-striped progress-bar-animated\"\n role=\"progressbar\"\n aria-valuenow=\"{{ data.progress_current }}\"\n aria-valuemin=\"0\"\n aria-valuemax=\"{{ data.progress_max }}\"\n style=\"width: {{ data.progress_current / data.progress_max * 100 }}%\">\n </div>\n</div>",
"refreshOnChange" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"refreshOn" : "data",
"reorder" : false
}, {
"label" : "progress_current",
"labelPosition" : "left-left",
"hidden" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "number",
"input" : true,
"key" : "progress_current",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"delimiter" : false,
"requireDecimal" : false,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"decimalLimit" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "progress_max",
"labelPosition" : "left-left",
"hidden" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "number",
"input" : true,
"key" : "progress_max",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"delimiter" : false,
"requireDecimal" : false,
"encrypted" : false,
"decimalLimit" : null,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -0,0 +1,63 @@
{
"configKey" : "select-connect-feature-set",
"name" : "select-connect-feature-set",
"components" : [ {
"label" : "service",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "service",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Optionale Connect-Features",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "dualmultiselect",
"input" : true,
"key" : "connect_features",
"defaultValue" : [ ],
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{ context.scopeId }}/processes/{{ context.processId }}/datasources/connect-features/query?default='0','1'",
"values" : [ { } ]
},
"template" : "{{ item.key }}",
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"projection" : "key",
"reorder" : false
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -0,0 +1,108 @@
{
"configKey" : "select-connect-version",
"name" : "select-connect-version",
"components" : [ {
"label" : "service",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "service",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "HTML",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<h3>Connect-Version\n<p></p>\n<p></p>\n</h3>\n",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html4",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "connect_version",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "select",
"input" : true,
"key" : "connect_version",
"defaultValue" : "latest",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"select" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/whitelabel-docker-image-tags/query",
"headers" : [ {
"key" : "",
"value" : ""
} ],
"values" : [ ]
},
"dataSrc" : "url",
"valueProperty" : "value",
"tabs" : null,
"properties" : { },
"selectThreshold" : 0.3,
"encrypted" : false,
"lazyLoad" : false,
"selectValues" : "",
"disableLimit" : false,
"sort" : "",
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"customDefaultValue" : "value='latest'",
"reference" : false,
"reorder" : false
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form"
}

@ -0,0 +1,39 @@
{
"components" : [ {
"label" : "Hinweis Create",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"card text-white bg-warning\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">Die Simulation ist gerade aktiv</h5>\n <p class=\"card-text\">Es werden keine Aktionen ausgeführt, da alle Aufrufe zu externen Systemen übersprungen werden.</p>\n </div>\n</div>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "hinweisCreate3",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "true",
"when" : "process_definition_key",
"json" : "",
"eq" : "tenant-create"
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "show = !!data.simulation;",
"logic" : [ ],
"clearOnRefresh" : true,
"reorder" : false
} ],
"display" : "form",
"configKey" : "service-notice",
"name" : "service-notice"
}

@ -0,0 +1,110 @@
{
"display" : "wizard",
"page" : 0,
"numPages" : 1,
"components" : [ {
"title" : "Page 1",
"label" : "Page 1",
"type" : "panel",
"key" : "page1",
"input" : false,
"tableView" : false,
"components" : [ {
"label" : "service",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "service",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Service",
"customClass" : "ml-4",
"clearOnHide" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "listselection",
"input" : true,
"key" : "selected_service",
"data" : {
"url" : "/api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/data-entity-services/query",
"requestBody" : "",
"values" : [ { } ],
"custom" : ""
},
"columns" : [ {
"name" : "Name",
"prop" : "name",
"value" : "",
"width" : "",
"sortable" : true
} ],
"projection" : [ {
"key" : "id",
"prop" : "id"
}, {
"key" : "name",
"prop" : "name"
}, {
"key" : "cluster",
"prop" : "cluster"
}, {
"key" : "connect_features",
"prop" : "connect_features"
}, {
"key" : "connect_version",
"prop" : "connect_version"
}, {
"key" : "locked",
"prop" : "locked"
}, {
"key" : "tenant_id",
"prop" : "tenant_id"
} ],
"identity" : "id",
"validate" : {
"required" : true,
"unique" : false,
"customMessage" : "",
"json" : ""
},
"properties" : { },
"tags" : [ ],
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"customConditional" : "",
"logic" : [ ],
"tabs" : null,
"datapath" : "",
"defaultFilter" : "",
"encrypted" : false,
"reloadOnAction" : false,
"filterPlaceholder" : "Tap to filter.",
"reorder" : false
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ]
} ],
"configKey" : "service-select-wizard",
"name" : "service-select-wizard (Achtung alle Felder herausprojezieren!)"
}

@ -0,0 +1,414 @@
{
"components" : [ {
"label" : "service",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "service",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "HTML",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<h4>Cluster</h4>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html6",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "cluster",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "cluster",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Columns",
"columns" : [ {
"components" : [ {
"label" : "Stage",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "stage",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"minLength" : null,
"maxLength" : null,
"minWords" : null,
"maxWords" : null
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"inputFormat" : "plain",
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
}, {
"label" : "Key",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "key",
"defaultValue" : "",
"validate" : {
"customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 15 Zeichen, alles kleingeschrieben",
"json" : "",
"required" : true,
"minLength" : null,
"maxLength" : null,
"minWords" : null,
"maxWords" : null,
"pattern" : "^[a-z0-9]{4,15}$"
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"inputFormat" : "plain",
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
}, {
"components" : [ {
"label" : "Size",
"mask" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "number",
"input" : true,
"key" : "size",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"min" : null,
"max" : null
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"delimiter" : false,
"requireDecimal" : false,
"encrypted" : false,
"decimalLimit" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "Service",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "service",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"minLength" : null,
"maxLength" : null,
"minWords" : null,
"maxWords" : null
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"inputFormat" : "plain",
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
} ],
"mask" : false,
"tableView" : false,
"alwaysEnabled" : false,
"type" : "columns",
"input" : false,
"key" : "columns5",
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"reorder" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ]
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "HTML",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<p>&nbsp;</p>\n<h4>Connect-Version</h4>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html4",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "connect_version",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "select",
"input" : true,
"key" : "connect_version",
"defaultValue" : "latest",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"select" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/whitelabel-docker-image-tags/query",
"headers" : [ {
"key" : "",
"value" : ""
} ],
"values" : [ ]
},
"dataSrc" : "url",
"valueProperty" : "value",
"tabs" : null,
"properties" : { },
"selectThreshold" : 0.3,
"encrypted" : false,
"lazyLoad" : false,
"selectValues" : "",
"disableLimit" : false,
"sort" : "",
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"customDefaultValue" : "value='latest'",
"reference" : false,
"reorder" : false
}, {
"label" : "HTML",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<p>&nbsp;</p>\n<p> </p>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "html5",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
}, {
"label" : "Optionale Connect-Features",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "dualmultiselect",
"input" : true,
"key" : "connect_features",
"defaultValue" : [ ],
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{ context.scopeId }}/processes/{{ context.processId }}/datasources/connect-features/query?default='0','1'",
"values" : [ { } ]
},
"template" : "{{ item.key }}",
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"projection" : "key",
"reorder" : false
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form",
"configKey" : "service",
"name" : "service"
}

@ -0,0 +1,256 @@
{
"components" : [ {
"label" : "Datasource Tenant",
"hideLabel" : true,
"persistent" : false,
"clearOnHide" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "datasourcecontainer",
"input" : true,
"key" : "tenant",
"defaultValue" : {
"tenant" : {
"id" : "",
"key" : ""
}
},
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"data" : {
"url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/data-entity-tenants/query?id={{data.service.tenant_id}}",
"method" : "GET",
"values" : [ { } ]
},
"components" : [ {
"label" : "Container Tenant",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "tenant",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Columns",
"columns" : [ {
"components" : [ {
"label" : "Id",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "id",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
}, {
"components" : [ ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
} ],
"mask" : false,
"tableView" : false,
"alwaysEnabled" : false,
"type" : "columns",
"input" : false,
"key" : "columns4",
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"reorder" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ]
}, {
"label" : "Columns",
"columns" : [ {
"components" : [ {
"label" : "Mandantenschlüssel",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "key",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
}, {
"components" : [ {
"label" : "Mandantenname",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"disabled" : true,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "name",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : ""
},
"reorder" : false
} ],
"width" : 6,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : false,
"hideOnChildrenHidden" : false,
"key" : "column",
"tableView" : true,
"label" : "Column"
} ],
"mask" : false,
"tableView" : false,
"alwaysEnabled" : false,
"type" : "columns",
"input" : false,
"key" : "columns2",
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"reorder" : false,
"properties" : { },
"tags" : null,
"customConditional" : "",
"logic" : [ ]
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"tabs" : null,
"datapath" : "0",
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form",
"configKey" : "tenant-in-service",
"name" : "tenant-in-service"
}

@ -0,0 +1,104 @@
{
"components" : [ {
"label" : "Hinweis Create",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"card text-white bg-warning\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">Die Simulation ist gerade aktiv</h5>\n <p class=\"card-text\">Es werden keine Aktionen ausgeführt, da alle Aufrufe zu externen Systemen übersprungen werden.</p>\n </div>\n</div>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "hinweisCreate3",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "true",
"when" : "process_definition_key",
"json" : "",
"eq" : "tenant-create"
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "show = !!data.simulation;",
"logic" : [ ],
"clearOnRefresh" : true,
"reorder" : false
}, {
"label" : "Mandantenhinweise",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"card text-white bg-danger\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">Keine Mandanten mit Services löschen</h5>\n <p class=\"card-text\">Ein Mandant darf nur dann gelöscht werden, wenn keine Services mehr existieren.</p>\n </div>\n</div>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "hinweisCreate4",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "true",
"when" : "process_definition_key",
"json" : "",
"eq" : "tenant-create"
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "show = context.processDefinitionKey == \"tenant-delete\";",
"logic" : [ ],
"clearOnRefresh" : true,
"reorder" : false
}, {
"label" : "Hinweis Create",
"className" : "",
"attrs" : [ {
"attr" : "",
"value" : ""
} ],
"content" : "<div class=\"card text-white bg-info\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">Änderung vorhandender Mandanten</h5>\n <p class=\"card-text\">Die Änderung vorhandender Mandanten muss in Keycloak durch einen Realm-Administrator erfolgen.</p>\n </div>\n</div>",
"refreshOnChange" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "htmlelement",
"input" : false,
"key" : "hinweisCreate5",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : null,
"customConditional" : "show = (context.processDefinitionKey == \"tenant-create\") || (context.processDefinitionKey == \"tenant-change\");",
"logic" : [ ],
"clearOnRefresh" : true,
"reorder" : false
} ],
"display" : "form",
"configKey" : "tenant-notice",
"name" : "tenant-notice"
}

@ -50,7 +50,7 @@
"width" : "",
"sortable" : true
}, {
"name" : "Schlüssel",
"name" : "Key",
"prop" : "key",
"value" : "",
"width" : "",
@ -105,5 +105,5 @@
} ]
} ],
"configKey" : "tenant-select-wizard",
"name" : "tenant-select-wizard (Achtung alle Felder herausprojezieren!)"
"name" : "tenant-select-wizard (Achtung alle Felder herausprojizieren!)"
}

@ -0,0 +1,91 @@
{
"components" : [ {
"label" : "tenant",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "tenant",
"validate" : {
"customMessage" : "",
"json" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"components" : [ {
"label" : "Mandant",
"customClass" : "ml-4",
"clearOnHide" : false,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "listselection",
"input" : true,
"key" : "selected_tenant",
"data" : {
"url" : "/api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/data-entity-tenants-filtered/query?user_id={{user.id}}",
"requestBody" : "",
"values" : [ { } ],
"custom" : ""
},
"columns" : [ {
"name" : "Name",
"prop" : "name",
"value" : "",
"width" : "",
"sortable" : true
}, {
"name" : "Key",
"prop" : "key",
"value" : "",
"width" : "",
"sortable" : true
} ],
"projection" : [ {
"key" : "key",
"prop" : "key"
}, {
"key" : "id",
"prop" : "id"
} ],
"identity" : "id",
"validate" : {
"required" : true,
"unique" : false,
"customMessage" : "",
"json" : ""
},
"properties" : { },
"tags" : [ ],
"conditional" : {
"show" : "",
"when" : "",
"json" : ""
},
"customConditional" : "",
"logic" : [ ],
"tabs" : null,
"datapath" : "",
"defaultFilter" : "",
"encrypted" : false,
"reloadOnAction" : false,
"filterPlaceholder" : "Tap to filter.",
"reorder" : false
} ],
"tabs" : null,
"encrypted" : false,
"properties" : { },
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false
} ],
"display" : "form",
"configKey" : "tenant-select",
"name" : "tenant-select"
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save