SMARCH-46: smardigo self service portal (wip)

master
Sven Ketelsen 5 years ago
parent 887ef89a90
commit 2c9a9029ad

@ -0,0 +1,86 @@
---
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least 2.10.x"
assert:
that:
- ansible_version.major >= 2
- ansible_version.minor >= 10
msg: "The ansible version has to be at least ({{ ansible_version.full }})"
tasks:
- name: Add hosts
add_host:
name: "{{ stage }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}"
groups:
- "stage_{{ stage }}"
- "{{ cluster_service }}"
with_sequence: start=1 end={{ cluster_size | default(1) }}
#############################################################
# Setup databases for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
remote_user: root
pre_tasks:
- name: "Gather current server infos"
hcloud_server_info:
api_token: "{{ hetzner_authentication_token }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1
become: false
- name: "Set current server infos as fact: hetzner_server_infos_json"
set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}"
delegate_to: 127.0.0.1
become: false
- name: "Read ip address for {{ inventory_hostname }}"
set_fact:
stage_server_ip: "{{ item.ipv4_address }}"
when: item.name == inventory_hostname
with_items: "{{ hetzner_server_infos_json }}"
delegate_to: 127.0.0.1
become: false
# - name: Print the gathered infos
# debug:
# var: stage_server_ip
# delegate_to: 127.0.0.1
roles:
- role: connect-postgres
#############################################################
# Sending smardigo management message to process
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
connection: local
gather_facts: false
post_tasks:
- name: "Sending smardigo management message <{{ smardigo_management_action }}> to <{{ scope_id }}/{{ process_instance_id }}>"
uri:
url: "{{ smardigo_management_url }}"
method: POST
body_format: json
body: "{{ lookup('template','smardigo-management-message.json.j2') }}"
headers:
accept: "*/*"
Content-Type: "application/json"
Smardigo-User-Token: "{{ smardigo_management_token }}"
status_code: [200]

@ -0,0 +1,84 @@
---
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least 2.10.x"
assert:
that:
- ansible_version.major >= 2
- ansible_version.minor >= 10
msg: "The ansible version has to be at least ({{ ansible_version.full }})"
tasks:
- name: Add hosts
add_host:
name: "{{ stage }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}"
groups:
- "stage_{{ stage }}"
- "{{ cluster_service }}"
with_sequence: start=1 end={{ cluster_size | default(1) }}
#############################################################
# Setup realms for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
become: false
gather_facts: false
pre_tasks:
- name: "Gather current server infos"
hcloud_server_info:
api_token: "{{ hetzner_authentication_token }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1
- name: "Set current server infos as fact: hetzner_server_infos_json"
set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}"
delegate_to: 127.0.0.1
- name: "Read ip address for {{ inventory_hostname }}"
set_fact:
stage_server_ip: "{{ item.ipv4_address }}"
when: item.name == inventory_hostname
with_items: "{{ hetzner_server_infos_json }}"
delegate_to: 127.0.0.1
- name: Print the gathered infos
debug:
var: stage_server_ip
delegate_to: 127.0.0.1
roles:
- role: connect-realm
#############################################################
# Sending smardigo management message to process
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
connection: local
gather_facts: false
post_tasks:
- name: "Sending smardigo management message <{{ smardigo_management_action }}> to <{{ scope_id }}/{{ process_instance_id }}>"
uri:
url: "{{ smardigo_management_url }}"
method: POST
body_format: json
body: "{{ lookup('template','smardigo-management-message.json.j2') }}"
headers:
accept: "*/*"
Content-Type: "application/json"
Smardigo-User-Token: "{{ smardigo_management_token }}"
status_code: [200]

@ -0,0 +1,161 @@
---
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least 2.10.x"
assert:
that:
- ansible_version.major >= 2
- ansible_version.minor >= 10
msg: "The ansible version has to be at least ({{ ansible_version.full }})"
tasks:
- name: Add hosts
add_host:
name: "{{ stage }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}"
groups:
- "stage_{{ stage }}"
- "{{ cluster_service }}"
with_sequence: start=1 end={{ cluster_size | default(1) }}
#############################################################
# Provisioning servers for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
gather_facts: false
pre_tasks:
- name: Get all Firewalls from Hetzner
uri:
url: "https://api.hetzner.cloud/v1/firewalls"
headers:
accept: application/json
authorization: Bearer {{ hetzner_authentication_token }}
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: hcloud
#############################################################
# Setup servers for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
remote_user: root
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: "Gather current server infos"
hcloud_server_info:
api_token: "{{ hetzner_authentication_token }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1
become: false
- name: "Set current server infos as fact: hetzner_server_infos_json"
set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}"
delegate_to: 127.0.0.1
become: false
- name: "Read ip address for {{ inventory_hostname }}"
set_fact:
stage_server_ip: "{{ item.ipv4_address }}"
when: item.name == inventory_hostname
with_items: "{{ hetzner_server_infos_json }}"
delegate_to: 127.0.0.1
become: false
# - name: Print the gathered infos
# debug:
# var: stage_server_ip
# delegate_to: 127.0.0.1
roles:
- role: ansible-role-docker
vars:
docker_compose_version: '1.29.1'
docker_compose_path: '/usr/bin/docker-compose'
docker_users: '{{ smardigo_plattform_users }}'
- 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
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
connection: local
gather_facts: false
post_tasks:
- name: "Sending smardigo management message <{{ smardigo_management_action }}> to <{{ scope_id }}/{{ process_instance_id }}>"
uri:
url: "{{ smardigo_management_url }}"
method: POST
body_format: json
body: "{{ lookup('template','smardigo-management-message.json.j2') }}"
headers:
accept: "*/*"
Content-Type: "application/json"
Smardigo-User-Token: "{{ smardigo_management_token }}"
status_code: [200]

@ -0,0 +1,83 @@
---
#############################################################
# Creating inventory dynamically for given parameters
#############################################################
- hosts: localhost
connection: local
gather_facts: false
pre_tasks:
- name: "Check if ansible version is at least 2.10.x"
assert:
that:
- ansible_version.major >= 2
- ansible_version.minor >= 10
msg: "The ansible version has to be at least ({{ ansible_version.full }})"
tasks:
- name: Add hosts
add_host:
name: "{{ stage }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}"
groups:
- "stage_{{ stage }}"
- "{{ cluster_service }}"
with_sequence: start=1 end={{ cluster_count | default(1) }}
#############################################################
# Setup services for created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
remote_user: root
pre_tasks:
- name: "Gather current server infos"
hcloud_server_info:
api_token: "{{ hetzner_authentication_token }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1
- name: "Set current server infos as fact: hetzner_server_infos_json"
set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}"
delegate_to: 127.0.0.1
- name: "Read ip address for {{ inventory_hostname }}"
set_fact:
stage_server_ip: "{{ item.ipv4_address }}"
when: item.name == inventory_hostname
with_items: "{{ hetzner_server_infos_json }}"
delegate_to: 127.0.0.1
- name: Print the gathered infos
debug:
var: stage_server_ip
delegate_to: 127.0.0.1
roles:
- role: connect
#############################################################
# run provisioning against newly created inventory
#############################################################
- hosts: "stage_{{ stage }}"
serial: "{{ serial_number | default(5) }}"
connection: local
gather_facts: false
post_tasks:
- name: "Sending smardigo management message <{{ smardigo_management_action }}> to <{{ scope_id }}/{{ process_instance_id }}>"
uri:
url: "{{ smardigo_management_url }}"
method: POST
body_format: json
body: "{{ lookup('template','smardigo-management-message.json.j2') }}"
headers:
accept: "*/*"
Content-Type: "application/json"
Smardigo-User-Token: "{{ smardigo_management_token }}"
status_code: [200]

@ -0,0 +1,34 @@
---
service: "connect"
hetzner_server_type: cx21
hetzner_server_labels: "stage={{ stage }} service={{ service }}"
connect_jwt_enabled: true
connect_jwt_secret: 908ae14462d049d3be84964ef379c7c6
connect_postgres_database: "connect-postgres"
connect_postgres_admin_username: "connect-postgres-admin"
connect_postgres_admin_password: "connect-postgres-admin"
current_realm_clients: [
{
clientId: 'connect',
name: 'connect',
admin_url: '',
root_url: '',
redirect_uris: '
[
"https://{{ service_name }}.{{ domain }}/*",
]',
secret: '{{ cluster_name }}',
web_origins: '
[
"https://{{ service_name }}.{{ domain }}/*",
]',
}
]
#connect_csrf_token_name: "< see vault >"
#connect_csrf_token_value: "< see vault >"

@ -1,9 +0,0 @@
---
service: "connect"
connect_jwt_enabled: true
connect_jwt_secret: 908ae14462d049d3be84964ef379c7c6
#connect_csrf_token_name: "< see vault >"
#connect_csrf_token_value: "< see vault >"

@ -1,16 +0,0 @@
---
hetzner_server_type: cx21
hetzner_server_labels: "stage={{ stage }} service={{ service }}"
# TODO create realm/client for tenant and service
connect_auth_module: oidc
connect_oidc_client_id: connect-01
connect_oidc_client_secret: 9e234965-1041-4653-8a0e-db964c04bc26
connect_oidc_registration_id: connect-01
connect_oidc_issuer_uri: https://{{ keycloak_hostname }}/auth/realms/smardigo-01
connect_password_change_url: https://{{ keycloak_hostname }}/auth/realms/smardigo-01/account/password
connect_iam_user_management_url: https://{{ keycloak_hostname }}/auth/admin/smardigo-01/console
spring_profiles_include_suffix: ",{{ inventory_hostname }}"
ribbon_display_on_active_profiles: "{{ inventory_hostname }}"

@ -2,6 +2,8 @@
stage: "dev" stage: "dev"
keycloak_server_url: "https://dev-keycloak-01.smardigo.digital"
docker_registry: dev-docker-registry-01.smardigo.digital docker_registry: dev-docker-registry-01.smardigo.digital
docker_registry_username: "< see vault >" docker_registry_username: "< see vault >"
docker_registry_token: "< see vault >" docker_registry_token: "< see vault >"
@ -81,4 +83,7 @@ keycloak_extra_hosts: [
hostname: "{{ mail_hostname }}", hostname: "{{ mail_hostname }}",
ip: 10.2.0.2, ip: 10.2.0.2,
} }
] ]
smardigo_management_url: "http://localhost:8080/api/v1/scopes/{{ scope_id }}/processes/{{ process_instance_id }}/messages"
smardigo_management_token: "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..xiS4DrBqSprqYdR94ACbUw.OHRxU9nmP25JiGlJMyw9XaSB2Q3GZ4yiG7I7UZlbv9k.q5I2KulPbvhN5yO08bGqfw"

@ -2,6 +2,8 @@
hetzner_server_labels: "stage={{ stage }} service=keycloak" hetzner_server_labels: "stage={{ stage }} service=keycloak"
keycloak_server_url: "http://localhost:{{ service_port_keycloak_external }}"
keycloak: { keycloak: {
realms: [ realms: [
{ {
@ -69,66 +71,6 @@ keycloak: {
]', ]',
} }
] ]
}, }
{
name: 'smardigo-01',
display_name: 'smardigo-01',
users: [
{
"username": "connect-admin",
"password": "connect-admin",
}
],
clients: [
{
clientId: 'connect-01',
name: 'connect-01',
admin_url: '',
root_url: '',
redirect_uris: '
[
"https://dev-connect-01.smardigo.digital/*",
"http://dev-connect-01.smardigo.digital/*",
]',
secret: '9e234965-1041-4653-8a0e-db964c04bc26',
web_origins: '
[
"https://dev-connect-01.smardigo.digital",
]',
},
{
clientId: 'connect-02',
name: 'connect-02',
admin_url: '',
root_url: '',
redirect_uris: '
[
"https://dev-connect-02.smardigo.digital/*",
"http://dev-connect-02.smardigo.digital/*",
]',
secret: '9e234965-1041-4653-8a0e-db964c04bc26',
web_origins: '
[
"https://dev-connect-02.smardigo.digital",
]',
},
{
clientId: 'connect-03',
name: 'connect-03',
admin_url: '',
root_url: '',
redirect_uris: '
[
"https://dev-connect-03.smardigo.digital/*",
"http://dev-connect-03.smardigo.digital/*",
]',
secret: '9e234965-1041-4653-8a0e-db964c04bc26',
web_origins: '
[
"https://dev-connect-03.smardigo.digital",
]',
},
]
},
] ]
} }

@ -0,0 +1,5 @@
---
connect_postgres_service_name: "{{ service_name }}-connectpostgres"
connect_postgres_version: "12"

@ -0,0 +1,83 @@
---
### tags:
### update_deployment
- name: "Send mattermost message"
uri:
url: "{{ mattermost_hook_smardigo }}"
method: POST
body: "{{ lookup('template','mattermost-deploy-start.json.j2') }}"
body_format: json
headers:
Content-Type: "application/json"
delegate_to: 127.0.0.1
become: false
when:
- send_status_messages
- name: "Check if {{ connect_postgres_service_name }}/docker-compose.yml exists"
stat:
path: '{{ service_base_path }}/{{ connect_postgres_service_name }}/docker-compose.yml'
register: check_docker_compose_file
tags:
- update_deployment
- name: "Stop {{ connect_postgres_service_name }}"
shell: docker-compose down
args:
chdir: '{{ service_base_path }}/{{ connect_postgres_service_name }}'
when: check_docker_compose_file.stat.exists
ignore_errors: yes
tags:
- update_deployment
- name: "Deploy docker templates for {{ connect_postgres_service_name }}"
include_role:
name: _deploy
tasks_from: templates
vars:
current_config: "_docker"
current_base_path: "{{ service_base_path }}"
current_destination: "{{ connect_postgres_service_name }}"
current_owner: "{{ docker_owner }}"
current_group: "{{ docker_group }}"
current_docker: "{{ connect_docker }}"
- name: "Deploy service templates for {{ connect_postgres_service_name }}"
include_role:
name: _deploy
tasks_from: templates
vars:
current_config: "connect"
current_base_path: "{{ service_base_path }}"
current_destination: "{{ connect_postgres_service_name }}"
current_owner: "{{ docker_owner }}"
current_group: "{{ docker_group }}"
- name: "Update {{ connect_postgres_service_name }}"
shell: docker-compose pull
args:
chdir: '{{ service_base_path }}/{{ connect_postgres_service_name }}'
tags:
- update_deployment
- name: "Start {{ connect_postgres_service_name }}"
shell: docker-compose up -d
args:
chdir: '{{ service_base_path }}/{{ connect_postgres_service_name }}'
tags:
- update_deployment
- name: "Send mattermost messsge"
uri:
url: "{{ mattermost_hook_smardigo }}"
method: POST
body: "{{ lookup('template','mattermost-deploy-end.json.j2') }}"
body_format: json
headers:
Content-Type: "application/json"
delegate_to: 127.0.0.1
become: false
when:
- send_status_messages

@ -0,0 +1,36 @@
---
connect_postgres_id: "{{ service_name }}-postgres-connect"
connect_docker: {
networks: [
{
name: back-tier,
external: true,
}
],
volumes: [
{
name: "{{ connect_postgres_id }}-data"
}
],
services: [
{
name: "{{ connect_postgres_id }}",
image_name: "postgres",
image_version: "{{ connect_postgres_version }}",
environment: [
'POSTGRES_DB: "{{ connect_postgres_database }}"',
'POSTGRES_USER: "{{ connect_postgres_admin_username }}"',
'POSTGRES_PASSWORD: "{{ connect_postgres_admin_password }}"',
],
volumes: [
'"{{ connect_postgres_id }}-data:/var/lib/postgresql/data"',
],
networks: [
'"back-tier"',
],
ports: "{{ connect_postgres_ports | default([]) }}",
},
],
}

@ -0,0 +1,40 @@
---
### tags:
### update_deployment
- name: "Send mattermost message"
uri:
url: "{{ mattermost_hook_smardigo }}"
method: POST
body: "{{ lookup('template','mattermost-deploy-start.json.j2') }}"
body_format: json
headers:
Content-Type: "application/json"
delegate_to: 127.0.0.1
become: false
when:
- send_status_messages
- name: "Setup realm for {{ service_name }}"
include_role:
name: keycloak
tasks_from: _authenticate
- name: "Setup realm for {{ service_name }}"
include_role:
name: keycloak
tasks_from: _configure_realm
- name: "Send mattermost messsge"
uri:
url: "{{ mattermost_hook_smardigo }}"
method: POST
body: "{{ lookup('template','mattermost-deploy-end.json.j2') }}"
body_format: json
headers:
Content-Type: "application/json"
delegate_to: 127.0.0.1
become: false
when:
- send_status_messages

@ -1,15 +1,13 @@
--- ---
connect_service_name: "{{ service_name }}-connect"
connect_image_name: "{{ docker_registry }}/smardigo/connect-whitelabel-app" connect_image_name: "{{ docker_registry }}/smardigo/connect-whitelabel-app"
connect_version: 'latest' connect_version: 'latest'
connect_admin_username: "connect-admin" connect_admin_username: "connect-admin"
connect_admin_password: "connect-admin" connect_admin_password: "connect-admin"
connect_postgres_version: "12"
connect_postgres_database: "connect-postgres"
connect_postgres_admin_username: "connect-postgres-admin"
connect_postgres_admin_password: "connect-postgres-admin"
connect_mail_properties_base_url: "{{ http_s }}://{{ connect_id }}.{{ domain }}" connect_mail_properties_base_url: "{{ http_s }}://{{ connect_id }}.{{ domain }}"
connect_mail_properties_base_url_extern: "{{ http_s }}://{{ connect_id }}.{{ domain }}" connect_mail_properties_base_url_extern: "{{ http_s }}://{{ connect_id }}.{{ domain }}"

@ -16,75 +16,75 @@
when: when:
- send_status_messages - send_status_messages
- name: "Setup DNS configuration for {{ service_name }}" - name: "Setup DNS configuration for {{ connect_service_name }}"
include_role: include_role:
name: _digitalocean name: _digitalocean
tasks_from: domain tasks_from: domain
vars: vars:
record_data: "{{ stage_server_ip }}" record_data: "{{ stage_server_ip }}"
record_name: "{{ service_name }}" record_name: "{{ connect_service_name }}"
- name: "Check if {{ service_name }}/docker-compose.yml exists" - name: "Check if {{ connect_service_name }}/docker-compose.yml exists"
stat: stat:
path: '{{ service_base_path }}/{{ service_name }}/docker-compose.yml' path: '{{ service_base_path }}/{{ connect_service_name }}/docker-compose.yml'
register: check_docker_compose_file register: check_docker_compose_file
tags: tags:
- update_deployment - update_deployment
- name: "Stop {{ service_name }}" - name: "Stop {{ connect_service_name }}"
shell: docker-compose down shell: docker-compose down
args: args:
chdir: '{{ service_base_path }}/{{ service_name }}' chdir: '{{ service_base_path }}/{{ connect_service_name }}'
when: check_docker_compose_file.stat.exists when: check_docker_compose_file.stat.exists
ignore_errors: yes ignore_errors: yes
tags: tags:
- update_deployment - update_deployment
- name: "Deploy docker templates for {{ service_name }}" - name: "Deploy docker templates for {{ connect_service_name }}"
include_role: include_role:
name: _deploy name: _deploy
tasks_from: templates tasks_from: templates
vars: vars:
current_config: "_docker" current_config: "_docker"
current_base_path: "{{ service_base_path }}" current_base_path: "{{ service_base_path }}"
current_destination: "{{ service_name }}" current_destination: "{{ connect_service_name }}"
current_owner: "{{ docker_owner }}" current_owner: "{{ docker_owner }}"
current_group: "{{ docker_group }}" current_group: "{{ docker_group }}"
current_docker: "{{ connect_docker }}" current_docker: "{{ connect_docker }}"
- name: "Deploy service templates for {{ service_name }}" - name: "Deploy service templates for {{ connect_service_name }}"
include_role: include_role:
name: _deploy name: _deploy
tasks_from: templates tasks_from: templates
vars: vars:
current_config: "connect" current_config: "connect"
current_base_path: "{{ service_base_path }}" current_base_path: "{{ service_base_path }}"
current_destination: "{{ service_name }}" current_destination: "{{ connect_service_name }}"
current_owner: "{{ docker_owner }}" current_owner: "{{ docker_owner }}"
current_group: "{{ docker_group }}" current_group: "{{ docker_group }}"
- name: "Update {{ service_name }}" - name: "Update {{ connect_service_name }}"
shell: docker-compose pull shell: docker-compose pull
args: args:
chdir: '{{ service_base_path }}/{{ service_name }}' chdir: '{{ service_base_path }}/{{ connect_service_name }}'
tags: tags:
- update_deployment - update_deployment
- name: "Start {{ service_name }}" - name: "Start {{ connect_service_name }}"
shell: docker-compose up -d shell: docker-compose up -d
args: args:
chdir: '{{ service_base_path }}/{{ service_name }}' chdir: '{{ service_base_path }}/{{ connect_service_name }}'
tags: tags:
- update_deployment - update_deployment
- name: "Update landing page entries for {{ service_name }}" - name: "Update landing page entries for {{ connect_service_name }}"
include_role: include_role:
name: _deploy name: _deploy
tasks_from: caddy_landing_page tasks_from: caddy_landing_page
vars: vars:
current_services: [ current_services: [
{ {
current_name: "{{ service_name }}", current_name: "{{ connect_service_name }}",
current_url: "{{ http_s }}://{{ connect_id }}.{{ domain }}", current_url: "{{ http_s }}://{{ connect_id }}.{{ domain }}",
current_version: "{{ connect_version }}", current_version: "{{ connect_version }}",
current_date: "{{ ansible_date_time.iso8601 }}", current_date: "{{ ansible_date_time.iso8601 }}",

@ -88,11 +88,6 @@ connect_docker: {
external: true, external: true,
}, },
], ],
volumes: [
{
name: "{{ connect_postgres_id }}-data"
}
],
services: [ services: [
{ {
name: "{{ connect_id }}", name: "{{ connect_id }}",
@ -106,23 +101,6 @@ connect_docker: {
'"front-tier"', '"front-tier"',
], ],
extra_hosts: "{{ connect_extra_hosts | default([]) }}", extra_hosts: "{{ connect_extra_hosts | default([]) }}",
}, }
{
name: "{{ connect_postgres_id }}",
image_name: "postgres",
image_version: "{{ connect_postgres_version }}",
environment: [
'POSTGRES_DB: "{{ connect_postgres_database }}"',
'POSTGRES_USER: "{{ connect_postgres_admin_username }}"',
'POSTGRES_PASSWORD: "{{ connect_postgres_admin_password }}"',
],
volumes: [
'"{{ connect_postgres_id }}-data:/var/lib/postgresql/data"',
],
networks: [
'"back-tier"',
],
ports: "{{ connect_postgres_ports | default([]) }}",
},
], ],
} }

@ -0,0 +1,22 @@
---
- name: "Authenticate with Keycloak server"
uri:
url: "{{ keycloak_server_url }}/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
delegate_to: 127.0.0.1
retries: 5
delay: 5
- name: Save access_token as variable (fact)
set_fact:
access_token: "{{ keycloak_authentication.json.access_token }}"
delegate_to: 127.0.0.1
- name: Print keycloak access_token
debug:
msg: "{{ access_token }}"
delegate_to: 127.0.0.1

@ -0,0 +1,19 @@
---
#- name: Print client {{ client_id }} for realm {{ realm_name }}
# debug:
# msg: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}"
# when: realm_client_ids | selectattr('clientId', 'equalto', client_id) | list | length == 0
# delegate_to: 127.0.0.1
- name: Create client {{ client_id }} for realm {{ realm_name }}
uri:
url: "{{ keycloak_server_url }}/auth/admin/realms/{{ realm_name }}/clients"
method: POST
body_format: json
body: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}"
headers:
Authorization: "Bearer {{ access_token}} "
status_code: [201]
when: realm_client_ids | selectattr('clientId', 'equalto', client_id) | list | length == 0
delegate_to: 127.0.0.1

@ -0,0 +1,77 @@
---
- name: Read realms
uri:
url: "{{ keycloak_server_url }}/auth/admin/realms"
method: GET
headers:
Authorization: "Bearer {{ access_token }}"
status_code: [200]
register: realms
delegate_to: 127.0.0.1
- name: Save realms as variable (fact)
set_fact:
realms_json: "{{ realms.json }}"
delegate_to: 127.0.0.1
- name: Read realm ids
set_fact:
realm_ids: "{{ realms_json | json_query(jmesquery) }}"
vars:
jmesquery: '[*].id'
delegate_to: 127.0.0.1
- name: Create realm {{ current_realm_name }}
uri:
url: "{{ keycloak_server_url }}/auth/admin/realms"
method: POST
body_format: json
body: "{{ lookup('template','keycloak-realm-create.json.j2') }}"
headers:
Authorization: "Bearer {{ access_token }}"
status_code: [201]
when: current_realm_name not in realm_ids
delegate_to: 127.0.0.1
- name: Read clients from realm {{ current_realm_name }}
uri:
url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/clients"
method: GET
headers:
Authorization: "Bearer {{ access_token }}"
status_code: [200]
register: realm_clients
delegate_to: 127.0.0.1
- name: Save clients from realm as variable (fact)
set_fact:
realm_clients_json: "{{ realm_clients.json }}"
delegate_to: 127.0.0.1
- name: "Save client ids from realm {{ current_realm_name }}"
set_fact:
realm_client_ids: "{{ realm_clients_json | json_query(jmesquery) }}"
vars:
jmesquery: '[*].{id: id, clientId: clientId}'
delegate_to: 127.0.0.1
- name: Print client ids
debug:
msg: "{{ realm_client_ids }}"
delegate_to: 127.0.0.1
- name: "Create clients from realm {{ current_realm_name }}"
include_tasks: _configure_client.yml
vars:
realm_name: '{{ current_realm_name }}'
client_id: '{{ client.clientId }}'
client_name: '{{ client.name }}'
admin_url: '{{ client.admin_url }}'
root_url: '{{ client.root_url }}'
redirect_uris: '{{ client.redirect_uris }}'
secret: '{{ client.secret }}'
web_origins: '{{ client.web_origins }}'
with_items: "{{ current_realm_clients }}"
loop_control:
loop_var: client

@ -9,7 +9,7 @@
- name: Create client {{ client_id }} for realm {{ realm_name }} - name: Create client {{ client_id }} for realm {{ realm_name }}
uri: uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms/{{ realm_name }}/clients url: "{{ keycloak_server_url }}/auth/admin/realms/{{ realm_name }}/clients"
method: POST method: POST
body_format: json body_format: json
body: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}" body: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}"

@ -2,21 +2,15 @@
- name: Read realms - name: Read realms
uri: uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms url: "{{ keycloak_server_url }}/auth/admin/realms"
method: GET method: GET
headers: headers:
Authorization: "Bearer {{ access_token}} " Authorization: "Bearer {{ access_token }}"
status_code: [200] status_code: [200]
register: realms register: realms
tags: tags:
- update_realms - update_realms
#- name: Print realms
# debug:
# msg: "{{ realms }}"
# tags:
# - update_realms
- name: Save realms as variable (fact) - name: Save realms as variable (fact)
set_fact: set_fact:
realms_json: "{{ realms.json }}" realms_json: "{{ realms.json }}"
@ -25,7 +19,7 @@
- name: Read realm ids - name: Read realm ids
set_fact: set_fact:
realm_ids: "{{ realms_json | json_query(jmesquery) }}" realm_ids: "{{ realms_json | json_query(jmesquery) }}"
vars: vars:
jmesquery: '[*].id' jmesquery: '[*].id'
tags: tags:
@ -33,12 +27,12 @@
- name: Create realm {{ current_realm_name }} - name: Create realm {{ current_realm_name }}
uri: uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms url: "{{ keycloak_server_url }}/auth/admin/realms"
method: POST method: POST
body_format: json body_format: json
body: "{{ lookup('template','keycloak-realm-create.json.j2') }}" body: "{{ lookup('template','keycloak-realm-create.json.j2') }}"
headers: headers:
Authorization: "Bearer {{ access_token}} " Authorization: "Bearer {{ access_token }}"
status_code: [201] status_code: [201]
when: current_realm_name not in realm_ids when: current_realm_name not in realm_ids
tags: tags:
@ -46,21 +40,15 @@
- name: Read clients from realm {{ current_realm_name }} - name: Read clients from realm {{ current_realm_name }}
uri: uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms/{{ current_realm_name }}/clients url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/clients"
method: GET method: GET
headers: headers:
Authorization: "Bearer {{ access_token}} " Authorization: "Bearer {{ access_token }}"
status_code: [200] status_code: [200]
register: realm_clients register: realm_clients
tags: tags:
- update_realms - update_realms
#- name: Print clients from realm {{ current_realm_name }}
# debug:
# msg: "{{ realm_clients }}"
# tags:
# - update_realms
- name: Save clients from realm as variable (fact) - name: Save clients from realm as variable (fact)
set_fact: set_fact:
realm_clients_json: "{{ realm_clients.json }}" realm_clients_json: "{{ realm_clients.json }}"
@ -69,7 +57,7 @@
- name: Save client ids from realm {{ current_realm_name }} - name: Save client ids from realm {{ current_realm_name }}
set_fact: set_fact:
realm_client_ids: "{{ realm_clients_json | json_query(jmesquery) }}" realm_client_ids: "{{ realm_clients_json | json_query(jmesquery) }}"
vars: vars:
jmesquery: '[*].{id: id, clientId: clientId}' jmesquery: '[*].{id: id, clientId: clientId}'
tags: tags:
@ -98,22 +86,3 @@
loop_var: client loop_var: client
tags: tags:
- update_realms - update_realms
- name: Create realm {{ current_realm_name }} LDAP user storage provider
include_tasks: configure_user_storage_provider_ldap.yml
vars:
realm: '{{ current_realm_name }}'
provider_name: '{{ provider.name }}'
usersDn: '{{ provider.usersDn }}'
ldap_username: '{{ provider.username }}'
ldap_password: '{{ provider.password }}'
ldap_connection_url: '{{ provider.connection_url }}'
ldap_username_attribute: '{{ provider.username_attribute }}'
custom_user_search_filter: '{{ provider.custom_user_search_filter }}'
search_scope: '{{ provider.search_scope }}'
access_token: '{{ keycloak_authentication.json.access_token }}'
with_items: "{{ current_realm_ldaps }}"
loop_control:
loop_var: provider
tags:
- update_realms

@ -1,107 +0,0 @@
- name: Create ldap user storage provider in realm {{ realm }}
uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms/{{ realm }}/components
method: POST
body_format: json
body: '{
"name": "{{ provider_name }}",
"providerId": "ldap",
"providerType": "org.keycloak.storage.UserStorageProvider",
"parentId": "{{ realm }}",
"config": {
"allowKerberosAuthentication": ["false"],
"authType": ["simple"],
"batchSizeForSync": ["1000"],
"bindCredential": ["{{ ldap_password }}"],
"bindDn": ["{{ ldap_username }}"],
"cachePolicy": ["DEFAULT"],
"changedSyncPeriod": ["86400"],
"connectionPooling": ["true"],
"connectionUrl": ["{{ ldap_connection_url }}"],
"customUserSearchFilter": ["{{ custom_user_search_filter }}"],
"debug": ["false"],
"editMode": ["READ_ONLY"],
"enabled": ["true"],
"fullSyncPeriod": ["604800"],
"importEnabled": ["true"],
"pagination": ["true"],
"priority": ["0"],
"rdnLDAPAttribute": ["cn"],
"searchScope": ["{{ search_scope }}"],
"syncRegistrations": ["false"],
"trustEmail": ["false"],
"useKerberosForPasswordAuthentication": ["false"],
"usernameLDAPAttribute": ["{{ ldap_username_attribute }}"],
"userObjectClasses": ["person, organizationalPerson, user"],
"usersDn": ["{{ usersDn }}"],
"useTruststoreSpi": ["ldapsOnly"],
"uuidLDAPAttribute": ["objectGUID"],
"validatePasswordPolicy": ["false"],
"vendor": ["ad"]
}
}'
status_code: [201]
headers:
Authorization: "Bearer {{ access_token }}"
register: response
tags:
- update_realms
- name: Get id of created user storage provider
uri:
url: "{{ response.location }}"
method: GET
headers:
Authorization: "Bearer {{ access_token }}"
register: response
tags:
- update_realms
- name: Create user attribute mapper for firstName
uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms/{{ realm }}/components
method: POST
body_format: json
body: '{
"name": "first name",
"providerId": "user-attribute-ldap-mapper",
"providerType": "org.keycloak.storage.ldap.mappers.LDAPStorageMapper",
"parentId": "{{ response.json.id }}",
"config": {
"ldap.attribute": ["givenName"],
"is.mandatory.in.ldap": ["false"],
"is.binary.attribute": ["false"],
"read.only": ["true"],
"always.read.value.from.ldap": ["false"],
"user.model.attribute": ["firstName"]
}
}'
headers:
Authorization: "Bearer {{ access_token }}"
status_code: [201]
tags:
- update_realms
- name: Create user role mappers
uri:
url: http://localhost:{{ service_port_keycloak_external }}/auth/admin/realms/{{ realm }}/components
method: POST
body_format: json
body: '{
"name": "{{ role.name }}",
"providerId": "hardcoded-ldap-role-mapper",
"providerType": "org.keycloak.storage.ldap.mappers.LDAPStorageMapper",
"config": {
"role": ["{{ role.role_id }}"],
},
"parentId": "{{ response.json.id }}",
}'
headers:
Authorization: "Bearer {{ access_token }}"
status_code: [201]
when: hardcoded_user_roles is defined
with_items: "{{ hardcoded_user_roles }}"
loop_control:
loop_var: role
tags:
- update_realms

@ -115,32 +115,12 @@
- create_groups - create_groups
- update_realms - update_realms
- name: "Create user storage provider in master realm"
include_tasks: configure_user_storage_provider_ldap.yml
vars:
access_token: "{{ keycloak_authentication.json.access_token }}"
realm: master
provider_name: '{{ item.name }}'
ldap_username: '{{ item.username }}'
ldap_password: '{{ item.password }}'
ldap_connection_url: '{{ item.connection_url }}'
ldap_username_attribute: '{{ item.username_attribute }}'
usersDn: '{{ item.usersDn }}'
custom_user_search_filter: '{{ item.custom_user_search_filter }}'
search_scope: '{{ item.search_scope }}'
hardcoded_user_roles: '{{ item.hardcoded_user_roles }}'
with_items: "{{ keycloak.master.ldap | default([]) }}"
when: keycloak.master is defined
tags:
- update_realms
- name: "Setup realms" - name: "Setup realms"
include_tasks: configure_realm.yml include_tasks: configure_realm.yml
vars: vars:
current_realm_name: '{{ current_realm.name }}' current_realm_name: '{{ current_realm.name }}'
current_realm_display_name: '{{ current_realm.display_name }}' current_realm_display_name: '{{ current_realm.display_name }}'
current_realm_clients: '{{ current_realm.clients | default([]) }}' current_realm_clients: '{{ current_realm.clients | default([]) }}'
current_realm_ldaps: '{{ current_realm.ldaps | default([]) }}'
access_token: "{{ keycloak_authentication.json.access_token }}" access_token: "{{ keycloak_authentication.json.access_token }}"
with_items: "{{ keycloak.realms }}" with_items: "{{ keycloak.realms }}"
loop_control: loop_control:

File diff suppressed because one or more lines are too long

@ -0,0 +1,31 @@
{
"name" : "Accounts",
"restApi" : true,
"configKey" : "accounts",
"payloadType" : "EXCEL",
"config" : [ {
"name" : "file",
"type" : "FILE",
"value" : "master_data.xlsx"
}, {
"name" : "columnNames",
"type" : "STRING",
"value" : ""
}, {
"name" : "sqlStatement",
"type" : "STRING",
"value" : "select * from accounts"
}, {
"name" : "columnNameLineNumber",
"type" : "INT",
"value" : 1
}, {
"name" : "skipEmptyLines",
"type" : "BOOLEAN",
"value" : false
}, {
"name" : "skipEmptyColumns",
"type" : "BOOLEAN",
"value" : false
} ]
}

@ -0,0 +1,17 @@
{
"name" : "Mandanten",
"restApi" : true,
"configKey" : "tenants",
"payloadType" : "ENTITY",
"config" : [ {
"name" : "entityId",
"type" : "STRING",
"value" : "tenants"
}, {
"name" : "propertyFilterKey",
"type" : "STRING"
}, {
"name" : "propertyFilterValue",
"type" : "STRING"
} ]
}

@ -0,0 +1,178 @@
{
"name" : "Dialog zur Freigabe",
"configKey" : "approve",
"display" : "form",
"page" : 0,
"components" : [ {
"label" : "Entscheidung",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "select",
"input" : true,
"key" : "antrag_decission",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : true,
"select" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"data" : {
"custom" : "values = [\n { \"label\": \"Antrag ablehnen\", \"value\": \"antragAblehnen\" }\n];\nif (true) {\n values.splice(1, 0, { \"label\": \"Antrag genehmigen\", \"value\": \"antragGenehmigen\" });\n}",
"values" : [ ],
"json" : "",
"url" : "",
"resource" : ""
},
"valueProperty" : "value",
"selectThreshold" : 0.3,
"encrypted" : false,
"properties" : { },
"customConditional" : "",
"logic" : [ ],
"tags" : [ ],
"dataSrc" : "custom",
"searchEnabled" : false,
"tabs" : null,
"reorder" : false,
"lazyLoad" : false,
"selectValues" : "",
"disableLimit" : false,
"sort" : "",
"reference" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"limit" : 100,
"filter" : "",
"searchField" : "",
"minSearch" : 0,
"readOnlyValue" : false,
"authenticate" : false,
"template" : "<span>{{ item.label }}</span>",
"selectFields" : "",
"customSearchCriteria" : "",
"searchThreshold" : 0.3,
"fuseOptions" : { },
"customOptions" : { },
"infiniteScroll" : false,
"clearValueIfNotInItems" : false,
"clientSideFilter" : "",
"id" : "e9osarl"
}, {
"label" : "Bitte hinterlegen Sie einen Kommentar",
"isUploadEnabled" : false,
"showWordCount" : false,
"showCharCount" : false,
"autofocus" : true,
"tableView" : true,
"alwaysEnabled" : false,
"wysiwyg" : "",
"rows" : 5,
"type" : "textarea",
"input" : true,
"key" : "approve_comment:createComment",
"defaultValue" : "",
"validate" : {
"unique" : false,
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false,
"minLength" : "",
"maxLength" : "",
"minWords" : "",
"maxWords" : "",
"pattern" : ""
},
"properties" : { },
"tags" : [ ],
"inputFormat" : "plain",
"spellcheck" : true,
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"encrypted" : false,
"logic" : [ ],
"customConditional" : "",
"uploadUrl" : "",
"uploadOptions" : "",
"uploadDir" : "",
"reorder" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"widget" : {
"format" : "yyyy-MM-dd hh:mm a",
"dateFormat" : "yyyy-MM-dd hh:mm a",
"saveAs" : "text"
},
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"mask" : false,
"inputType" : "text",
"inputMask" : "",
"editor" : "",
"id" : "e3y1fri"
} ]
}

@ -0,0 +1,87 @@
{
"name" : "Anhänge",
"configKey" : "attachments",
"page" : 0,
"components" : [ {
"dropzoneConfig" : {
"maxFilesize" : "10",
"dictDefaultMessage" : "Dateien zum Anhängen/Hochladen ablegen oder durchsuchen",
"dictHelpText" : "Maximale Dateigröße: {{config.maxFilesize}}MB. Akzeptierte Dateitypen: Office-Dokumente und Bilder.",
"acceptedFiles" : ".pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, image/*, .csv, .xml, .txt",
"paramName" : "content",
"url" : "api/scope/{{context.scopeId}}/process/{{context.processId}}/attachment"
},
"columns" : [ {
"name" : "Name",
"property" : "name",
"value" : "",
"type" : "filename",
"width" : "20%"
}, {
"name" : "Erstellt am",
"property" : "creationDate",
"type" : "date",
"value" : "{{moment(creationDate).format('DD.MM.YYYY HH:mm:ss')}}",
"width" : "80%"
} ],
"label" : "Anlagen",
"deleteUrl" : "api/scope/{{context.scopeId}}/process/{{context.processId}}/attachment/{{attachmentId}}",
"downloadUrl" : "api/scope/{{context.scopeId}}/process/{{context.processId}}/attachment-data/{{attachmentId}}",
"resolveUserDataURL" : "api/scope/{{context.scopeId}}/process/{{context.processId}}/users?id.equals={{userId}}",
"csrfCookiePath" : "XSRF-TOKEN",
"taggingExpression" : "",
"button" : {
"iconOnly" : true,
"removeVisibleWhen" : "return false;",
"showVersion" : false,
"showOnlyCurrentVersion" : false,
"showCheckboxCurrentVersion" : false
},
"mask" : false,
"tableView" : true,
"type" : "attachments",
"input" : true,
"key" : "anlagen",
"components" : [ ],
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : true,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"id" : "e9zp29e"
} ]
}

@ -0,0 +1,435 @@
{
"name" : "Kopfzeile",
"configKey" : "header",
"page" : 0,
"components" : [ {
"input" : false,
"tableView" : false,
"columns" : [ {
"components" : [ {
"labelPosition" : "left-right",
"label" : "Ersteller",
"mask" : false,
"disabled" : true,
"tableView" : true,
"type" : "select",
"input" : true,
"key" : "creation_user_id",
"validate" : {
"unique" : false,
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false
},
"data" : {
"headers" : [ {
"key" : "",
"value" : ""
} ],
"url" : "api/v1/scopes/{{context.scopeId}}/processes/{{context.processId}}/users?id.equals={{data.creation_user_id}}",
"values" : [ ],
"json" : "",
"resource" : "",
"custom" : ""
},
"properties" : { },
"tags" : [ ],
"defaultValue" : "",
"dataSrc" : "url",
"lazyLoad" : false,
"valueProperty" : "id",
"selectValues" : "",
"disableLimit" : false,
"template" : "<span>{{[item.firstName, item.lastName].filter(Boolean).join(' ')}}</span>",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"filter" : "",
"searchEnabled" : false,
"searchField" : "",
"minSearch" : 0,
"authenticate" : false,
"selectFields" : "",
"id" : "eiwhw5a"
} ],
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : true,
"key" : "",
"tableView" : true,
"label" : "",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"id" : "eshoyow"
}, {
"components" : [ {
"labelPosition" : "left-right",
"label" : "Erstellt am",
"format" : "dd.MM.yyyy",
"mask" : false,
"tableView" : true,
"type" : "datetime",
"input" : true,
"key" : "creation_date",
"suffix" : true,
"widget" : {
"type" : "calendar",
"displayInTimezone" : "viewer",
"language" : "en",
"useLocaleSettings" : false,
"allowInput" : true,
"mode" : "single",
"enableTime" : true,
"noCalendar" : false,
"format" : "dd-MM-yyyy",
"defaultDate" : "",
"hourIncrement" : 1,
"minuteIncrement" : 1,
"time_24hr" : false,
"minDate" : null,
"maxDate" : null
},
"defaultValue" : "",
"defaultDate" : "",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"useLocaleSettings" : false,
"allowInput" : true,
"enableDate" : true,
"enableTime" : true,
"displayInTimezone" : "viewer",
"timezone" : "",
"datepickerMode" : "day",
"datePicker" : {
"showWeeks" : true,
"startingDay" : 0,
"initDate" : "",
"minMode" : "day",
"maxMode" : "year",
"yearRows" : 4,
"yearColumns" : 5,
"minDate" : null,
"maxDate" : null
},
"timePicker" : {
"hourStep" : 1,
"minuteStep" : 1,
"showMeridian" : true,
"readonlyInput" : false,
"mousewheel" : true,
"arrowkeys" : true
},
"id" : "epdpyie"
} ],
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : true,
"key" : "",
"tableView" : true,
"label" : "",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"id" : "ezh6tkh"
}, {
"components" : [ {
"input" : true,
"tableView" : false,
"label" : "Status",
"key" : "vorgang_status_text",
"defaultValue" : "",
"persistent" : false,
"clearOnHide" : false,
"conditional" : {
"show" : "",
"when" : null,
"eq" : ""
},
"type" : "textfield",
"labelPosition" : "left-right",
"tags" : [ ],
"properties" : {
"" : ""
},
"labelWidth" : 40,
"disabled" : true,
"lockKey" : true,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"hidden" : false,
"dataGridLabel" : false,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false,
"minLength" : "",
"maxLength" : "",
"minWords" : "",
"maxWords" : "",
"pattern" : ""
},
"mask" : false,
"inputType" : "text",
"inputMask" : "",
"id" : "eay7qmt"
} ],
"width" : 4,
"offset" : 0,
"push" : 0,
"pull" : 0,
"type" : "column",
"input" : true,
"key" : "",
"tableView" : true,
"label" : "",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : null,
"when" : null,
"eq" : ""
},
"id" : "ex6xngr"
} ],
"type" : "columns",
"tags" : [ ],
"conditional" : {
"show" : "",
"when" : null,
"eq" : ""
},
"properties" : {
"" : ""
},
"label" : "Columns",
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : false,
"hidden" : false,
"clearOnHide" : false,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"autoAdjust" : false,
"id" : "eoi1e6"
} ]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,653 @@
{
"name": "Simple Connect",
"configKey": "simple-connect",
"page": 0,
"components": [
{
"label": "Cluster",
"mask": false,
"tableView": true,
"alwaysEnabled": false,
"type": "container",
"input": true,
"key": "cluster",
"validate": {
"customMessage": "",
"json": "",
"required": false,
"custom": "",
"customPrivate": false
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"components": [
{
"label": "Cluster",
"mask": false,
"tableView": true,
"alwaysEnabled": false,
"type": "well",
"input": false,
"key": "cluster",
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"components": [
{
"label": "Stage",
"labelPosition": "left-left",
"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,
"custom": "",
"customPrivate": false,
"pattern": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"inputFormat": "plain",
"encrypted": false,
"properties": {
},
"tags": [
],
"customConditional": "",
"logic": [
],
"widget": {
"type": "",
"format": "yyyy-MM-dd hh:mm a",
"dateFormat": "yyyy-MM-dd hh:mm a",
"saveAs": "text"
},
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"protected": false,
"unique": false,
"persistent": true,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"mask": false,
"inputType": "text",
"inputMask": "",
"id": "ew5yzbt"
},
{
"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": "",
"required": true,
"minLength": null,
"maxLength": null,
"minWords": null,
"maxWords": null,
"custom": "",
"customPrivate": false,
"pattern": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"inputFormat": "plain",
"encrypted": false,
"properties": {
},
"tags": [
],
"customConditional": "",
"logic": [
],
"widget": {
"type": "",
"format": "yyyy-MM-dd hh:mm a",
"dateFormat": "yyyy-MM-dd hh:mm a",
"saveAs": "text"
},
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"protected": false,
"unique": false,
"persistent": true,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"mask": false,
"inputType": "text",
"inputMask": "",
"id": "egdtruh"
},
{
"label": "Size",
"labelPosition": "left-left",
"mask": false,
"disabled": true,
"tableView": true,
"alwaysEnabled": false,
"type": "number",
"input": true,
"key": "size",
"validate": {
"customMessage": "",
"json": "",
"required": true,
"min": null,
"max": null,
"custom": "",
"customPrivate": false,
"step": "any",
"integer": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"properties": {
},
"tags": [
],
"delimiter": false,
"requireDecimal": false,
"encrypted": false,
"decimalLimit": null,
"customConditional": "",
"logic": [
],
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": true,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"id": "e33y58"
},
{
"label": "Service",
"labelPosition": "left-left",
"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,
"custom": "",
"customPrivate": false,
"pattern": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"inputFormat": "plain",
"encrypted": false,
"properties": {
},
"tags": [
],
"customConditional": "",
"logic": [
],
"widget": {
"type": "",
"format": "yyyy-MM-dd hh:mm a",
"dateFormat": "yyyy-MM-dd hh:mm a",
"saveAs": "text"
},
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"protected": false,
"unique": false,
"persistent": true,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"mask": false,
"inputType": "text",
"inputMask": "",
"id": "eu0zrp9"
}
],
"tabs": null,
"reorder": false,
"properties": {
},
"tags": null,
"customConditional": "",
"logic": [
],
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": false,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelPosition": "top",
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"validate": {
"required": false,
"custom": "",
"customPrivate": false
},
"id": "e60dk9"
}
],
"tabs": null,
"encrypted": false,
"properties": {
},
"tags": [
],
"customConditional": "",
"logic": [
],
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": true,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelPosition": "top",
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"tree": true,
"id": "eu5stp"
},
{
"label": "progress_current",
"labelPosition": "left-left",
"hidden": true,
"mask": false,
"tableView": true,
"alwaysEnabled": false,
"type": "number",
"input": true,
"key": "progress_current",
"validate": {
"customMessage": "",
"json": "",
"required": false,
"custom": "",
"customPrivate": false,
"min": "",
"max": "",
"step": "any",
"integer": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"delimiter": false,
"requireDecimal": false,
"encrypted": false,
"properties": {
},
"tags": [
],
"decimalLimit": null,
"customConditional": "",
"logic": [
],
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": true,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"id": "exepewd"
},
{
"label": "progress_max",
"labelPosition": "left-left",
"hidden": true,
"mask": false,
"tableView": true,
"alwaysEnabled": false,
"type": "number",
"input": true,
"key": "progress_max",
"validate": {
"customMessage": "",
"json": "",
"required": false,
"custom": "",
"customPrivate": false,
"min": "",
"max": "",
"step": "any",
"integer": ""
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"delimiter": false,
"requireDecimal": false,
"encrypted": false,
"decimalLimit": null,
"properties": {
},
"tags": [
],
"customConditional": "",
"logic": [
],
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": true,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"refreshOn": "",
"clearOnRefresh": false,
"validateOn": "change",
"id": "eyaf4fl"
},
{
"label": "HTML",
"labelPosition": "left-left",
"className": "",
"attrs": [
{
"attr": "",
"value": ""
}
],
"content": "<div class=\"progress\">\n <div class=\"progress-bar progress-bar-striped progress-bar-animated\" role=\"progressbar\" aria-valuenow=\"{{ data.progress_current }}\" aria-valuemin=\"0\" aria-valuemax=\"{{ data.progress_max }}\" style=\"width: {{ data.progress_current / data.progress_max * 100 }}%\"></div>\n</div>",
"refreshOnChange": true,
"mask": false,
"tableView": true,
"alwaysEnabled": false,
"type": "htmlelement",
"input": false,
"key": "html",
"validate": {
"customMessage": "",
"json": "",
"required": false,
"custom": "",
"customPrivate": false
},
"conditional": {
"show": "",
"when": "",
"json": "",
"eq": ""
},
"tabs": null,
"encrypted": false,
"properties": {
},
"tags": null,
"customConditional": "",
"logic": [
],
"refreshOn": "data",
"reorder": false,
"placeholder": "",
"prefix": "",
"customClass": "",
"suffix": "",
"multiple": false,
"defaultValue": null,
"protected": false,
"unique": false,
"persistent": false,
"hidden": false,
"clearOnHide": true,
"dataGridLabel": false,
"labelWidth": 30,
"labelMargin": 3,
"description": "",
"errorLabel": "",
"tooltip": "",
"hideLabel": false,
"tabindex": "",
"disabled": false,
"autofocus": false,
"dbIndex": false,
"customDefaultValue": "",
"calculateValue": "",
"allowCalculateOverride": false,
"widget": null,
"clearOnRefresh": false,
"validateOn": "change",
"tag": "p",
"id": "e8dfoz"
}
]
}

@ -0,0 +1,423 @@
{
"name" : "Mandnat",
"configKey" : "tenant",
"page" : 0,
"components" : [ {
"label" : "Mandant",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "datasourcecontainer",
"input" : true,
"key" : "tenant",
"defaultValue" : {
"tenant" : {
"account_id" : "",
"id" : "",
"name" : ""
}
},
"validate" : {
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"data" : {
"url" : "http://localhost:8080/api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/tenants/query?id={{data.tenant_id}}",
"method" : "GET",
"values" : [ { } ]
},
"components" : [ {
"label" : "Mandant",
"hideLabel" : true,
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "container",
"input" : true,
"key" : "tenant",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"components" : [ {
"label" : "Mandant",
"mask" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "well",
"input" : false,
"key" : "tenant",
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"components" : [ {
"label" : "Id",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "id",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false,
"minLength" : "",
"maxLength" : "",
"minWords" : "",
"maxWords" : "",
"pattern" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"tabs" : null,
"properties" : { },
"inputFormat" : "plain",
"encrypted" : false,
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : "",
"format" : "yyyy-MM-dd hh:mm a",
"dateFormat" : "yyyy-MM-dd hh:mm a",
"saveAs" : "text"
},
"reorder" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"mask" : false,
"inputType" : "text",
"inputMask" : "",
"id" : "e96sc1h"
}, {
"label" : "Name",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "name",
"properties" : { },
"tags" : [ ],
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false,
"minLength" : "",
"maxLength" : "",
"minWords" : "",
"maxWords" : "",
"pattern" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"tabs" : null,
"inputFormat" : "plain",
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"widget" : {
"type" : "",
"format" : "yyyy-MM-dd hh:mm a",
"dateFormat" : "yyyy-MM-dd hh:mm a",
"saveAs" : "text"
},
"reorder" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"mask" : false,
"inputType" : "text",
"inputMask" : "",
"id" : "eyvg1sy"
}, {
"label" : "Key",
"labelPosition" : "left-left",
"allowMultipleMasks" : false,
"showWordCount" : false,
"showCharCount" : false,
"tableView" : true,
"alwaysEnabled" : false,
"type" : "textfield",
"input" : true,
"key" : "key",
"defaultValue" : "",
"validate" : {
"customMessage" : "",
"json" : "",
"required" : false,
"custom" : "",
"customPrivate" : false,
"minLength" : "",
"maxLength" : "",
"minWords" : "",
"maxWords" : "",
"pattern" : ""
},
"conditional" : {
"show" : "",
"when" : "",
"json" : "",
"eq" : ""
},
"tabs" : null,
"widget" : {
"type" : "",
"format" : "yyyy-MM-dd hh:mm a",
"dateFormat" : "yyyy-MM-dd hh:mm a",
"saveAs" : "text"
},
"properties" : { },
"reorder" : false,
"inputFormat" : "plain",
"encrypted" : false,
"tags" : null,
"customConditional" : "",
"logic" : [ ],
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"mask" : false,
"inputType" : "text",
"inputMask" : "",
"id" : "erag6o"
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"reorder" : false,
"customConditional" : "",
"logic" : [ ],
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : false,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"validate" : {
"required" : false,
"custom" : "",
"customPrivate" : false
},
"id" : "ethzgw6"
} ],
"tabs" : null,
"properties" : { },
"tags" : [ ],
"encrypted" : false,
"customConditional" : "",
"logic" : [ ],
"reorder" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"defaultValue" : null,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"tree" : true,
"id" : "eqqtn1v"
} ],
"tabs" : null,
"properties" : { },
"datapath" : "0",
"encrypted" : false,
"tags" : [ ],
"customConditional" : "",
"logic" : [ ],
"reorder" : false,
"placeholder" : "",
"prefix" : "",
"customClass" : "",
"suffix" : "",
"multiple" : false,
"protected" : false,
"unique" : false,
"persistent" : true,
"hidden" : false,
"clearOnHide" : true,
"dataGridLabel" : false,
"labelPosition" : "top",
"labelWidth" : 30,
"labelMargin" : 3,
"description" : "",
"errorLabel" : "",
"tooltip" : "",
"hideLabel" : false,
"tabindex" : "",
"disabled" : false,
"autofocus" : false,
"dbIndex" : false,
"customDefaultValue" : "",
"calculateValue" : "",
"allowCalculateOverride" : false,
"widget" : null,
"refreshOn" : "",
"clearOnRefresh" : false,
"validateOn" : "change",
"dataSrc" : "url",
"tree" : true,
"id" : "er4h7mh"
} ]
}

@ -0,0 +1,83 @@
{
"name" : "simple-connect",
"configKey" : "simple-connect",
"tabExpression" : "{{ data.cluster.stage }}-{{ data.tenant.name }}-{{ data.cluster.name }}",
"readonlyExpression" : "data.vorgang_status > 10",
"components" : [ {
"type" : "columns",
"key" : "dossier",
"columns" : [ {
"components" : [ {
"type" : "form",
"key" : "header",
"readonlyExpression" : "true"
}, {
"type" : "html",
"content" : "<hr>"
}, {
"type" : "columns",
"key" : "first-column",
"columns" : [ {
"components" : [ {
"type" : "page",
"key" : "dossier-page",
"toc" : "left",
"sections" : [ {
"type" : "section",
"key" : "master-data",
"title" : "Stammdaten",
"components" : [ {
"type" : "form",
"key" : "tenant",
"readonlyExpression" : "true"
} ]
}, {
"type" : "section",
"key" : "smardigo",
"title" : "Smardigo",
"components" : [ {
"type" : "form",
"key" : "simple-connect"
} ]
}, {
"type" : "section",
"key" : "dossier-attachments",
"title" : "Anhänge",
"components" : [ {
"type" : "form",
"key" : "attachments"
} ]
}, {
"type" : "section",
"key" : "dossier-comments",
"title" : "Kommentare",
"components" : [ {
"type" : "comments",
"key" : "comments"
} ]
}, {
"type" : "section",
"key" : "dossier-history",
"title" : "Protokoll",
"components" : [ {
"type" : "history",
"key" : "history"
} ]
} ]
} ],
"width" : "9"
}, {
"components" : [ {
"type" : "help-text",
"key" : "help-text"
}, {
"type" : "action-list",
"key" : "action-list"
} ],
"width" : "350px"
} ]
} ],
"width" : "12"
} ]
} ]
}

@ -0,0 +1 @@
scopeId=provisioning

@ -0,0 +1,13 @@
{
"configKey" : "policy",
"configType" : "policy",
"name" : "Policies",
"policies" : [ {
"id" : "read_write_all",
"name" : "Read/Write all",
"effect" : "allow",
"actions" : [ "read", "write" ],
"resources" : [ "variables:simple-connect:*" ],
"conditions" : [ ]
} ]
}

@ -0,0 +1,8 @@
{
"name" : "Simple Connect",
"configKey" : "simple-connect-fallback",
"processDefinitionKey" : "simple-connect",
"columns" : [ ],
"sorts" : [ ],
"filters" : [ ]
}

@ -0,0 +1,68 @@
{
"name": "Simple Connect",
"configKey": "simple-connect",
"processDefinitionKey": "simple-connect",
"columns": [
{
"key": "id",
"name": "ID",
"width": 50,
"hidden": true
},
{
"key": "process_definition_key",
"name": "Prozess",
"width": 100,
"hidden": true
},
{
"key": "creation_date",
"name": "Erstelldatum",
"width": 100
},
{
"key": "tenant.name",
"name": "Mandant Name",
"width": 100
},
{
"key": "tenant.key",
"name": "Mandant Schlüssel",
"width": 100
},
{
"key": "creation_user_id",
"name": "Ersteller",
"width": 150
},
{
"key": "vorgang_status_text",
"name": "Status",
"width": 100
},
{
"key": "candidateGroups",
"name": "Gruppen",
"width": 100,
"hidden": true
}
],
"filters": [
{
"name": "Creation User",
"key": "creation_user_id",
"defaultOption": {
"key": "default",
"name": "All"
}
},
{
"name": "State",
"key": "process_state_text",
"defaultOption": {
"key": "default",
"name": "All"
}
}
]
}

@ -0,0 +1,43 @@
{
"name" : "Simple Connect",
"configKey" : "simple-connect",
"configType" : "process-variable-declaration",
"variableDeclarations" : {
"antrag_decission" : {
"type" : "string",
"classification" : "PRIVATE"
},
"cluster" : {
"type" : "object",
"classification" : "PRIVATE"
},
"creation_date" : {
"type" : "date",
"classification" : "PRIVATE"
},
"creation_user_id" : {
"type" : "userId",
"classification" : "PRIVATE"
},
"edit_tenant" : {
"type" : "boolean",
"classification" : "PRIVATE"
},
"progress_current" : {
"type" : "long",
"classification" : "PRIVATE"
},
"progress_max" : {
"type" : "long",
"classification" : "PRIVATE"
},
"tenant" : {
"type" : "object",
"classification" : "PRIVATE"
},
"wizard_selection" : {
"type" : "string",
"classification" : "PRIVATE"
}
}
}

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" id="Definitions_1p0mp6a" name="zaziel-pruefer" namespace="http://camunda.org/schema/1.0/dmn" exporter="Camunda Modeler" exporterVersion="4.6.0">
<decision id="investigator" name="investigator">
<decisionTable id="decisionTable_1" hitPolicy="RULE ORDER">
<input id="InputClause_19ntyko" label="Tenant">
<inputExpression id="LiteralExpression_0nad4el" typeRef="string">
<text>tenant_id</text>
</inputExpression>
</input>
<output id="output_1" label="Investigator" name="investigator_group" typeRef="string" />
<rule id="DecisionRule_1bujqal">
<inputEntry id="UnaryTests_0zybuae">
<text>-</text>
</inputEntry>
<outputEntry id="LiteralExpression_1w7snpv">
<text>"head"</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<dmndi:DMNDI>
<dmndi:DMNDiagram id="DMNDiagram_0sx9u2x">
<dmndi:DMNShape id="DMNShape_0gden1d" dmnElementRef="investigator">
<dc:Bounds height="80" width="180" x="150" y="80" />
</dmndi:DMNShape>
</dmndi:DMNDiagram>
</dmndi:DMNDI>
</definitions>

@ -0,0 +1,968 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:bioc="http://bpmn.io/schema/bpmn/biocolor/1.0" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.6.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:signal id="Signal_1rr7wdd" name="Signal_05vo0km" />
<bpmn2:collaboration id="Collaboration_0oahy0i">
<bpmn2:participant id="Participant_19lpjee" name="Simple Connect" processRef="simple-connect" />
<bpmn2:participant id="Participant_08rb9rc" name="Smardigo Management Action" processRef="smardigo-management-action" />
</bpmn2:collaboration>
<bpmn2:process id="simple-connect" name="Simple Connect" isExecutable="true" camunda:candidateStarterGroups="user">
<bpmn2:intermediateCatchEvent id="Event_16oe30h" name="Mandanten aktualisieren">
<bpmn2:outgoing>Flow_1bvsxg3</bpmn2:outgoing>
<bpmn2:linkEventDefinition id="LinkEventDefinition_1q2a0mv" name="Mandanten aktualisieren" />
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="Event_02yqig0" name="Antrag abbrechen">
<bpmn2:outgoing>Flow_0xsem7d</bpmn2:outgoing>
<bpmn2:linkEventDefinition id="LinkEventDefinition_05lk727" name="Antrag abbrechen" />
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateThrowEvent id="Event_14qss0g" name="Status &#34;Antrag abgebrochen&#34; setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${91}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Antrag abgebrochen</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0xsem7d</bpmn2:incoming>
<bpmn2:outgoing>Flow_0fqbjt7</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:intermediateThrowEvent id="Event_1mg53lo">
<bpmn2:incoming>Flow_0fqbjt7</bpmn2:incoming>
<bpmn2:outgoing>Flow_1x24mk0</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1vugqt5" signalRef="Signal_0kz05aq" />
</bpmn2:intermediateThrowEvent>
<bpmn2:endEvent id="Event_1ptbcds">
<bpmn2:incoming>Flow_1x24mk0</bpmn2:incoming>
<bpmn2:terminateEventDefinition id="TerminateEventDefinition_0h5xsa2" />
</bpmn2:endEvent>
<bpmn2:startEvent id="Event_0icoemn" camunda:formKey="simple-connect-create">
<bpmn2:outgoing>Flow_1rtcnw8</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:subProcess id="Activity_1pzykoz" name="">
<bpmn2:incoming>Flow_1bvsxg3</bpmn2:incoming>
<bpmn2:startEvent id="Event_151qqhq">
<bpmn2:outgoing>Flow_029ts9n</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:endEvent id="Event_0q35ml0">
<bpmn2:incoming>Flow_029ts9n</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="Flow_029ts9n" sourceRef="Event_151qqhq" targetRef="Event_0q35ml0" />
</bpmn2:subProcess>
<bpmn2:sequenceFlow id="Flow_1bvsxg3" sourceRef="Event_16oe30h" targetRef="Activity_1pzykoz" />
<bpmn2:sequenceFlow id="Flow_0jynsyw" sourceRef="Event_01lmoj6" targetRef="Event_1xwyizj" />
<bpmn2:sequenceFlow id="Flow_0xsem7d" sourceRef="Event_02yqig0" targetRef="Event_14qss0g" />
<bpmn2:sequenceFlow id="Flow_0fqbjt7" sourceRef="Event_14qss0g" targetRef="Event_1mg53lo" />
<bpmn2:sequenceFlow id="Flow_1x24mk0" sourceRef="Event_1mg53lo" targetRef="Event_1ptbcds" />
<bpmn2:sequenceFlow id="Flow_1rtcnw8" sourceRef="Event_0icoemn" targetRef="Activity_12c4494" />
<bpmn2:sequenceFlow id="Flow_1gqgiz8" sourceRef="Activity_0a23f4b" targetRef="Event_0jsbyv8" />
<bpmn2:sequenceFlow id="Flow_17rbwn1" sourceRef="Activity_0gbmbs7" targetRef="Gateway_05puic7" />
<bpmn2:sequenceFlow id="Flow_0btq5mg" sourceRef="Activity_12c4494" targetRef="Activity_0a23f4b" />
<bpmn2:exclusiveGateway id="Gateway_05puic7">
<bpmn2:incoming>Flow_17rbwn1</bpmn2:incoming>
<bpmn2:outgoing>Flow_13jykf9</bpmn2:outgoing>
<bpmn2:outgoing>Flow_1hsqawc</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:intermediateThrowEvent id="Event_1up2qiu" name="Status &#34;Antrag gesendet&#34; setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${15}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Antrag gesendet</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1hsqawc</bpmn2:incoming>
<bpmn2:outgoing>Flow_0ex5zxa</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:parallelGateway id="Gateway_17ev5pq">
<bpmn2:incoming>Flow_0ex5zxa</bpmn2:incoming>
<bpmn2:outgoing>Flow_0zcb7z2</bpmn2:outgoing>
<bpmn2:outgoing>Flow_0ki8zi3</bpmn2:outgoing>
<bpmn2:outgoing>Flow_19if6oq</bpmn2:outgoing>
</bpmn2:parallelGateway>
<bpmn2:businessRuleTask id="Activity_1teq2mv" name="Prüfer ermitteln" camunda:resultVariable="current_investigator_group" camunda:decisionRef="investigator" camunda:mapDecisionResult="collectEntries">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="tenant_id">${tenant.id}</camunda:inputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0zcb7z2</bpmn2:incoming>
<bpmn2:outgoing>Flow_1y5ddsi</bpmn2:outgoing>
</bpmn2:businessRuleTask>
<bpmn2:userTask id="Activity_1x7inb6" name="Prüfung des Antrags übernehmen" camunda:candidateGroups="${current_investigator_group}">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="pruefer_id">
<camunda:script scriptFormat="groovy">import de.tolina.connect.common.variable.Variables
def authenticatedUserId = users.currentUserId()
Variables.userId(authenticatedUserId)</camunda:script>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1y5ddsi</bpmn2:incoming>
<bpmn2:incoming>Flow_0jdr8ms</bpmn2:incoming>
<bpmn2:outgoing>Flow_1sqrzau</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:userTask id="Activity_1u3dzx9" name="Über Freigabe entscheiden" camunda:formKey="approve" camunda:candidateGroups="${current_investigator_group}">
<bpmn2:incoming>Flow_1sqrzau</bpmn2:incoming>
<bpmn2:outgoing>Flow_1lmopkj</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:exclusiveGateway id="Gateway_0vvyf1a">
<bpmn2:incoming>Flow_1lmopkj</bpmn2:incoming>
<bpmn2:outgoing>Flow_1vbvp2f</bpmn2:outgoing>
<bpmn2:outgoing>Flow_0jdr8ms</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:exclusiveGateway id="Gateway_0o4vcdi">
<bpmn2:incoming>Flow_1vbvp2f</bpmn2:incoming>
<bpmn2:outgoing>Flow_0m834s1</bpmn2:outgoing>
<bpmn2:outgoing>Flow_1cvz8xm</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:intermediateThrowEvent id="Event_1ey3eu7" name="Status &#34;Antrag freigegeben&#34; setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${30}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Antrag freigegeben</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1cvz8xm</bpmn2:incoming>
<bpmn2:outgoing>Flow_1w2pl97</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:intermediateThrowEvent id="Event_081pcx9" name="Antrag abbrechen">
<bpmn2:incoming>Flow_0m834s1</bpmn2:incoming>
<bpmn2:linkEventDefinition id="LinkEventDefinition_060fbrb" name="Antrag abbrechen" />
</bpmn2:intermediateThrowEvent>
<bpmn2:sequenceFlow id="Flow_1hsqawc" name="Antrag senden" sourceRef="Gateway_05puic7" targetRef="Event_1up2qiu">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${$action == 'senden'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_13jykf9" name="Antrag abbrechen" sourceRef="Gateway_05puic7" targetRef="Event_0c4cpxx">
<bpmn2:extensionElements>
<camunda:properties>
<camunda:property name="validate_form" value="false" />
<camunda:property name="sort_order" value="99" />
<camunda:property name="discard_form_changes" value="true" />
</camunda:properties>
</bpmn2:extensionElements>
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${$action == 'abbrechen'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_0ex5zxa" sourceRef="Event_1up2qiu" targetRef="Gateway_17ev5pq" />
<bpmn2:sequenceFlow id="Flow_0zcb7z2" sourceRef="Gateway_17ev5pq" targetRef="Activity_1teq2mv" />
<bpmn2:sequenceFlow id="Flow_0ki8zi3" sourceRef="Gateway_17ev5pq" targetRef="Event_01ux8pt" />
<bpmn2:sequenceFlow id="Flow_1y5ddsi" sourceRef="Activity_1teq2mv" targetRef="Activity_1x7inb6" />
<bpmn2:sequenceFlow id="Flow_0jdr8ms" name="Abbrechen" sourceRef="Gateway_0vvyf1a" targetRef="Activity_1x7inb6">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${$action == 'abbrechen'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_1sqrzau" name="Über Freigabe entscheiden" sourceRef="Activity_1x7inb6" targetRef="Activity_1u3dzx9" />
<bpmn2:sequenceFlow id="Flow_1lmopkj" sourceRef="Activity_1u3dzx9" targetRef="Gateway_0vvyf1a" />
<bpmn2:sequenceFlow id="Flow_1vbvp2f" name="Speichern" sourceRef="Gateway_0vvyf1a" targetRef="Gateway_0o4vcdi">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${$action == 'speichern'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_0m834s1" name="Antrag abgeleht" sourceRef="Gateway_0o4vcdi" targetRef="Event_081pcx9">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${antrag_decission== 'antragAblehnen'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_1cvz8xm" name="Antrag genehmigt" sourceRef="Gateway_0o4vcdi" targetRef="Event_1ey3eu7">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">${antrag_decission== 'antragGenehmigen'}</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="Flow_1w2pl97" sourceRef="Event_1ey3eu7" targetRef="Gateway_0e23stu" />
<bpmn2:userTask id="Activity_0gbmbs7" name="Antrag erfassen" camunda:candidateGroups="user">
<bpmn2:incoming>Flow_0dybqr7</bpmn2:incoming>
<bpmn2:outgoing>Flow_17rbwn1</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="Flow_0dybqr7" sourceRef="Event_0jsbyv8" targetRef="Activity_0gbmbs7" />
<bpmn2:intermediateThrowEvent id="Event_0jsbyv8" name="Status &#34;Neu&#34; setzen" camunda:asyncAfter="true">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${10}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Neu</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1gqgiz8</bpmn2:incoming>
<bpmn2:outgoing>Flow_0dybqr7</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:serviceTask id="Activity_0a23f4b" name="Mandant speichern" camunda:delegateExpression="${dataEntity.save(&#39;tenants&#39;, &#39;tenant&#39;)}">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="tenant_id">${tenant.id}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0btq5mg</bpmn2:incoming>
<bpmn2:outgoing>Flow_1gqgiz8</bpmn2:outgoing>
</bpmn2:serviceTask>
<bpmn2:task id="Activity_12c4494" name="Defaultwerte setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${0}</camunda:outputParameter>
<camunda:outputParameter name="progress_max">${1}</camunda:outputParameter>
<camunda:outputParameter name="cluster">
<camunda:map>
<camunda:entry key="stage">dev</camunda:entry>
<camunda:entry key="name" />
<camunda:entry key="size">${1}</camunda:entry>
<camunda:entry key="service">connect</camunda:entry>
</camunda:map>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1rtcnw8</bpmn2:incoming>
<bpmn2:outgoing>Flow_0btq5mg</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:boundaryEvent id="Event_01lmoj6" attachedToRef="Activity_1pzykoz">
<bpmn2:outgoing>Flow_0jynsyw</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1ihpyz0" signalRef="Signal_0kz05aq" />
</bpmn2:boundaryEvent>
<bpmn2:endEvent id="Event_1xwyizj">
<bpmn2:incoming>Flow_0jynsyw</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:callActivity id="Activity_1hpnorc" name="Service erstellen" calledElement="smardigo-management-action">
<bpmn2:extensionElements>
<camunda:in businessKey="#{execution.processBusinessKey}" />
<camunda:in variables="all" />
<camunda:in sourceExpression="create-service" target="smardigoManagementAction" />
<camunda:in sourceExpression="Service erstellen" target="comment" />
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${5}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1f0iyrk</bpmn2:incoming>
<bpmn2:outgoing>Flow_11k5c1y</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:userTask id="Activity_1mctiwx" camunda:candidateGroups="user">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="pruefer_id">
<camunda:script scriptFormat="groovy">import de.tolina.connect.common.variable.Variables
def authenticatedUserId = users.currentUserId()
Variables.userId(authenticatedUserId)</camunda:script>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_15fkmn4</bpmn2:incoming>
</bpmn2:userTask>
<bpmn2:intermediateThrowEvent id="Event_0fvzd86" name="Status &#34;Service gestartet&#34; setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${50}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Service gestartet</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_11k5c1y</bpmn2:incoming>
<bpmn2:outgoing>Flow_1ebhrqm</bpmn2:outgoing>
<bpmn2:outgoing>Flow_15fkmn4</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:userTask id="Activity_0m3ggec" name="Service löschen" camunda:candidateGroups="maintainer">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="pruefer_id">
<camunda:script scriptFormat="groovy">import de.tolina.connect.common.variable.Variables
def authenticatedUserId = users.currentUserId()
Variables.userId(authenticatedUserId)</camunda:script>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1ebhrqm</bpmn2:incoming>
<bpmn2:outgoing>Flow_1pwn0n9</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:endEvent id="Event_0flb2m7">
<bpmn2:incoming>Flow_1pwn0n9</bpmn2:incoming>
<bpmn2:terminateEventDefinition id="TerminateEventDefinition_0v3zxua" />
</bpmn2:endEvent>
<bpmn2:callActivity id="Activity_1t227a4" name="Server erstellen" calledElement="smardigo-management-action">
<bpmn2:extensionElements>
<camunda:in businessKey="#{execution.processBusinessKey}" />
<camunda:in variables="all" />
<camunda:in sourceExpression="create-server" target="smardigoManagementAction" />
<camunda:in sourceExpression="Server provisionieren" target="comment" />
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${2}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_11ki58f</bpmn2:incoming>
<bpmn2:outgoing>Flow_1eku1o4</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:callActivity id="Activity_12drjd3" name="Datenbanken erstellen" calledElement="smardigo-management-action">
<bpmn2:extensionElements>
<camunda:in businessKey="#{execution.processBusinessKey}" />
<camunda:in variables="all" />
<camunda:in sourceExpression="create-database" target="smardigoManagementAction" />
<camunda:in sourceExpression="Datenbanken erstellen" target="comment" />
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${3}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1eku1o4</bpmn2:incoming>
<bpmn2:outgoing>Flow_0pvr263</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:callActivity id="Activity_02j0299" name="Realm erstellen" calledElement="smardigo-management-action">
<bpmn2:extensionElements>
<camunda:in businessKey="#{execution.processBusinessKey}" />
<camunda:in variables="all" />
<camunda:in sourceExpression="create-realm" target="smardigoManagementAction" />
<camunda:in sourceExpression="Realm erstellen" target="comment" />
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${4}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0pvr263</bpmn2:incoming>
<bpmn2:outgoing>Flow_1f0iyrk</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:task id="Activity_0poyoeb" name="Initialize Progress">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="progress_current">${1}</camunda:outputParameter>
<camunda:outputParameter name="progress_max">${5}</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0bzl5jh</bpmn2:incoming>
<bpmn2:outgoing>Flow_11ki58f</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="Flow_1f0iyrk" sourceRef="Activity_02j0299" targetRef="Activity_1hpnorc" />
<bpmn2:sequenceFlow id="Flow_11k5c1y" sourceRef="Activity_1hpnorc" targetRef="Event_0fvzd86" />
<bpmn2:sequenceFlow id="Flow_15fkmn4" sourceRef="Event_0fvzd86" targetRef="Activity_1mctiwx" />
<bpmn2:sequenceFlow id="Flow_1ebhrqm" sourceRef="Event_0fvzd86" targetRef="Activity_0m3ggec" />
<bpmn2:sequenceFlow id="Flow_1pwn0n9" sourceRef="Activity_0m3ggec" targetRef="Event_0flb2m7" />
<bpmn2:sequenceFlow id="Flow_11ki58f" sourceRef="Activity_0poyoeb" targetRef="Activity_1t227a4" />
<bpmn2:sequenceFlow id="Flow_1eku1o4" sourceRef="Activity_1t227a4" targetRef="Activity_12drjd3" />
<bpmn2:sequenceFlow id="Flow_0pvr263" sourceRef="Activity_12drjd3" targetRef="Activity_02j0299" />
<bpmn2:sequenceFlow id="Flow_1myfmc6" sourceRef="Gateway_0e23stu" targetRef="Event_0zk6p0h" />
<bpmn2:parallelGateway id="Gateway_0e23stu">
<bpmn2:incoming>Flow_1w2pl97</bpmn2:incoming>
<bpmn2:outgoing>Flow_1myfmc6</bpmn2:outgoing>
<bpmn2:outgoing>Flow_1onhxkb</bpmn2:outgoing>
</bpmn2:parallelGateway>
<bpmn2:sequenceFlow id="Flow_1onhxkb" sourceRef="Gateway_0e23stu" targetRef="Activity_08ca2ix" />
<bpmn2:intermediateThrowEvent id="Event_0zk6p0h" name="Status &#34;Service wird gestartet&#34; setzen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="vorgang_status">${40}</camunda:outputParameter>
<camunda:outputParameter name="vorgang_status_text">Service wird gestartet</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1myfmc6</bpmn2:incoming>
<bpmn2:outgoing>Flow_0bzl5jh</bpmn2:outgoing>
</bpmn2:intermediateThrowEvent>
<bpmn2:sequenceFlow id="Flow_0bzl5jh" sourceRef="Event_0zk6p0h" targetRef="Activity_0poyoeb" />
<bpmn2:sequenceFlow id="Flow_19if6oq" sourceRef="Gateway_17ev5pq" targetRef="Activity_0z5dccf" />
<bpmn2:intermediateThrowEvent id="Event_01ux8pt" name="Mandanten aktualisieren">
<bpmn2:incoming>Flow_0ki8zi3</bpmn2:incoming>
<bpmn2:linkEventDefinition id="LinkEventDefinition_1mzobgm" name="Mandanten aktualisieren" />
</bpmn2:intermediateThrowEvent>
<bpmn2:intermediateThrowEvent id="Event_0c4cpxx" name="Antrag abbrechen">
<bpmn2:incoming>Flow_13jykf9</bpmn2:incoming>
<bpmn2:linkEventDefinition id="LinkEventDefinition_1mcbbqi" name="Antrag abbrechen" />
</bpmn2:intermediateThrowEvent>
<bpmn2:userTask id="Activity_08ca2ix" name="Maintenance" camunda:candidateGroups="maintainer">
<bpmn2:incoming>Flow_1onhxkb</bpmn2:incoming>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="Flow_0cxiaxt" sourceRef="Activity_13xz3ca" targetRef="Event_0pybjkb" />
<bpmn2:sequenceFlow id="Flow_0lrfzsu" sourceRef="Activity_0z5dccf" targetRef="Activity_1dhege2" />
<bpmn2:task id="Activity_0z5dccf" name="Benachrichtigung erzeugen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="section">
<camunda:map>
<camunda:entry key="activityTitle">Neuer Antrag für ${tenant.name}</camunda:entry>
<camunda:entry key="activitySubtitle">${cluster.stage}-${tenant.key}-${cluster.name} for ${cluster.service}</camunda:entry>
<camunda:entry key="activityImage">https://img.welt.de/img/vermischtes/bilder-des-tages/mobile207066931/1242503207-ci102l-w1024/Coronavirus-USA.jpg</camunda:entry>
</camunda:map>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_19if6oq</bpmn2:incoming>
<bpmn2:outgoing>Flow_0lrfzsu</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="Flow_1jfvhvl" sourceRef="Activity_1dhege2" targetRef="Activity_13xz3ca" />
<bpmn2:task id="Activity_1dhege2" name="Benachrichtigung erzeugen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="sections">
<camunda:list>
<camunda:value>${section}</camunda:value>
</camunda:list>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0lrfzsu</bpmn2:incoming>
<bpmn2:outgoing>Flow_1jfvhvl</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:serviceTask id="Activity_13xz3ca" name="Team-Benachrichtigung senden" camunda:delegateExpression="${rest.post(&#39;teams&#39;, &#39;/&#39;).responseJSONObject(&#39;teamsResponse&#39;).bodyJSONMap(teamsRequestBody)}">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="teamsRequestBody">
<camunda:map>
<camunda:entry key="@type">MessageCard</camunda:entry>
<camunda:entry key="@context">http://schema.org/extensions</camunda:entry>
<camunda:entry key="themeColor">0076D7</camunda:entry>
<camunda:entry key="summary">Neuer Antrag für ${tenant.name}</camunda:entry>
<camunda:entry key="sections">${sections}</camunda:entry>
</camunda:map>
</camunda:inputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1jfvhvl</bpmn2:incoming>
<bpmn2:outgoing>Flow_0cxiaxt</bpmn2:outgoing>
</bpmn2:serviceTask>
<bpmn2:endEvent id="Event_0pybjkb">
<bpmn2:incoming>Flow_0cxiaxt</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:textAnnotation id="TextAnnotation_030pu4t">
<bpmn2:text>Service auf Server installieren
- Domain (Services)
- connect
- (wordpress)</bpmn2:text>
</bpmn2:textAnnotation>
<bpmn2:textAnnotation id="TextAnnotation_0friy7d">
<bpmn2:text>Shared Service
Server bei Hetzner erstellen
- Provisioning
- Domain (Administration)
- Networks
- Monitoring
- Logging</bpmn2:text>
</bpmn2:textAnnotation>
<bpmn2:textAnnotation id="TextAnnotation_0y086so">
<bpmn2:text>Shared Service
Datenbanken erstellen
- connect
- (wordpress)
- Credentials in Vorgang ablegen</bpmn2:text>
</bpmn2:textAnnotation>
<bpmn2:textAnnotation id="TextAnnotation_0zz15cn">
<bpmn2:text>Shared Service
Keycloak Realm mit Administrator Account
- Neuer Nutzer (connect-admin)
- Emailadresse des Erstellers
- Automatisch generiertes PW
- PW per EMail an Administrator</bpmn2:text>
</bpmn2:textAnnotation>
<bpmn2:association id="Association_06qxtm8" sourceRef="Activity_1hpnorc" targetRef="TextAnnotation_030pu4t" />
<bpmn2:association id="Association_1dnulqy" sourceRef="Activity_1t227a4" targetRef="TextAnnotation_0friy7d" />
<bpmn2:association id="Association_1qi0cw9" sourceRef="Activity_12drjd3" targetRef="TextAnnotation_0y086so" />
<bpmn2:association id="Association_147wpeh" sourceRef="Activity_02j0299" targetRef="TextAnnotation_0zz15cn" />
</bpmn2:process>
<bpmn2:message id="Message_1drsp54" name="server-created" />
<bpmn2:signal id="Signal_0kz05aq" name="antrag-abgeschlossen-${execution.getProcessInstanceId()}" />
<bpmn2:signal id="Signal_04iylf6" name="read-tenant-update" />
<bpmn2:signal id="Signal_0yvztnu" name="Signal_0kk0b5i" />
<bpmn2:message id="Message_13j1zir" name="create-database" />
<bpmn2:message id="Message_1df18gi" name="create-realm" />
<bpmn2:message id="Message_1in2mhs" name="create-server" />
<bpmn2:message id="Message_01xkrhl" name="create-service" />
<bpmn2:process id="smardigo-management-action" name="Smardigo Management Action" isExecutable="true">
<bpmn2:sequenceFlow id="Flow_13nom3k" sourceRef="Event_02kqmmg" targetRef="Activity_1elfmkh" />
<bpmn2:task id="Activity_0r5wmiv" name="Benachrichtigung erzeugen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="section">
<camunda:map>
<camunda:entry key="activityTitle">Neue Aufgabe</camunda:entry>
<camunda:entry key="activitySubtitle">${ansibleCommand}</camunda:entry>
<camunda:entry key="activityImage">https://img.welt.de/img/vermischtes/bilder-des-tages/mobile207066931/1242503207-ci102l-w1024/Coronavirus-USA.jpg</camunda:entry>
</camunda:map>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_01qpec5</bpmn2:incoming>
<bpmn2:outgoing>Flow_0jp0wmd</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="Activity_0aha85b" name="Benachrichtigung erzeugen">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:outputParameter name="sections">
<camunda:list>
<camunda:value>${section}</camunda:value>
</camunda:list>
</camunda:outputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0jp0wmd</bpmn2:incoming>
<bpmn2:outgoing>Flow_0m4h584</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:serviceTask id="Activity_1wqkr8t" name="Team-Benachrichtigung senden" camunda:delegateExpression="${rest.post(&#39;teams&#39;, &#39;/&#39;).responseJSONObject(&#39;teamsResponse&#39;).bodyJSONMap(teamsRequestBody)}">
<bpmn2:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="teamsRequestBody">
<camunda:map>
<camunda:entry key="@type">MessageCard</camunda:entry>
<camunda:entry key="@context">http://schema.org/extensions</camunda:entry>
<camunda:entry key="themeColor">0076D7</camunda:entry>
<camunda:entry key="summary">Neue Aufgabe: ${comment}</camunda:entry>
<camunda:entry key="sections">${sections}</camunda:entry>
</camunda:map>
</camunda:inputParameter>
</camunda:inputOutput>
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_0m4h584</bpmn2:incoming>
<bpmn2:outgoing>Flow_14vrrra</bpmn2:outgoing>
</bpmn2:serviceTask>
<bpmn2:sequenceFlow id="Flow_0jp0wmd" sourceRef="Activity_0r5wmiv" targetRef="Activity_0aha85b" />
<bpmn2:sequenceFlow id="Flow_0m4h584" sourceRef="Activity_0aha85b" targetRef="Activity_1wqkr8t" />
<bpmn2:sequenceFlow id="Flow_14vrrra" sourceRef="Activity_1wqkr8t" targetRef="Event_0tax83l" />
<bpmn2:sequenceFlow id="Flow_0gcsmj7" sourceRef="Event_0tax83l" targetRef="Activity_136brby" />
<bpmn2:sequenceFlow id="Flow_01qpec5" sourceRef="Activity_1elfmkh" targetRef="Activity_0r5wmiv" />
<bpmn2:startEvent id="Event_02kqmmg" camunda:formKey="simple-connect-create">
<bpmn2:extensionElements>
<camunda:executionListener event="end">
<camunda:script scriptFormat="groovy" resource="ansible-start.groovy" />
</camunda:executionListener>
</bpmn2:extensionElements>
<bpmn2:outgoing>Flow_13nom3k</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:scriptTask id="Activity_1elfmkh" name="ansible-start.groovy" scriptFormat="groovy" camunda:resultVariable="ansibleCommand" camunda:resource="ansible-start.groovy">
<bpmn2:incoming>Flow_13nom3k</bpmn2:incoming>
<bpmn2:outgoing>Flow_01qpec5</bpmn2:outgoing>
</bpmn2:scriptTask>
<bpmn2:intermediateCatchEvent id="Event_0tax83l" name="Ausführung der Aktion abwarten">
<bpmn2:incoming>Flow_14vrrra</bpmn2:incoming>
<bpmn2:outgoing>Flow_0gcsmj7</bpmn2:outgoing>
<bpmn2:messageEventDefinition id="MessageEventDefinition_193tmaa" messageRef="Message_13oyyv2" />
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="Flow_1ju13h8" sourceRef="Activity_136brby" targetRef="Event_0hla739" />
<bpmn2:scriptTask id="Activity_136brby" name="ansible-end.groovy" scriptFormat="groovy" camunda:resource="ansible-end.groovy">
<bpmn2:incoming>Flow_0gcsmj7</bpmn2:incoming>
<bpmn2:outgoing>Flow_1ju13h8</bpmn2:outgoing>
</bpmn2:scriptTask>
<bpmn2:endEvent id="Event_0hla739">
<bpmn2:incoming>Flow_1ju13h8</bpmn2:incoming>
<bpmn2:terminateEventDefinition id="TerminateEventDefinition_16l1kke" />
</bpmn2:endEvent>
</bpmn2:process>
<bpmn2:message id="Message_13oyyv2" name="action-executed-${execution.getVariable(&#39;smardigoManagementAction&#39;)}" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_0oahy0i">
<bpmndi:BPMNShape id="Participant_19lpjee_di" bpmnElement="Participant_19lpjee" isHorizontal="true">
<dc:Bounds x="160" y="100" width="3368" height="1870" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1jfvhvl_di" bpmnElement="Flow_1jfvhvl">
<di:waypoint x="630" y="850" />
<di:waypoint x="550" y="850" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0lrfzsu_di" bpmnElement="Flow_0lrfzsu">
<di:waypoint x="810" y="850" />
<di:waypoint x="730" y="850" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0cxiaxt_di" bpmnElement="Flow_0cxiaxt">
<di:waypoint x="450" y="850" />
<di:waypoint x="388" y="850" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19if6oq_di" bpmnElement="Flow_19if6oq">
<di:waypoint x="995" y="850" />
<di:waypoint x="910" y="850" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0bzl5jh_di" bpmnElement="Flow_0bzl5jh">
<di:waypoint x="1698" y="1370" />
<di:waypoint x="1760" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1onhxkb_di" bpmnElement="Flow_1onhxkb">
<di:waypoint x="1590" y="1395" />
<di:waypoint x="1590" y="1660" />
<di:waypoint x="1760" y="1660" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1myfmc6_di" bpmnElement="Flow_1myfmc6">
<di:waypoint x="1615" y="1370" />
<di:waypoint x="1662" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0pvr263_di" bpmnElement="Flow_0pvr263">
<di:waypoint x="2310" y="1370" />
<di:waypoint x="2440" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1eku1o4_di" bpmnElement="Flow_1eku1o4">
<di:waypoint x="2080" y="1370" />
<di:waypoint x="2210" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11ki58f_di" bpmnElement="Flow_11ki58f">
<di:waypoint x="1860" y="1370" />
<di:waypoint x="1980" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pwn0n9_di" bpmnElement="Flow_1pwn0n9">
<di:waypoint x="3300" y="1370" />
<di:waypoint x="3392" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ebhrqm_di" bpmnElement="Flow_1ebhrqm">
<di:waypoint x="2908" y="1370" />
<di:waypoint x="3200" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_15fkmn4_di" bpmnElement="Flow_15fkmn4">
<di:waypoint x="2908" y="1370" />
<di:waypoint x="3000" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11k5c1y_di" bpmnElement="Flow_11k5c1y">
<di:waypoint x="2790" y="1370" />
<di:waypoint x="2872" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1f0iyrk_di" bpmnElement="Flow_1f0iyrk">
<di:waypoint x="2540" y="1370" />
<di:waypoint x="2690" y="1370" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0dybqr7_di" bpmnElement="Flow_0dybqr7">
<di:waypoint x="728" y="680" />
<di:waypoint x="810" y="680" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w2pl97_di" bpmnElement="Flow_1w2pl97">
<di:waypoint x="1590" y="1248" />
<di:waypoint x="1590" y="1345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1cvz8xm_di" bpmnElement="Flow_1cvz8xm">
<di:waypoint x="1590" y="1175" />
<di:waypoint x="1590" y="1212" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1596" y="1173" width="87" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0m834s1_di" bpmnElement="Flow_0m834s1">
<di:waypoint x="1615" y="1150" />
<di:waypoint x="1712" y="1150" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1621" y="1132" width="78" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1vbvp2f_di" bpmnElement="Flow_1vbvp2f">
<di:waypoint x="1590" y="1055" />
<di:waypoint x="1590" y="1125" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1605" y="1068" width="50" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1lmopkj_di" bpmnElement="Flow_1lmopkj">
<di:waypoint x="1480" y="1030" />
<di:waypoint x="1565" y="1030" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1sqrzau_di" bpmnElement="Flow_1sqrzau">
<di:waypoint x="1250" y="1030" />
<di:waypoint x="1380" y="1030" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1280" y="986" width="71" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0jdr8ms_di" bpmnElement="Flow_0jdr8ms">
<di:waypoint x="1590" y="1005" />
<di:waypoint x="1590" y="950" />
<di:waypoint x="1200" y="950" />
<di:waypoint x="1200" y="990" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1603" y="993" width="54" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1y5ddsi_di" bpmnElement="Flow_1y5ddsi">
<di:waypoint x="1070" y="1030" />
<di:waypoint x="1150" y="1030" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ki8zi3_di" bpmnElement="Flow_0ki8zi3">
<di:waypoint x="1045" y="850" />
<di:waypoint x="1182" y="850" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0zcb7z2_di" bpmnElement="Flow_0zcb7z2">
<di:waypoint x="1020" y="875" />
<di:waypoint x="1020" y="990" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ex5zxa_di" bpmnElement="Flow_0ex5zxa">
<di:waypoint x="1020" y="788" />
<di:waypoint x="1020" y="825" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_13jykf9_di" bpmnElement="Flow_13jykf9">
<di:waypoint x="1045" y="680" />
<di:waypoint x="1182" y="680" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1056" y="653" width="88" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1hsqawc_di" bpmnElement="Flow_1hsqawc">
<di:waypoint x="1020" y="705" />
<di:waypoint x="1020" y="752" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1034" y="715" width="72" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0btq5mg_di" bpmnElement="Flow_0btq5mg">
<di:waypoint x="430" y="680" />
<di:waypoint x="520" y="680" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_17rbwn1_di" bpmnElement="Flow_17rbwn1">
<di:waypoint x="910" y="680" />
<di:waypoint x="995" y="680" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1gqgiz8_di" bpmnElement="Flow_1gqgiz8">
<di:waypoint x="620" y="680" />
<di:waypoint x="692" y="680" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rtcnw8_di" bpmnElement="Flow_1rtcnw8">
<di:waypoint x="258" y="680" />
<di:waypoint x="330" y="680" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1x24mk0_di" bpmnElement="Flow_1x24mk0">
<di:waypoint x="508" y="310" />
<di:waypoint x="552" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0fqbjt7_di" bpmnElement="Flow_0fqbjt7">
<di:waypoint x="435" y="310" />
<di:waypoint x="472" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0xsem7d_di" bpmnElement="Flow_0xsem7d">
<di:waypoint x="358" y="310" />
<di:waypoint x="405" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0jynsyw_di" bpmnElement="Flow_0jynsyw">
<di:waypoint x="1078" y="369" />
<di:waypoint x="1122" y="369" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1bvsxg3_di" bpmnElement="Flow_1bvsxg3">
<di:waypoint x="728" y="310" />
<di:waypoint x="770" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_16oe30h_di" bpmnElement="Event_16oe30h">
<dc:Bounds x="692" y="292" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="683" y="332" width="62" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_02yqig0_di" bpmnElement="Event_02yqig0">
<dc:Bounds x="322" y="292" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="300" y="332" width="88" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_14qss0g_di" bpmnElement="Event_14qss0g">
<dc:Bounds x="405" y="295" width="30" height="30" />
<bpmndi:BPMNLabel>
<dc:Bounds x="384" y="247" width="71" height="40" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1mg53lo_di" bpmnElement="Event_1mg53lo" bioc:stroke="#1E88E5" bioc:fill="#BBDEFB">
<dc:Bounds x="472" y="292" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1ptbcds_di" bpmnElement="Event_1ptbcds">
<dc:Bounds x="552" y="292" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0icoemn_di" bpmnElement="Event_0icoemn">
<dc:Bounds x="222" y="662" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="185" y="285" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1pzykoz_di" bpmnElement="Activity_1pzykoz" isExpanded="true">
<dc:Bounds x="770" y="210" width="290" height="200" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_029ts9n_di" bpmnElement="Flow_029ts9n">
<di:waypoint x="888" y="310" />
<di:waypoint x="952" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_151qqhq_di" bpmnElement="Event_151qqhq">
<dc:Bounds x="852" y="292" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0q35ml0_di" bpmnElement="Event_0q35ml0">
<dc:Bounds x="952" y="292" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_05puic7_di" bpmnElement="Gateway_05puic7" isMarkerVisible="true">
<dc:Bounds x="995" y="655" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1up2qiu_di" bpmnElement="Event_1up2qiu" bioc:stroke="rgb(30, 136, 229)" bioc:fill="rgb(187, 222, 251)">
<dc:Bounds x="1002" y="752" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="912" y="756" width="85" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_17ev5pq_di" bpmnElement="Gateway_17ev5pq">
<dc:Bounds x="995" y="825" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1teq2mv_di" bpmnElement="Activity_1teq2mv" bioc:stroke="rgb(251, 140, 0)" bioc:fill="rgb(255, 224, 178)">
<dc:Bounds x="970" y="990" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1x7inb6_di" bpmnElement="Activity_1x7inb6" bioc:stroke="rgb(251, 140, 0)" bioc:fill="rgb(255, 224, 178)">
<dc:Bounds x="1150" y="990" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1u3dzx9_di" bpmnElement="Activity_1u3dzx9" bioc:stroke="rgb(251, 140, 0)" bioc:fill="rgb(255, 224, 178)">
<dc:Bounds x="1380" y="990" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0vvyf1a_di" bpmnElement="Gateway_0vvyf1a" isMarkerVisible="true">
<dc:Bounds x="1565" y="1005" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0o4vcdi_di" bpmnElement="Gateway_0o4vcdi" isMarkerVisible="true">
<dc:Bounds x="1565" y="1125" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1ey3eu7_di" bpmnElement="Event_1ey3eu7" bioc:stroke="rgb(251, 140, 0)" bioc:fill="rgb(255, 224, 178)">
<dc:Bounds x="1572" y="1212" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1489" y="1216" width="71" height="40" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_081pcx9_di" bpmnElement="Event_081pcx9">
<dc:Bounds x="1712" y="1132" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1756" y="1143" width="88" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0x2z2qx_di" bpmnElement="Activity_0gbmbs7" bioc:stroke="rgb(30, 136, 229)" bioc:fill="rgb(187, 222, 251)">
<dc:Bounds x="810" y="640" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0jsbyv8_di" bpmnElement="Event_0jsbyv8">
<dc:Bounds x="692" y="662" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="678" y="708" width="63" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0a23f4b_di" bpmnElement="Activity_0a23f4b">
<dc:Bounds x="520" y="640" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0yfkahd_di" bpmnElement="Activity_12c4494">
<dc:Bounds x="330" y="640" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1xwyizj_di" bpmnElement="Event_1xwyizj">
<dc:Bounds x="1122" y="351" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1hpnorc_di" bpmnElement="Activity_1hpnorc" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="2690" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1mctiwx_di" bpmnElement="Activity_1mctiwx">
<dc:Bounds x="3000" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0fvzd86_di" bpmnElement="Event_0fvzd86" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="2872" y="1352" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2849" y="1406" width="83" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0m3ggec_di" bpmnElement="Activity_0m3ggec" bioc:stroke="rgb(142, 36, 170)" bioc:fill="rgb(225, 190, 231)">
<dc:Bounds x="3200" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0s3gf3u_di" bpmnElement="Event_0flb2m7">
<dc:Bounds x="3392" y="1352" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_00bsy0a_di" bpmnElement="Activity_1t227a4" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="1980" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_12drjd3_di" bpmnElement="Activity_12drjd3" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="2210" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_02j0299_di" bpmnElement="Activity_02j0299" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="2440" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0poyoeb_di" bpmnElement="Activity_0poyoeb" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="1760" y="1330" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0njf9mt_di" bpmnElement="Gateway_0e23stu">
<dc:Bounds x="1565" y="1345" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0zk6p0h_di" bpmnElement="Event_0zk6p0h" bioc:stroke="rgb(67, 160, 71)" bioc:fill="rgb(200, 230, 201)">
<dc:Bounds x="1662" y="1352" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1643" y="1406" width="75" height="40" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_01ux8pt_di" bpmnElement="Event_01ux8pt">
<dc:Bounds x="1182" y="832" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1239" y="836" width="62" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0c4cpxx_di" bpmnElement="Event_0c4cpxx">
<dc:Bounds x="1182" y="662" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1226" y="673" width="88" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1ae9yr3_di" bpmnElement="Activity_08ca2ix">
<dc:Bounds x="1760" y="1620" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0z5dccf_di" bpmnElement="Activity_0z5dccf">
<dc:Bounds x="810" y="810" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1dhege2_di" bpmnElement="Activity_1dhege2">
<dc:Bounds x="630" y="810" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_13xz3ca_di" bpmnElement="Activity_13xz3ca" bioc:stroke="black" bioc:fill="white">
<dc:Bounds x="450" y="810" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0pybjkb_di" bpmnElement="Event_0pybjkb">
<dc:Bounds x="352" y="832" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="TextAnnotation_030pu4t_di" bpmnElement="TextAnnotation_030pu4t">
<dc:Bounds x="2670" y="1470" width="240" height="124" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="TextAnnotation_0friy7d_di" bpmnElement="TextAnnotation_0friy7d">
<dc:Bounds x="1980" y="1470" width="220" height="124" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="TextAnnotation_0y086so_di" bpmnElement="TextAnnotation_0y086so">
<dc:Bounds x="2210" y="1470" width="220" height="124" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="TextAnnotation_0zz15cn_di" bpmnElement="TextAnnotation_0zz15cn">
<dc:Bounds x="2440" y="1470" width="220" height="124" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_01lmoj6_di" bpmnElement="Event_01lmoj6" bioc:stroke="#1E88E5" bioc:fill="#BBDEFB">
<dc:Bounds x="1042" y="351" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Association_06qxtm8_di" bpmnElement="Association_06qxtm8">
<di:waypoint x="2740" y="1410" />
<di:waypoint x="2740" y="1470" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Association_1dnulqy_di" bpmnElement="Association_1dnulqy">
<di:waypoint x="2030" y="1410" />
<di:waypoint x="2030" y="1470" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Association_1qi0cw9_di" bpmnElement="Association_1qi0cw9">
<di:waypoint x="2260" y="1410" />
<di:waypoint x="2260" y="1470" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Association_147wpeh_di" bpmnElement="Association_147wpeh">
<di:waypoint x="2490" y="1410" />
<di:waypoint x="2490" y="1470" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Participant_08rb9rc_di" bpmnElement="Participant_08rb9rc" isHorizontal="true">
<dc:Bounds x="160" y="2040" width="1310" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1ju13h8_di" bpmnElement="Flow_1ju13h8">
<di:waypoint x="1280" y="2170" />
<di:waypoint x="1352" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_01qpec5_di" bpmnElement="Flow_01qpec5">
<di:waypoint x="480" y="2170" />
<di:waypoint x="550" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0gcsmj7_di" bpmnElement="Flow_0gcsmj7">
<di:waypoint x="1108" y="2170" />
<di:waypoint x="1180" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_14vrrra_di" bpmnElement="Flow_14vrrra">
<di:waypoint x="990" y="2170" />
<di:waypoint x="1072" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0m4h584_di" bpmnElement="Flow_0m4h584">
<di:waypoint x="820" y="2170" />
<di:waypoint x="890" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0jp0wmd_di" bpmnElement="Flow_0jp0wmd">
<di:waypoint x="650" y="2170" />
<di:waypoint x="720" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_13nom3k_di" bpmnElement="Flow_13nom3k">
<di:waypoint x="308" y="2170" />
<di:waypoint x="380" y="2170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_0r5wmiv_di" bpmnElement="Activity_0r5wmiv">
<dc:Bounds x="550" y="2130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0aha85b_di" bpmnElement="Activity_0aha85b">
<dc:Bounds x="720" y="2130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1wqkr8t_di" bpmnElement="Activity_1wqkr8t" bioc:stroke="black" bioc:fill="white">
<dc:Bounds x="890" y="2130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_02kqmmg_di" bpmnElement="Event_02kqmmg">
<dc:Bounds x="272" y="2152" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_133ywuk_di" bpmnElement="Activity_1elfmkh">
<dc:Bounds x="380" y="2130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0tax83l_di" bpmnElement="Event_0tax83l">
<dc:Bounds x="1072" y="2152" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1053" y="2196" width="79" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_136brby_di" bpmnElement="Activity_136brby">
<dc:Bounds x="1180" y="2130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1u4tx4z_di" bpmnElement="Event_0hla739">
<dc:Bounds x="1352" y="2152" width="36" height="36" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

@ -0,0 +1,8 @@
{
"name" : "Policy Mapping",
"configKey" : "role-policy-mapping",
"configType" : "role-policy-mapping",
"rolePolicyMapping" : {
"user" : [ "read_write_all" ]
}
}

@ -0,0 +1 @@
processes.byId(contextScopeId, contextProcessId).createComment(comment + ' beendet')

@ -0,0 +1,24 @@
def env = [
scope_id: contextScopeId,
process_instance_id: execution.getProcessInstanceId(),
smardigo_management_action: smardigoManagementAction,
cluster_name: tenant.key + '-' + cluster.name,
cluster_service: cluster.service,
cluster_size: cluster.size,
stage: cluster.stage,
current_realm_name: tenant.key,
current_realm_display_name: tenant.name
]
def ansibleCommand= 'ansible-playbook ' + smardigoManagementAction + '.yml --vault-password-file ~/vault-pass'
def ansibleEnvironment= ' -e \"'
env.each { key, val ->
ansibleEnvironment+= key + '=\'' + val + '\' '
}
ansibleEnvironment+= '\"'
ansibleCommand += ansibleEnvironment
processes.byId(contextScopeId, contextProcessId).createComment(comment + ' gestartet')
processes.byId(contextScopeId, contextProcessId).createComment(ansibleCommand)
ansibleCommand

@ -0,0 +1,15 @@
{
"groups" : [ {
"id" : "user",
"name" : "User"
}, {
"id" : "head",
"name" : "Head"
}, {
"id" : "maintainer",
"name" : "Maintainer"
}, {
"id" : "administrator",
"name" : "Administrator"
} ]
}

@ -31,7 +31,6 @@ services:
{{ service.name }}: {{ service.name }}:
image: "{{ service.image_name }}:{{ service.image_version }}" image: "{{ service.image_name }}:{{ service.image_version }}"
container_name: "{{ service.name }}" container_name: "{{ service.name }}"
hostname: "{{ service.name }}"
restart: {{ service.restart | default('always') }} restart: {{ service.restart | default('always') }}
{% if {% if
service.user is defined service.user is defined

@ -0,0 +1,5 @@
{
"message": "action-executed-{{ smardigo_management_action }}",
"localVariables": {},
"processVariables": {}
}
Loading…
Cancel
Save