diff --git a/create-database-backup.yml b/create-database-backup.yml deleted file mode 100644 index 16ca389..0000000 --- a/create-database-backup.yml +++ /dev/null @@ -1,104 +0,0 @@ ---- - -# creates database backup -# - postgres -# - executed on stage specific server: {{ shared_service_postgres_primary }} -# - creates database backup for specific database - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# custom_backup_name := defines a substring for backup file => {{ stage }}_{{ tenant_id }}_{{ cluster_name }}_{{ cluster_service }}__gehtdichnixan.sql -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: "Add postgres servers to hosts if necessary" - add_host: - name: "{{ shared_service_postgres_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect', 'management_connect', 'keycloak', 'gitea'] - - - name: "Add maria servers to hosts if necessary" - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# Creating database backups for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - database_backup_state: dump - ansible_ssh_host: "{{ stage_server_domain }}" - - roles: - - role: connect_postgres - when: "'connect' in group_names" - - - role: gitea_postgres - when: "'gitea' in group_names" - - - role: keycloak_postgres - when: "'keycloak' in group_names" - - - role: connect_wordpress_maria - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/create-database.yml b/create-database.yml deleted file mode 100644 index 99559f7..0000000 --- a/create-database.yml +++ /dev/null @@ -1,114 +0,0 @@ ---- - -# creates databases on shared service servers -# - postgres -# - executed on stage specific server: {{ shared_service_postgres_primary }} -# - creates databases to work with connect: {{ connect_postgres_database }} -# - creates databases to work with management connect: {{ management_connect_postgres_database }} -# - creates databases to work with shared keycloak: {{ keycloak_postgres_database }} -# - maria -# - executed on stage specific server: {{ shared_service_maria_primary }} -# - creates databases to work with connect wordpress: {{ connect_wordpress_maria_database }} - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: "Add postgres servers to hosts if necessary" - add_host: - name: "{{ shared_service_postgres_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect', 'management_connect', 'keycloak', 'gitea'] - - - name: "Add maria servers to hosts if necessary" - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# Creating databases for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: connect_postgres - when: "'connect' in group_names" - - - role: gitea_postgres - when: "'gitea' in group_names" - - - role: keycloak_postgres - when: "'keycloak' in group_names" - - - role: connect_wordpress_maria - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/create-kibana-objects.yml b/create-kibana-objects.yml deleted file mode 100644 index 68f9bb8..0000000 --- a/create-kibana-objects.yml +++ /dev/null @@ -1,241 +0,0 @@ ---- - -# creates elastic objetcs for smardigo instances -# to empower dudes to find relevant logmessages faster and -# reduce/abolish "monkey business" in creating needed ES-related objects for (devops|admin)-dudes -# - executed on stage specific server: {{ stage }}-elastic-stack-kibana-01-kibana - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - -############################################################# -# Creating kibana search objects for created inventory -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: no - remote_user: root - vars: - ansible_connection: local - ansible_ssh_host: "{{ stage_server_domain }}" - elastic_state: present - elastic_users: - - - username: '{{ stage }}-{{ tenant_id }}' - roles: - - '{{ stage }}-{{ tenant_id }}' - full_name: '' - password: '{{ password | default( stage + "-" + tenant_id ) }}' - email: '{{ email | default("") }}' - enabled: true - elastic_state: '{{ elastic_state }}' - elastic_roles: - - - elastic_state: '{{ elastic_state }}' - name: '{{ stage }}-{{ tenant_id }}' - elasticsearch: - cluster: [] - indices: - - names: - - '{{ stage }}-{{ tenant_id }}-*' - privileges: - - read - - read_cross_cluster - - view_index_metadata - allow_restricted_indices: false - run_as: [] - kibana: - - base: [] - feature: - advancedSettings: - - all - dashboard: - - all - dev_tools: - - all - discover: - - all - indexPatterns: - - all - savedObjectsManagement: - - all - visualize: - - all - spaces: - - '{{ stage }}-{{ tenant_id }}' - elastic_spaces: - - - elastic_state: '{{ elastic_state }}' - id: &es_space_name '{{ stage }}-{{ tenant_id }}' - name: '{{ stage }}-{{ tenant_id }}' - description: '' - disabledFeatures: - - canvas - - maps - - ml - - visualize - - enterpriseSearch - - logs - - infrastructure - - apm - - uptime - - observabilityCases - - siem - - monitoring - - fleet - - stackAlerts - - actions - - osquery - - savedObjectsTagging - - tasks: - - name: "Create Index Pattern for <{{ stage }}-{{ tenant_id }}-*>" - set_fact: - es_index_pattern_tenant: '{{ stage }}-{{ tenant_id }}-*' - elastic_index_patterns: - - id: "{{ stage }}-{{ tenant_id }}-*" - name: "{{ stage }}-{{ tenant_id }}" - search_name: "{{ stage }}-{{ tenant_id }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-*" - with_container_filter: false - when: - - cluster_name is not defined - - cluster_service is not defined - - - name: "Create Index Pattern for <{{ stage }}-{{ tenant_id }}-{{ cluster_name }}>" - set_fact: - es_index_pattern_tenant: '{{ stage }}-{{ tenant_id }}-*' - elastic_index_patterns: - - id: "{{ stage }}-{{ tenant_id }}-*" - name: "{{ stage }}-{{ tenant_id }}" - search_name: "{{ stage }}-{{ tenant_id }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-*" - - id: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}" - search_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - when: - - cluster_name is defined - - cluster_service is not defined - - - name: "Create Index Pattern for <{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ cluster_service }}>" - set_fact: - es_index_pattern_tenant: '' - elastic_index_patterns: - - id: "{{ stage }}-{{ tenant_id }}-*" - name: "{{ stage }}-{{ tenant_id }}" - search_name: "{{ stage }}-{{ tenant_id }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-*" - - id: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}" - search_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*" - - id: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-*-{{ cluster_service }}-*" - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ cluster_service }}" - search_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ cluster_service }}-*" - dashboard_name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ cluster_service }}-*" - when: - - cluster_service is defined - - cluster_name is defined - - - name: "Do some stuff in elastic with spaces ... " - include_role: - name: kibana - tasks_from: _configure_spaces.yml - apply: - tags: - - es-spaces - loop: "{{ elastic_spaces }}" - loop_control: - loop_var: elastic_space - tags: - - es-spaces - - - name: "Do some stuff in elastic with roles ..." - include_role: - name: kibana - tasks_from: _configure_roles.yml - apply: - tags: - - es-roles - loop: "{{ elastic_roles }}" - loop_control: - loop_var: elastic_role - tags: - - es-roles - - - name: "Do some stuff in elastic with users ..." - include_role: - name: kibana - tasks_from: _configure_users.yml - apply: - tags: - - es-users - loop: "{{ elastic_users }}" - loop_control: - loop_var: elastic_user - tags: - - es-users - - - name: "Do some stuff in elastic with spaces ..." - include_role: - name: kibana - tasks_from: _import_savedobjects.yml - apply: - tags: - - es-importobjects - vars: - es_space: *es_space_name - es_indexpattern_title: '{{ es_indexpattern_name }}' - es_panel_uuid: "{{ 'panel_' + elastic_dashboard_name | to_uuid }}" - tags: - - es-importobjects - -############################################################# -# Sending smardigo management message to process -############################################################# -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/create-realm.yml b/create-realm.yml deleted file mode 100644 index 5aa697a..0000000 --- a/create-realm.yml +++ /dev/null @@ -1,94 +0,0 @@ ---- - -# creates realm/clients on shared keycloak service -# - connect_realm: configuration to use with connect/wordpress - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# playbook roles (keycloak / oidc) -# current_realm_name := -# current_realm_display_name := -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Creating realms for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - - collections: - - hetzner.hcloud - - community.general - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: connect_realm - when: '"connect" in group_names' - - - role: gitea_realm - when: '"gitea" in group_names' - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/create-server.yml b/create-server.yml deleted file mode 100644 index 67b8da1..0000000 --- a/create-server.yml +++ /dev/null @@ -1,167 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: - - "stage_{{ stage }}" - - "{{ cluster_service }}" - - hcloud - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Creating servers for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(5) }}" - remote_user: root - 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_ansible }} - return_content: yes - register: hetzner_firewalls_response - delegate_to: 127.0.0.1 - tags: - - update_networks - - - name: Save firewall entries as variable (fact) - set_fact: - hetzner_firewalls_response_json: "{{ hetzner_firewalls_response.json }}" - tags: - - update_networks - - - name: Parse firewall entries - set_fact: - firewall_records: "{{ hetzner_firewalls_response_json.firewalls | json_query(jmesquery) }}" - vars: - jmesquery: '[*].{id: id, name: name}' - tags: - - update_networks - - - name: Print firewall entries - debug: - msg: "{{ firewall_records }}" - tags: - - update_networks - - roles: - - role: hetzner-ansible-hcloud - - - role: hetzner-ansible-dns - vars: - record_data: "{{ stage_server_ip }}" - record_name: "{{ inventory_hostname }}" - -############################################################# -# Provisioning servers for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: Remove outdated dependencies - apt: - name: [ - 'docker', - 'docker-client', - 'docker-client-latest', - 'docker-common', - 'docker-latest', - 'docker-latest-logrotate', - 'docker-logrotate', - 'docker-engine', - 'smartmontools', - 'mc', - ] - state: 'absent' - when: ansible_distribution == "Ubuntu" - - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: ansible-role-docker - when: - - docker_enabled - - - role: hetzner-ansible-common - - - role: devsec.hardening.ssh_hardening - tags: - - ssh_hardening - - - role: hetzner-ansible-filebeat - when: filebeat_enabled | default(True) - - - role: hetzner-ansible-node-exporter - when: node_exporter_enabled | default(True) - - - role: hetzner-ansible-traefik - when: traefik_enabled | default(True) - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/create-service.yml b/create-service.yml deleted file mode 100644 index a91576a..0000000 --- a/create-service.yml +++ /dev/null @@ -1,86 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Creating services for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - connect_version: "{{ connect_image_version }}" # backwards compatibility - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: connect - when: "'connect' in group_names" - - - role: connect_wordpress - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/dump-hcloud-ips.yml b/dump-hcloud-ips.yml deleted file mode 100644 index 79a9628..0000000 --- a/dump-hcloud-ips.yml +++ /dev/null @@ -1,95 +0,0 @@ - ---- - -# This playbook dumps all ip addresses from Hetzner Cloud saving it into local file. -# A prefix "route" will be added, to easily use it within custom ovpn configuration. -# -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# Example: -# STAGE=ext && ansible-playbook dump-hcloud-ips.yml -e "stage=${STAGE}" --vault-password-file=~/.ansible-vault-pass-${STAGE} - -############################################################# -# Creating inventory dynamically for given parameters # -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# Add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - -############################################################# -# Dumping ip addresses from hcloud with given stage # -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - - pre_tasks: - - name: "Reading current server groups from hetzner" - include_role: - name: hetzner-ansible-hcloud - tasks_from: _read_server_infos - with_items: [ - { - name: "all", - label_selector: "stage={{ stage }}", - } - ] - loop_control: - loop_var: current_server_group - - - name: "Reading info about current loadbalancers from hetzner" - include_role: - name: hetzner-ansible-hcloud - tasks_from: _read_load_balancer_infos - with_items: [ - { - name: "all", - #label_selector: "stage={{ stage }}", # There are no useful labels at the moment. Todo: Create labels for load balancers like stage=dev - } - ] - loop_control: - loop_var: current_load_balancer_group - - tasks: - - name: 'Save Hetzner Server ip adresses in ~/hcloud_ip_addresses.txt' - blockinfile: - marker: "## {mark} managed by ansible (hosts config for {{ stage }}) ##" - path: '~/hcloud_ip_addresses.txt' - state: present - create: yes - block: | - {% for host in server_group_infos_all %} - # {{ host.name }} - route {{ host.ip }} - {% endfor %} - - - name: 'Save Hetzner loadbalancer ip adresses in ~/hcloud_ip_addresses.txt' - blockinfile: - marker: "## {mark} managed by ansible (load balancer config for {{ stage }}) ##" - path: '~/hcloud_ip_addresses.txt' - state: present - create: yes - block: | - {% for host in load_balancer_group_infos_all %} - # {{ host.name }} - route {{ host.ip }} - {% endfor %} diff --git a/export-database.yml b/export-database.yml deleted file mode 100644 index b240108..0000000 --- a/export-database.yml +++ /dev/null @@ -1,98 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# database_backup_file := the dump file to export, has to be on the database server under /tmp (e.g. wordpress_portal.sql) -# target_database := (optional) the database to export into ( see {{ connect_wordpress_maria_database }}) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add maria servers to hosts if necessary - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# exporting database backups for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: export_maria_database - vars: - database_backup_file: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-wordpress.sql.gz" - when: - - "'connect_wordpress' in group_names" - - "target_database is defined" - - - role: export_maria_database - vars: - target_database: "{{ connect_wordpress_maria_database }}" - database_backup_file: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-wordpress.sql.gz" - when: - - "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/group_vars/all/connect.yml b/group_vars/all/connect.yml index 39f1aa7..606d2d3 100644 --- a/group_vars/all/connect.yml +++ b/group_vars/all/connect.yml @@ -22,10 +22,6 @@ smardigo_auth_token_name: "Smardigo-User-Token" smardigo_default_theme: "/themes/netgo.json" -connect_wordpress_buergerportal_username: "buergerportal" -# initial credentials, keycloak forces password update on first login -connect_wordpress_buergerportal_password: "Buerger?P0rtal." - # digital ocean dns service (-> dns-challenge) connect_customer_urls_digitalocean: [] # hetzner dns service (-> dns-challenge) diff --git a/group_vars/all/management.yml b/group_vars/all/management.yml index d17fa07..13b97ad 100644 --- a/group_vars/all/management.yml +++ b/group_vars/all/management.yml @@ -12,7 +12,6 @@ management_oidc_admin_email: "{{ devops_email_address }}" management_configurations: - pmci - backup - - provisioning # legacy connect_connection_teams_url: "{{ netgo_msteams_hook_cd }}" connect_connection_awx_url: "{{ shared_service_kube_url_awx }}/" diff --git a/group_vars/all/plain.yml b/group_vars/all/plain.yml index 1bf45db..459ce54 100644 --- a/group_vars/all/plain.yml +++ b/group_vars/all/plain.yml @@ -150,6 +150,7 @@ grafana_admin_email: "{{ devops_email_address }}" grafana_smardigo_email: "{{ devops_email_address }}" harbor_oidc_admin_email: "{{ devops_email_address }}" argocd_admin_email: "{{ devops_email_address }}" +wordpress_admin_email: "{{ devops_email_address }}" http_port: "80" https_port: "443" diff --git a/group_vars/all/versions.yml b/group_vars/all/versions.yml index 0893730..5215f82 100644 --- a/group_vars/all/versions.yml +++ b/group_vars/all/versions.yml @@ -26,6 +26,7 @@ traefik_version: "v2.10.3" connect_version: "10.5" iam_version: "10.5" process_search_version: "1.3" +wordpress_image_version: "6.3" ansible_minimal_version: "2.12.0" diff --git a/group_vars/all/wordpress.yml b/group_vars/all/wordpress.yml new file mode 100644 index 0000000..2692681 --- /dev/null +++ b/group_vars/all/wordpress.yml @@ -0,0 +1,2 @@ +--- +wordpress_image_name: "wordpress" diff --git a/group_vars/stage_demompmx/management.yml b/group_vars/stage_demompmx/management.yml index bf5924e..e4ff121 100644 --- a/group_vars/stage_demompmx/management.yml +++ b/group_vars/stage_demompmx/management.yml @@ -1,6 +1,2 @@ --- -management_configurations: - - pmci - - backup - connect_connection_harbor_url: "{{ shared_service_url_harbor }}/v2/prodnso/" diff --git a/import-database.yml b/import-database.yml deleted file mode 100644 index a2a83ac..0000000 --- a/import-database.yml +++ /dev/null @@ -1,109 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# database_backup_file := the dump file to import, has to be on the database server under /tmp (e.g. wordpress_portal.sql) -# target_database := (optional) the database to import into ( see {{ connect_wordpress_maria_database }}) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - -############################################################# -# Importing database backups for created inventory -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - - tasks: - - name: "Add maria server to hosts if necessary" - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# Importing database backups for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: -# TODO deactivate mags flavored wordpress for now -# - role: import_maria_database -# when: -# - "'connect_wordpress' in group_names" -# - "target_database is defined" -# - "database_backup_file is defined" - -# TODO deactivate mags flavored wordpress for now -# - role: import_maria_database -# vars: -# target_database: "{{ connect_wordpress_maria_database }}" -# when: -# - "'connect_wordpress' in group_names" -# - "database_backup_file is defined" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/kubespray b/kubespray index 08467ad..d498df2 160000 --- a/kubespray +++ b/kubespray @@ -1 +1 @@ -Subproject commit 08467ad6b3bdd5b15c33e3a63d476630766bd04a +Subproject commit d498df20db567d4a61402ab6243eb925b2a26032 diff --git a/pmci-callback.yml b/pmci-callback.yml index d1df2b9..ba9bab1 100644 --- a/pmci-callback.yml +++ b/pmci-callback.yml @@ -1,5 +1,4 @@ --- - # Parameters: # stage := the name of the stage (e.g. devnso, qanso, prodnso) # scope_id := scope id from management process diff --git a/pmci-database-backup-create.yml b/pmci-database-backup-create.yml index f8b2cab..986b1bd 100644 --- a/pmci-database-backup-create.yml +++ b/pmci-database-backup-create.yml @@ -1,5 +1,4 @@ --- - ############################################################# # Creating inventory dynamically for given parameters ############################################################# @@ -15,11 +14,15 @@ remote_user: root vars: database_backup_state: dump - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility custom_backup_name: "backup" # legacy paramater, backwards compatibility + pre_tasks: + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: connect_postgres when: "'connect' in group_names" diff --git a/pmci-database-backup-import.yml b/pmci-database-backup-import.yml index b04ced7..cee3a76 100644 --- a/pmci-database-backup-import.yml +++ b/pmci-database-backup-import.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -43,8 +42,10 @@ add_host: name: "{{ shared_service_maria_primary }}" groups: - - "stage_{{ stage }}" - "{{ item }}" + - "stage_{{ stage }}" + - "pmci_database_selector" + - "pmci_database_selector_maria" changed_when: False with_items: "{{ cluster.features }}" when: item in ['connect_wordpress'] @@ -53,14 +54,9 @@ # Importing database backups for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_database_selector_maria" serial: "{{ serial_number | default(1) }}" remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility - database_backup_file: "{{ data.database.backup_file }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -69,6 +65,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: import_maria_database when: diff --git a/pmci-database-backup-restore.yml b/pmci-database-backup-restore.yml index 0fc8ec3..b5ab68a 100644 --- a/pmci-database-backup-restore.yml +++ b/pmci-database-backup-restore.yml @@ -1,5 +1,4 @@ --- - ############################################################# # Creating inventory dynamically for given parameters ############################################################# @@ -15,11 +14,15 @@ remote_user: root vars: database_backup_state: restore - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility custom_backup_name: "backup" # legacy paramater, backwards compatibility + pre_tasks: + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: connect_postgres when: "'connect' in group_names" diff --git a/pmci-database-create.yml b/pmci-database-create.yml index 1b00587..85ff85f 100644 --- a/pmci-database-create.yml +++ b/pmci-database-create.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -28,10 +27,6 @@ - hosts: "pmci_database_selector" serial: "{{ serial_number | default(1) }}" remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -40,6 +35,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: connect_postgres when: "'connect' in group_names" diff --git a/pmci-database-delete.yml b/pmci-database-delete.yml index 9026696..5e602e6 100644 --- a/pmci-database-delete.yml +++ b/pmci-database-delete.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -30,9 +29,6 @@ remote_user: root vars: database_state: absent - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -41,6 +37,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: connect_postgres when: "'connect' in group_names" diff --git a/pmci-empty-playbook.yml b/pmci-empty-playbook.yml index 7589e91..1ddadbe 100644 --- a/pmci-empty-playbook.yml +++ b/pmci-empty-playbook.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,7 +24,7 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local @@ -37,6 +36,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: ############################################################# diff --git a/pmci-inventory-cluster.yml b/pmci-inventory-cluster.yml index 2884ab4..70fadf4 100644 --- a/pmci-inventory-cluster.yml +++ b/pmci-inventory-cluster.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -28,6 +27,7 @@ become: false when: - cluster is defined + - name: "Print given variables " debug: msg: "{{ data }}" @@ -53,7 +53,7 @@ - name: "Add hosts for given cluster" add_host: name: "{{ stage }}-{{ tenant.key }}-{{ cluster.key }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}" + groups: "{{ ['hcloud'] + ['stage_' + stage ] + ['pmci_server_selector'] + [cluster.service] + (cluster.features | default([])) }}" with_sequence: start=1 end={{ cluster.size | default(1) }} changed_when: False when: diff --git a/pmci-inventory-database.yml b/pmci-inventory-database.yml index 19f4cd5..e3a1e6a 100644 --- a/pmci-inventory-database.yml +++ b/pmci-inventory-database.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -62,6 +61,7 @@ - "{{ item }}" - "stage_{{ stage }}" - "pmci_database_selector" + - "pmci_database_selector_postgres" changed_when: False with_items: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}" when: item in ['connect', 'management_connect', 'keycloak', 'gitea'] @@ -73,6 +73,7 @@ - "{{ item }}" - "stage_{{ stage }}" - "pmci_database_selector" + - "pmci_database_selector_maria" changed_when: False with_items: "{{ ['hcloud'] + ['stage_' + stage ] + [cluster.service] + (cluster.features | default([])) }}" when: item in ['connect_wordpress'] diff --git a/pmci-kibana-create-objects.yml b/pmci-kibana-create-objects.yml index 1da5230..2180e41 100644 --- a/pmci-kibana-create-objects.yml +++ b/pmci-kibana-create-objects.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,7 +24,7 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: no remote_user: root diff --git a/pmci-monitoring-update.yml b/pmci-monitoring-update.yml index d1c68e1..2ed9029 100644 --- a/pmci-monitoring-update.yml +++ b/pmci-monitoring-update.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -62,6 +61,7 @@ - include_role: name: prometheus tasks_from: _update_config + - include_role: name: prometheus tasks_from: _reload_config diff --git a/pmci-realm-client-create.yml b/pmci-realm-client-create.yml index dcb4bd8..7c3a113 100644 --- a/pmci-realm-client-create.yml +++ b/pmci-realm-client-create.yml @@ -1,20 +1,4 @@ --- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant := object with tenant related data -# key := -# name := -# cluster := object with cluster specific data (optional) -# ... -# data := object with action specific data (optional) -# ... -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - ############################################################# # Creating inventory dynamically for given parameters ############################################################# @@ -25,19 +9,10 @@ # Creating realms for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility - current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility - connect_client_admin_username: "{{ data.connect.admin.username }}" # legacy paramater, backwards compatibility - connect_client_admin_password: "{{ data.connect.admin.password }}" # legacy paramater, backwards compatibility - connect_wordpress_buergerportal_username: "{{ data.wordpress.admin.username | default() }}" # legacy paramater, backwards compatibility - connect_wordpress_buergerportal_password: "{{ data.wordpress.admin.password | default() }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -46,13 +21,28 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + + - name: "Setting pmci connect variables" + ansible.builtin.set_fact: + connect_client_admin_password: "{{ data.connect.admin.password }}" # legacy paramater, backwards compatibility + when: + - data.connect is defined + + - name: "Setting pmci wordpress variables" + ansible.builtin.set_fact: + connect_wordpress_admin_password: "{{ data.wordpress.admin.password }}" # legacy paramater, backwards compatibility + when: + - data.wordpress is defined + roles: - role: connect_realm when: '"connect" in group_names' - - role: gitea_realm - when: '"gitea" in group_names' - ############################################################# # Sending smardigo management message to process ############################################################# diff --git a/pmci-realm-client-delete.yml b/pmci-realm-client-delete.yml index 0117551..eeae695 100644 --- a/pmci-realm-client-delete.yml +++ b/pmci-realm-client-delete.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,13 +24,9 @@ # Deleting client for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility - current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -40,6 +35,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Delete client in realm <{{ current_realm_name }}>" include_role: diff --git a/pmci-server-create.yml b/pmci-server-create.yml index 91eee22..febba0c 100644 --- a/pmci-server-create.yml +++ b/pmci-server-create.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,7 +24,7 @@ # Creating servers for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(5) }}" gather_facts: false remote_user: root @@ -75,11 +74,9 @@ # Provisioning servers for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" pre_tasks: - name: Remove outdated dependencies @@ -105,6 +102,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: ansible-role-docker when: diff --git a/pmci-server-delete.yml b/pmci-server-delete.yml index 76fb98b..90d7ff0 100644 --- a/pmci-server-delete.yml +++ b/pmci-server-delete.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,7 +24,7 @@ # Deleting servers/domains for created inventory ############################################################# -- hosts: "stage_{{ stage }}" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(5) }}" gather_facts: false diff --git a/pmci-service-create.yml b/pmci-service-create.yml index 14d296e..806ffb7 100644 --- a/pmci-service-create.yml +++ b/pmci-service-create.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -20,24 +19,15 @@ ############################################################# - import_playbook: pmci-inventory-cluster.yml +- import_playbook: pmci-inventory-database.yml ############################################################# # Creating services for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility - current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility - connect_version: "{{ data.connect.version }}" # legacy paramater, backwards compatibility - connect_client_admin_username: "{{ data.connect.admin.username }}" # legacy paramater, backwards compatibility - connect_client_admin_password: "{{ data.connect.admin.password }}" # legacy paramater, backwards compatibility - connect_wordpress_buergerportal_username: "{{ data.wordpress.admin.username }}" # legacy paramater, backwards compatibility - connect_wordpress_buergerportal_password: "{{ data.wordpress.admin.password }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -46,6 +36,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: connect when: "'connect' in group_names" @@ -53,6 +49,33 @@ - role: connect_wordpress when: "'connect_wordpress' in group_names" +############################################################# +# Updating databases for created inventory +############################################################# + +- hosts: "pmci_database_selector_maria" + serial: "{{ serial_number | default(1) }}" + + pre_tasks: + - name: "Import autodiscover pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + + tasks: + - name: "Initialize wordpress admin user if necessary" + community.mysql.mysql_query: + login_db: "{{ connect_wordpress_maria_database }}" + login_user: "{{ connect_wordpress_maria_username }}" + login_password: "{{ connect_wordpress_maria_password }}" + login_unix_socket: /run/mysqld/mysqld.sock + query: + - UPDATE wp_options SET option_value = '{{ wordpress_admin_email }}' where option_name='admin_email' AND option_value='mAgmVXveeeMRgKP@netgo.de' + - UPDATE wp_users SET user_email = '{{ wordpress_admin_email }}' where user_login='wordpress-admin' AND user_email='mAgmVXveeeMRgKP@netgo.de' + - UPDATE wp_users SET user_pass = '{{ connect_wordpress_admin_password | md5 }}' where user_login='wordpress-admin' AND user_pass='$P$B1.mAgmVXveeeMRgKP.OYl5k/jJOjY.' + single_transaction: true + ############################################################# # Sending smardigo management message to process ############################################################# diff --git a/pmci-service-delete.yml b/pmci-service-delete.yml index 74ff3b1..bf5858c 100644 --- a/pmci-service-delete.yml +++ b/pmci-service-delete.yml @@ -1,5 +1,4 @@ --- - # Parameters: # playbook inventory # stage := the name of the stage (e.g. devnso, qanso, prodnso) @@ -25,13 +24,9 @@ # Removing services for created inventory ############################################################# -- hosts: "stage_{{ stage }}" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility pre_tasks: - name: "Import autodiscover pre-tasks" @@ -40,6 +35,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" include_role: diff --git a/pmci-service-state-update.yml b/pmci-service-state-update.yml index dcd5ad6..5d020ce 100644 --- a/pmci-service-state-update.yml +++ b/pmci-service-state-update.yml @@ -1,5 +1,4 @@ --- - ############################################################# # Creating inventory dynamically for given parameters ############################################################# @@ -10,13 +9,10 @@ # Stopping services for created inventory ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" remote_user: root vars: - ansible_ssh_host: "{{ stage_server_domain }}" - tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility - cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility service_state: "{{ data.service_state | default('up') }}" # legacy paramater, backwards compatibility pre_tasks: @@ -26,6 +22,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + roles: - role: service_state vars: diff --git a/pmci-tenant-change.yml b/pmci-tenant-change.yml index 47cbf7a..1411cba 100644 --- a/pmci-tenant-change.yml +++ b/pmci-tenant-change.yml @@ -1,5 +1,4 @@ --- - # Tenant maintenance # (keycloak realm) # (kibana space, user, role) @@ -39,12 +38,10 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local - vars: - management_base_url: "{{ stage }}-management-01-connect.{{ domain }}" pre_tasks: - name: "Import autodiscover pre-tasks" @@ -53,6 +50,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Edit keycloak realm <{{ tenant.key }}>" include_role: diff --git a/pmci-tenant-create.yml b/pmci-tenant-create.yml index 7786b1f..ec714fb 100644 --- a/pmci-tenant-create.yml +++ b/pmci-tenant-create.yml @@ -1,5 +1,4 @@ --- - # Tenant creation # (keycloak realm) # (kibana space, user, role) @@ -39,12 +38,10 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local - vars: - management_base_url: "{{ stage }}-management-01-connect.{{ domain }}" pre_tasks: - name: "Import autodiscover pre-tasks" @@ -53,6 +50,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Creating keycloak realm <{{ tenant.key }}>" include_role: diff --git a/pmci-tenant-delete.yml b/pmci-tenant-delete.yml index 2c68132..4159689 100644 --- a/pmci-tenant-delete.yml +++ b/pmci-tenant-delete.yml @@ -1,5 +1,4 @@ --- - # Tenant deletion # (keycloak realm) # (kibana space, user, role) @@ -39,12 +38,10 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local - vars: - management_base_url: "{{ stage }}-management-01-connect.{{ domain }}" pre_tasks: - name: "Import autodiscover pre-tasks" @@ -53,6 +50,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Delete keycloak realm <{{ tenant.key }}>" include_role: diff --git a/pmci-tenant-sync.yml b/pmci-tenant-sync.yml index 946332e..3ce27af 100644 --- a/pmci-tenant-sync.yml +++ b/pmci-tenant-sync.yml @@ -1,5 +1,4 @@ --- - # Tenant maintenance # (keycloak realm) # (kibana space, user, role) @@ -39,12 +38,11 @@ # Running the PMCI roles ############################################################# -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" +- hosts: "pmci_server_selector" serial: "{{ serial_number | default(1) }}" gather_facts: false connection: local vars: - management_base_url: "{{ stage }}-management-01-connect.{{ domain }}" sma_management_scope_id: "pmci" sma_management_role_id: "user" @@ -55,6 +53,12 @@ tags: - always + - name: "Setting default variables pre-tasks" + import_tasks: tasks/pmci_set_default_variables.yml + become: false + tags: + - always + tasks: - name: "Updating assigned tenant ids for each user <{{ tenant.key }}>" include_role: diff --git a/remove-database.yml b/remove-database.yml deleted file mode 100644 index 824c76c..0000000 --- a/remove-database.yml +++ /dev/null @@ -1,109 +0,0 @@ ---- - -# deletes databases and roles on shared service servers -# - postgres -# - executed on stage specific server: {{ shared_service_postgres_primary }} - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add postgres servers to hosts if necessary - add_host: - name: "{{ shared_service_postgres_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect', 'management_connect', 'keycloak', 'gitea'] - - - name: Add maria servers to hosts if necessary - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# Deleting databases for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - database_state: absent - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: connect_postgres - when: "'connect' in group_names" - - - role: gitea_postgres - when: "'gitea' in group_names" - - - role: keycloak_postgres - when: "'keycloak' in group_names" - - - role: connect_wordpress_maria - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/remove-realm.yml b/remove-realm.yml deleted file mode 100644 index 72d3d56..0000000 --- a/remove-realm.yml +++ /dev/null @@ -1,95 +0,0 @@ ---- - -# creates realm/clients on shared keycloak service -# - connect_realm: configuration to use with connect/wordpress - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# playbook roles (keycloak / oidc) -# current_realm_name := -# current_realm_display_name := -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Deleting client for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - - collections: - - hetzner.hcloud - - community.general - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - tasks: - - name: "Delete client in realm <{{ current_realm_name }}>" - include_role: - name: keycloak - tasks_from: _delete_client - vars: - realm_name: "{{ current_realm_name }}" - client_name: "{{ cluster_name }}" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/remove-server.yml b/remove-server.yml deleted file mode 100644 index bb8c197..0000000 --- a/remove-server.yml +++ /dev/null @@ -1,94 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -# Es wurde ein neues Playbook erstellt "remove_server", die für das löschen eines Servers zuständig ist. -# Es wurde eine Variable server_state initialisiert mir dem Defaultwert "present". -# Falls der Server gelöscht werden soll wird die variable in Playbook auf "absent" gesetzt -# Der Task "_set_server_state" prüft den Status und fährt den Server runter oder hoch anhand dem Wert der variable "server_state" - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: - - "stage_{{ stage }}" - - "{{ cluster_service }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - when: - - tenant_id is defined - - cluster_name is defined - - cluster_service is defined - -############################################################# -# Deleting servers/domains for created inventory -############################################################# - -- hosts: "stage_{{ stage }}" - serial: "{{ serial_number | default(5) }}" - gather_facts: false - - tasks: - - name: "Delete server <{{ inventory_hostname }}>" - include_role: - name: hetzner-ansible-hcloud - tasks_from: _set_server_state - vars: - - server_state: "absent" - - - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" - include_role: - name: hetzner-ansible-dns - tasks_from: _remove_dns - vars: - record_to_remove: '{{ inventory_hostname }}' - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/remove-service.yml b/remove-service.yml deleted file mode 100644 index caefd5a..0000000 --- a/remove-service.yml +++ /dev/null @@ -1,93 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_size := (WIP node count for the cluster) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Removing services for created inventory -############################################################# - -- hosts: "stage_{{ stage }}" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - tasks: - - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" - include_role: - name: hetzner-ansible-dns - tasks_from: _remove_dns - vars: - record_to_remove: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01-connect' - when: "'connect' in group_names" - - - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" - include_role: - name: hetzner-ansible-dns - tasks_from: _remove_dns - vars: - record_to_remove: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01-wordpress' - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/restore-database-backup.yml b/restore-database-backup.yml deleted file mode 100644 index d9ecd52..0000000 --- a/restore-database-backup.yml +++ /dev/null @@ -1,90 +0,0 @@ ---- - -# restores a database backup -# - postgres -# - executed on stage specific server: {{ shared_service_postgres_primary }} -# - restores a database backup - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_service := (service to setup, e.g. 'connect', ...) -# cluster_features := (optional features to use, e.g. ['wordpress', 'resubmission', ...]) -# custom_backup_name := defines a substring for backup file => {{ stage }}_{{ tenant_id }}_{{ cluster_name }}_{{ cluster_service }}__gehtdichnixan.sql -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: "Add postgres servers to hosts if necessary" - add_host: - name: "{{ shared_service_postgres_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect', 'management_connect', 'keycloak', 'gitea'] - -############################################################# -# Restoring databases for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - database_backup_state: restore - ansible_ssh_host: "{{ stage_server_domain }}" - - roles: - - role: connect_postgres - when: "'connect' in group_names" - - - role: gitea_postgres - when: "'gitea' in group_names" - - - role: keycloak_postgres - when: "'keycloak' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/roles/connect_realm/defaults/main.yml b/roles/connect_realm/defaults/main.yml index 84ed8a8..d27ed55 100644 --- a/roles/connect_realm/defaults/main.yml +++ b/roles/connect_realm/defaults/main.yml @@ -26,9 +26,8 @@ current_realm_users_base: - username: "{{ connect_client_admin_username }}" password: "{{ connect_client_admin_password }}" -current_realm_users_wordpress: - - username: "{{ connect_wordpress_buergerportal_username | default() }}" - password: "{{ connect_wordpress_buergerportal_password | default() }}" +# TODO wordpress does not use keycloak/oidc yet +current_realm_users_wordpress: [] current_realm_users: >- {%- if 'connect_wordpress' in groups -%} diff --git a/roles/connect_wordpress/defaults/main.yml b/roles/connect_wordpress/defaults/main.yml deleted file mode 100644 index 1535c9a..0000000 --- a/roles/connect_wordpress/defaults/main.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- - -wordpress_image_name: "{{ shared_service_hostname_harbor }}/smardigo/wordpress" -wordpress_image_version: "6.1.0.1" diff --git a/roles/connect_wordpress/tasks/main.yml b/roles/connect_wordpress/tasks/main.yml index 257d976..5a8ed37 100644 --- a/roles/connect_wordpress/tasks/main.yml +++ b/roles/connect_wordpress/tasks/main.yml @@ -6,7 +6,7 @@ - name: "Creating smardigo user token" smardigo_user_token: secret: "{{ connect_jwt_secret }}" - user_id: "{{ connect_wordpress_buergerportal_username }}" + user_id: "{{ wordpress_connect_username }}" register: smardigo_user_token_result delegate_to: 127.0.0.1 become: false diff --git a/roles/connect_wordpress/vars/main.yml b/roles/connect_wordpress/vars/main.yml index 96f16e2..592d787 100644 --- a/roles/connect_wordpress/vars/main.yml +++ b/roles/connect_wordpress/vars/main.yml @@ -1,4 +1,5 @@ --- +wordpress_db_host: "{{ shared_service_maria_primary }}:{{ wordpress_mysql_port | default('3306') }}" wordpress_labels: - '"traefik.enable=true"' @@ -32,7 +33,7 @@ wordpress_docker: image_version: "{{ wordpress_image_version }}" labels: "{{ wordpress_labels + ( wordpress_labels_additional | default([])) }}" environment: - - "WORDPRESS_DB_HOST: \"{{ shared_service_maria_primary }}:{{ wordpress_mysql_port | default('3306') }}\"" + - "WORDPRESS_DB_HOST: \"{{ wordpress_db_host }}\"" - "WORDPRESS_DB_USER: \"{{ connect_wordpress_maria_username }}\"" - "WORDPRESS_DB_PASSWORD: \"{{ connect_wordpress_maria_password }}\"" - "WORDPRESS_DB_NAME: \"{{ connect_wordpress_maria_database }}\"" @@ -46,7 +47,8 @@ wordpress_docker: - "SMARDIGO_AUTH_TOKEN_NAME: \"{{ smardigo_auth_token_name }}\"" - "SMARDIGO_AUTH_TOKEN_VALUE: \"{{ smardigo_auth_token_value }}\"" volumes: - - '"{{ wordpress_id }}-content:/var/www/html/wp-content"' + - '"{{ wordpress_id }}-content:/var/www/html"' + - './config/config.ini:/usr/local/etc/php/conf.d/config.ini' networks: - '"back-tier"' - '"front-tier"' diff --git a/roles/upload_local_file/tasks/main.yml b/roles/upload_local_file/tasks/main.yml index f3c0235..18724ee 100644 --- a/roles/upload_local_file/tasks/main.yml +++ b/roles/upload_local_file/tasks/main.yml @@ -1,15 +1,17 @@ ---- - ### tags: - name: 'Ensures <{{ upload_directory }}> directory exists' - file: + ansible.builtin.file: state: directory path: '{{ upload_directory }}' + owner: '{{ upload_owner }}' + group: '{{ upload_group }}' mode: 0755 - name: "Copy file to remote <{{ upload_directory }}/{{ upload_file | basename }}>" - copy: + ansible.builtin.copy: src: "{{ upload_file }}" dest: "{{ upload_directory }}/{{ upload_file | basename }}" + owner: '{{ upload_owner }}' + group: '{{ upload_group }}' mode: 0644 diff --git a/smardigo/package.sh b/smardigo/package.sh index e05fb0e..fc7aa0d 100755 --- a/smardigo/package.sh +++ b/smardigo/package.sh @@ -1,8 +1,5 @@ #!/bin/bash -rm -f provisioning.zip -zip -r provisioning.zip provisioning/ - rm -f template.zip zip -r template.zip template/ diff --git a/smardigo/pmci/datasource-file/connect-features.xlsx b/smardigo/pmci/datasource-file/connect-features.xlsx index 4322f8c..37f21e7 100644 Binary files a/smardigo/pmci/datasource-file/connect-features.xlsx and b/smardigo/pmci/datasource-file/connect-features.xlsx differ diff --git a/smardigo/pmci/mail-template/service-created.html b/smardigo/pmci/mail-template/service-created.html index 82031c4..552fc07 100644 --- a/smardigo/pmci/mail-template/service-created.html +++ b/smardigo/pmci/mail-template/service-created.html @@ -36,8 +36,6 @@ Wordpress - some-username - some-password some-link diff --git a/smardigo/pmci/process/service-change.bpmn b/smardigo/pmci/process/service-change.bpmn index 060e063..6021349 100644 --- a/smardigo/pmci/process/service-change.bpmn +++ b/smardigo/pmci/process/service-change.bpmn @@ -117,6 +117,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -130,6 +166,7 @@ + ${service.connect_features} Flow_0v9fn99 @@ -154,13 +191,6 @@ Flow_0v9fn99 - - - - - - - Flow_0vpp8s2 @@ -193,13 +223,11 @@ Flow_0oce9k4 - Flow_1csuwvq Flow_0zlxne5 Flow_1ml3syp - @@ -213,15 +241,95 @@ Flow_1ml3syp Flow_02ixndu + + Flow_0gzv1k2 + Flow_1cqik3r + Flow_1ck8ltb + Flow_0bnixfv + Flow_19cbb6s + Flow_1xfl8v3 + Flow_0a1iw3h + + + + + ${106} + updating features + updating features + + + Flow_19cbb6s + Flow_0lvy5p2 + + + + + ${105} + updating version + updating version + + + Flow_0bnixfv + Flow_1yaoiku + + + + + ${103} + creating database backup + creating database backup + + + Flow_1xfl8v3 + Flow_1xi90u0 + + + + + ${102} + updating version + is being changed + + + Flow_1cqik3r + Flow_193l32a + + + + + + + + Flow_0zlxne5 + Flow_0gzv1k2 + + + Flow_02ixndu + Flow_0j3iasf + + + + + ${104} + restoring database backup + restoring database backup + + + Flow_1ck8ltb + Flow_0uh17wl + Flow_0j3iasf - - - - - + + Flow_0lvy5p2 + Flow_0dy0fgx + + + Flow_1yaoiku + Flow_0r181q4 + @@ -251,7 +359,7 @@ ${1} - ${4} + ${6} Flow_1vp1h3f @@ -272,7 +380,7 @@ ${1} - ${4} + ${5} Flow_00j17xn @@ -314,7 +422,7 @@ ${1} - ${3} + ${5} Flow_1lfsa3q @@ -324,7 +432,7 @@ ${1} - ${4} + ${5} Flow_0bmarci @@ -338,95 +446,118 @@ Flow_023va0a - - Flow_0gzv1k2 - Flow_1cqik3r - Flow_1ck8ltb - Flow_0bnixfv - Flow_19cbb6s - Flow_1xfl8v3 - Flow_0a1iw3h - Flow_0dy0fgx Flow_1ntkihg Flow_1123ggr - - Flow_0lvy5p2 - Flow_0dy0fgx - - - - - ${106} - updating features - updating features - - - Flow_19cbb6s - Flow_0lvy5p2 - Flow_0r181q4 Flow_15uw4p8 Flow_023va0a - - Flow_1yaoiku - Flow_0r181q4 - - + + Flow_1je7ve0 + Flow_0ole7x1 + + + Flow_0n6vvh4 + Flow_07h5sbj + + + Flow_1lm92r1 + Flow_0yadymj + + + + + + + + + + Flow_0uh17wl + Flow_0ipuvtn + + + + + + - ${105} - updating version - updating version + ${progress_current + 1} + ${simulation} + - Flow_0bnixfv - Flow_1yaoiku - - + Flow_0yadymj + Flow_08lp64c + + + + + + - ${103} - creating database backup - creating database backup + ${progress_current + 1} + ${simulation} + - Flow_1xfl8v3 - Flow_1xi90u0 - - + Flow_07h5sbj + Flow_0qanm5o + + + + + + - ${102} - updating version - is being changed + ${progress_current + 1} + ${simulation} + - Flow_1cqik3r - Flow_193l32a - - + Flow_0ole7x1 + Flow_0ltxkcz + + + Flow_08lp64c + Flow_0ljg6ld + Flow_0prbgm6 + + + def connect_features_new = service.connect_features + +def is_wordpress_active_old = connect_features_old.contains('connect_wordpress'); +def is_wordpress_active_new = connect_features_new.contains('connect_wordpress'); + +return !is_wordpress_active_old && is_wordpress_active_new; + + + + + - - - + + + + + + + [database:[backup_file:"wordpress_portal.sql.gz"]] + + ${progress_current + 1} + ${simulation} + + - Flow_0zlxne5 - Flow_0gzv1k2 - - - Flow_02ixndu - Flow_0j3iasf - - - Flow_1je7ve0 - Flow_0ole7x1 - - + Flow_0ljg6ld + Flow_0604q4z + @@ -438,7 +569,7 @@ ${progress_current + 1} - Flow_0ole7x1 + Flow_0ltxkcz Flow_1g56nyr @@ -452,7 +583,7 @@ ${progress_current + 1} - Flow_0yadymj + Flow_1t3u8x1 Flow_01w1l99 @@ -466,7 +597,7 @@ ${progress_current + 1} - Flow_07h5sbj + Flow_0qanm5o Flow_0ovpasx @@ -609,16 +740,6 @@ Flow_01w1l99 Flow_1yp3qlu - - Flow_0n6vvh4 - Flow_07h5sbj - - - - Flow_1lm92r1 - Flow_0yadymj - - @@ -629,7 +750,6 @@ Flow_11b9h1n Flow_11t9a4k - Flow_1hn4hpo Flow_037suas @@ -638,8 +758,6 @@ Flow_1mkwwyz Flow_0rwyg6o - - @@ -689,7 +807,6 @@ Flow_0qnwk1l - @@ -700,7 +817,6 @@ Flow_010j88w Flow_1ocvj3h - @@ -711,7 +827,6 @@ Flow_0w5drys Flow_1oc3z2q - @@ -722,7 +837,6 @@ Flow_1xw83gj Flow_0y7y5t2 - @@ -746,7 +860,6 @@ Flow_1ocvj3h Flow_1cjblxt - @@ -760,7 +873,6 @@ Flow_1oc3z2q Flow_0wtyliq - @@ -774,7 +886,6 @@ Flow_0y7y5t2 Flow_00oim2x - @@ -788,8 +899,6 @@ Flow_06pks0u Flow_0zsuzuy - - @@ -800,7 +909,6 @@ Flow_1cjblxt Flow_037suas - @@ -811,7 +919,6 @@ Flow_0wtyliq Flow_0nihb5l - @@ -822,7 +929,6 @@ Flow_00oim2x Flow_0br7ijt - @@ -833,28 +939,6 @@ Flow_0zsuzuy Flow_1mkwwyz - - - - - - - - - Flow_0uh17wl - Flow_0ipuvtn - - - - - ${104} - restoring database backup - restoring database backup - - - Flow_1ck8ltb - Flow_0uh17wl - @@ -868,11 +952,32 @@ ${creation_user_id} ${maintenance_topic} template(service-changed) + ${progress_current + 1} Flow_0rwyg6o Flow_11cc8o2 + + Flow_0604q4z + Flow_1otfive + Flow_1t3u8x1 + + + + + + + + + + ${progress_current + 1} + + + + Flow_0prbgm6 + Flow_1otfive + ACHTUNG: Ändert sich das Datenmodell des Tenants muss die Projektion im Wizard angepasst werden, sonst gehen die Daten verloren! @@ -881,758 +986,797 @@ ToDo Formular service-selct-wizard - - ToDo candidate groups setzen - - - ToDo candidate groups setzen - - - with data object with data object - - with data object + + - + - + - + - + - + + + + + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - - + + - - - - - + + + - - + + + - - + + + - - - - - + + - - - - - + + + - - - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + - + - + + + + - + - - - - - - - - - + - + - + - + - + - - - + + + - + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - + + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + + + + + diff --git a/smardigo/pmci/process/service-setup.bpmn b/smardigo/pmci/process/service-setup.bpmn index bc04cd6..bf83c8e 100644 --- a/smardigo/pmci/process/service-setup.bpmn +++ b/smardigo/pmci/process/service-setup.bpmn @@ -37,11 +37,10 @@ - + - - + @@ -112,7 +111,7 @@ - Flow_0pvr263 + Flow_1khr5z7 Flow_1f0iyrk @@ -146,7 +145,7 @@ Flow_11k5c1y Flow_1r4otto - + @@ -161,9 +160,10 @@ - Flow_1r4otto - Flow_1u7vy0j + Flow_0pvr263 + Flow_1khr5z7 + @@ -176,7 +176,7 @@ - Flow_1u7vy0j + Flow_1r4otto Flow_19vs5q0 @@ -206,45 +206,45 @@ create data object - - Server erstellen + + with data object - - - Datenbank(en) erstellen + + + with data object - + + + Datenbank(en) Backup importieren + + Realm/Client erstellen - - with data object - - Service erstellen - - with data object - - Kibana Zugriff konfigurieren - - Datenbank(en) Backup importieren + + Datenbank(en) erstellen - + + + Server erstellen + + Monitoring aktualisieren - with data object + @@ -253,51 +253,47 @@ - + - - + + - - + + - - + + - - - - - + - + - - + + - - + + - - + + - + - + @@ -326,76 +322,76 @@ + + + + - + - + - + - - + + - + - + - + - - - + + + - - - + + + - - - + + + - - - - - - + + - - - - - - + + - - + + - - - + + + + + + + - - + + - - + + @@ -411,31 +407,27 @@ - + - - + + - - + + - - - - - - + + - - + + - - + + @@ -445,6 +437,14 @@ + + + + + + + + diff --git a/smardigo/pmci/script/create-data.groovy b/smardigo/pmci/script/create-data.groovy index 727a28a..cc1c1f0 100644 --- a/smardigo/pmci/script/create-data.groovy +++ b/smardigo/pmci/script/create-data.groovy @@ -15,6 +15,7 @@ def data = [:] +/**** create connect admin user ****/ def connect_admin = [:] connect_admin["username"] = service.cluster.key + "-connect-admin" if (binding.hasVariable('connect_admin_password')) { @@ -27,6 +28,7 @@ data["connect"] = connect execution.setVariable('connect_admin', connect_admin) +/**** create wordpress admin user ****/ if (service.connect_features.contains("connect_wordpress")) { def wordpress_admin = [:] wordpress_admin["username"] = service.cluster.key + "-wordpress-admin" diff --git a/smardigo/provisioning/app/process.json b/smardigo/provisioning/app/process.json deleted file mode 100644 index 2b771af..0000000 --- a/smardigo/provisioning/app/process.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name" : "Smardigo Provisioning", - "configKey" : "process", - "configType" : "process", - "description" : "Provisioning and configuration for smardigo instances", - "imageUrl" : "data:image/png;base64,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", - "menuItems" : [ { - "name" : "Provisioning", - "tabName" : "Provisioning", - "logoId" : "local_shipping", - "configType" : "process-search", - "processDefinitionKey" : "simple-connect", - "processDefinitionKeys" : [ "simple-connect" ], - "groups" : [ "user", "head", "maintainer", "administrator" ] - }, { - "name" : "Vorfälle", - "tabName" : "Vorfälle", - "logoId" : "report", - "configType" : "incidents", - "groups" : [ ], - "additionalProperties" : { - "showAllScopes" : false - } - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/datasource-file/connect-features.xlsx b/smardigo/provisioning/datasource-file/connect-features.xlsx deleted file mode 100644 index 4322f8c..0000000 Binary files a/smardigo/provisioning/datasource-file/connect-features.xlsx and /dev/null differ diff --git a/smardigo/provisioning/datasource/awx-job-plain.json b/smardigo/provisioning/datasource/awx-job-plain.json deleted file mode 100644 index 7aed883..0000000 --- a/smardigo/provisioning/datasource/awx-job-plain.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "awx-job-plain", - "restApi": true, - "configKey": "awx-job-plain", - "payloadType": "REST", - "config": [ - { - "name": "connection", - "type": "CONNECTION", - "value": "awx" - }, - { - "name": "resource", - "type": "STRING", - "value": "api/v2/jobs/${id}/" - }, - { - "name": "sqlStatement", - "type": "STRING", - "value": "SELECT id,status,failed,created,started,finished,name,description,elapsed,scm_revision FROM default_table" - } - ] -} diff --git a/smardigo/provisioning/datasource/awx-job-templates-plain.json b/smardigo/provisioning/datasource/awx-job-templates-plain.json deleted file mode 100644 index b9a07b5..0000000 --- a/smardigo/provisioning/datasource/awx-job-templates-plain.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "awx-job-templates-plain", - "restApi" : true, - "configKey" : "awx-job-templates-plain", - "payloadType" : "REST", - "config" : [ { - "name" : "connection", - "type" : "CONNECTION", - "value" : "awx" - }, { - "name" : "resource", - "type" : "STRING", - "value" : "api/v2/job_templates?search=${name}" - }, { - "name" : "sqlStatement", - "type" : "STRING", - "value" : "SELECT results FROM default_table" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/datasource/awx-job-templates.json b/smardigo/provisioning/datasource/awx-job-templates.json deleted file mode 100644 index e0b9d21..0000000 --- a/smardigo/provisioning/datasource/awx-job-templates.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name" : "awx-job-templates", - "restApi" : true, - "configKey" : "awx-job-templates", - "payloadType" : "POST_PROCESSING", - "config" : [ { - "name" : "datasource_key", - "type" : "STRING", - "value" : "awx-job-templates-plain" - }, { - "name" : "groovy_script", - "type" : "STRING", - "value" : "def result = []\ndata.each{templates ->\n templates.results.each{ template ->\n if (parameters['name'] == template.name) {\n result.add([id: template.id, name: template.name])\n }\n }\n}\nresult" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/datasource/awx-job.json b/smardigo/provisioning/datasource/awx-job.json deleted file mode 100644 index 153aefa..0000000 --- a/smardigo/provisioning/datasource/awx-job.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "awx-job", - "restApi": true, - "configKey": "awx-job", - "payloadType": "POST_PROCESSING", - "config": [ - { - "name": "datasource_key", - "type": "STRING", - "value": "awx-job-plain" - }, - { - "name": "groovy_script", - "type": "STRING", - "value": "def result = []\ndata.each{job ->\n if (parameters['stage']) {\n job.stage = parameters.stage\n }\n result.add(job)\n}\nresult" - } - ] -} diff --git a/smardigo/provisioning/datasource/connect-features.json b/smardigo/provisioning/datasource/connect-features.json deleted file mode 100644 index af8487a..0000000 --- a/smardigo/provisioning/datasource/connect-features.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"connect-features","restApi":true,"configKey":"connect-features","payloadType":"EXCEL","config":[{"name":"file","type":"FILE","value":"connect-features.xlsx"},{"name":"columnNames","type":"STRING","value":""},{"name":"sqlStatement","type":"STRING","value":"select * from features where default in (${default})"},{"name":"columnNameLineNumber","type":"INT","value":1},{"name":"skipEmptyLines","type":"BOOLEAN","value":false},{"name":"skipEmptyColumns","type":"BOOLEAN","value":false}]} \ No newline at end of file diff --git a/smardigo/provisioning/datasource/tenants.json b/smardigo/provisioning/datasource/tenants.json deleted file mode 100644 index 00274a4..0000000 --- a/smardigo/provisioning/datasource/tenants.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name" : "Mandanten", - "restApi" : true, - "configKey" : "tenants", - "payloadType" : "ENTITY", - "config" : [ { - "name" : "entityId", - "type" : "STRING", - "value" : "tenants" - }, { - "name" : "propertyFilterKey", - "type" : "STRING" - }, { - "name" : "propertyFilterValue", - "type" : "STRING" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/datasource/whitelabel-docker-image-tags-plain.json b/smardigo/provisioning/datasource/whitelabel-docker-image-tags-plain.json deleted file mode 100644 index 80cebcc..0000000 --- a/smardigo/provisioning/datasource/whitelabel-docker-image-tags-plain.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name" : "whitelabel-docker-image-tags-plain", - "restApi" : true, - "configKey" : "whitelabel-docker-image-tags-plain", - "payloadType" : "REST", - "config" : [ { - "name" : "connection", - "type" : "CONNECTION", - "value" : "harbor" - }, - { - "name" : "resource", - "type" : "STRING", - "value" : "/smardigo/connect-whitelabel-app/tags/list" - }, - { - "name" : "sqlStatement", - "type" : "STRING", - "value" : "SELECT * FROM default_table" - } ] -} diff --git a/smardigo/provisioning/datasource/whitelabel-docker-image-tags.json b/smardigo/provisioning/datasource/whitelabel-docker-image-tags.json deleted file mode 100644 index 9307b6e..0000000 --- a/smardigo/provisioning/datasource/whitelabel-docker-image-tags.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name" : "whitelabel-docker-image-tags", - "restApi" : true, - "configKey" : "whitelabel-docker-image-tags", - "payloadType" : "POST_PROCESSING", - "config" : [ { - "name" : "datasource_key", - "type" : "STRING", - "value" : "whitelabel-docker-image-tags-plain" - }, - { - "name" : "groovy_script", - "type" : "STRING", - "value" : "def result = []\ndata.each{values ->\n values.tags.each{ value ->\n result.add([value: value, label: value])\n }\n}\nresult" - } ] -} diff --git a/smardigo/provisioning/form/approve.json b/smardigo/provisioning/form/approve.json deleted file mode 100644 index 2632169..0000000 --- a/smardigo/provisioning/form/approve.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "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" : "{{ item.label }}", - "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" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/attachments.json b/smardigo/provisioning/form/attachments.json deleted file mode 100644 index 4d981bf..0000000 --- a/smardigo/provisioning/form/attachments.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "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" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/current-job-left.json b/smardigo/provisioning/form/current-job-left.json deleted file mode 100644 index efb5654..0000000 --- a/smardigo/provisioning/form/current-job-left.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "name" : "Current Job Left", - "configKey" : "current-job-left", - "page" : 0, - "components" : [ { - "label" : "Current Job", - "hideLabel" : true, - "persistent" : false, - "mask" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "datasourcecontainer", - "input" : true, - "key" : "job", - "defaultValue" : { - "tenant" : { - "id" : "" - } - }, - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job-plain/query?id={{data.current_job_id}}", - "method" : "GET", - "values" : [ { } ] - }, - "components" : [ { - "label" : "Current Job", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "job", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Name", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "name", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "inputFormat" : "plain", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "Beschreibung", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "description", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "inputFormat" : "plain", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "Status", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "status", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "inputFormat" : "plain", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "datapath" : "0", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "display" : "form" -} \ No newline at end of file diff --git a/smardigo/provisioning/form/current-job-right.json b/smardigo/provisioning/form/current-job-right.json deleted file mode 100644 index 1e58e92..0000000 --- a/smardigo/provisioning/form/current-job-right.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "name" : "Current Job Right", - "configKey" : "current-job-right", - "page" : 0, - "components" : [ { - "label" : "Current Job", - "hideLabel" : true, - "persistent" : false, - "mask" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "datasourcecontainer", - "input" : true, - "key" : "job", - "defaultValue" : { - "tenant" : { - "id" : "" - } - }, - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job-plain/query?id={{data.current_job_id}}", - "method" : "GET", - "values" : [ { } ] - }, - "components" : [ { - "label" : "Current Job", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "job", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - }, { - "label" : "Status", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "hidden" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "status", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "inputFormat" : "plain", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "datapath" : "0", - "encrypted" : false, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "display" : "form" -} \ No newline at end of file diff --git a/smardigo/provisioning/form/current-jobs.json b/smardigo/provisioning/form/current-jobs.json deleted file mode 100644 index 316d687..0000000 --- a/smardigo/provisioning/form/current-jobs.json +++ /dev/null @@ -1,397 +0,0 @@ -{ - "name" : "Current Jobs", - "configKey" : "current-jobs", - "page" : 0, - "components" : [ { - "label" : "Jobs", - "persistent" : false, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "list", - "input" : true, - "key" : "jobs", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "job", - "mask" : false, - "hideLabel" : true, - "tableView" : true, - "alwaysEnabled" : false, - "customClass" : "pb-0", - "type" : "datasourcecontainer", - "input" : true, - "key" : "job", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/awx-job/query?id={{ row }}&stage={{ data.cluster.stage }}", - "method" : "GET", - "values" : [ { } ] - }, - "components" : [ { - "label" : "job", - "hideLabel" : true, - "customClass" : "pb-0", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "job", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Columns", - "hideLabel" : true, - "columns" : [ { - "components" : [ { - "label" : "Name", - "hideLabel" : true, - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "name", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 4, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column" - }, { - "components" : [ { - "label" : "Name", - "hideLabel" : true, - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "description", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 4, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column" - }, { - "width" : 2, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "Name", - "hideLabel" : true, - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "hidden" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "status", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "HTML", - "labelPosition" : "left-left", - "tag" : "div", - "className" : "pb-0", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n {{ data.status }}\n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ] - }, { - "width" : 2, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "Id", - "hideLabel" : true, - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "hidden" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "id", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "Stage", - "hideLabel" : true, - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "hidden" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "stage", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "HTML", - "labelPosition" : "left-left", - "tag" : "div", - "className" : "pb-0", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n öffnen\n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html2", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ] - } ], - "customClass" : "pb-0", - "mask" : false, - "tableView" : false, - "alwaysEnabled" : false, - "type" : "columns", - "input" : false, - "key" : "columns", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "datapath" : "0", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "customConditional" : "", - "properties" : { }, - "tags" : [ ], - "logic" : [ ], - "reorder" : false - } ], - "display" : "form" -} \ No newline at end of file diff --git a/smardigo/provisioning/form/header.json b/smardigo/provisioning/form/header.json deleted file mode 100644 index ba26d64..0000000 --- a/smardigo/provisioning/form/header.json +++ /dev/null @@ -1,509 +0,0 @@ -{ - "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" : "{{[item.firstName, item.lastName].filter(Boolean).join(' ')}}", - "searchEnabled" : 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, - "widget" : null, - "refreshOn" : "", - "clearOnRefresh" : false, - "validateOn" : "change", - "conditional" : { - "show" : null, - "when" : null, - "eq" : "" - }, - "limit" : 100, - "filter" : "", - "searchField" : "", - "minSearch" : 0, - "readOnlyValue" : false, - "authenticate" : false, - "selectFields" : "", - "customSearchCriteria" : "", - "searchThreshold" : 0.3, - "fuseOptions" : { }, - "customOptions" : { }, - "infiniteScroll" : false, - "clearValueIfNotInItems" : false, - "clientSideFilter" : "", - "id" : "evydmbo" - } ], - "width" : 4, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column1", - "tableView" : true, - "label" : "", - "hideOnChildrenHidden" : 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", - "validate" : { - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : null, - "when" : null, - "eq" : "" - }, - "id" : "e9u3jbf" - }, { - "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, - "icons" : "fontawesome", - "i18n" : { - "lng" : "en", - "resources" : { - "de" : { - "translation" : { - "complete" : "Eingabe vollständig", - "error" : "Bitte beheben Sie vor dem Abschicken folgende Fehler.", - "required" : "{{field}} ist ein Pflichtfeld", - "pattern" : "{{field}} entspricht nicht dem Muster {{pattern}}", - "minLength" : "{{field}} muss länger als {{length}} Zeichen sein.", - "maxLength" : "{{field}} muss kürzer als {{length}} Zeichen sein.", - "min" : "{{field}} darf nicht kleiner als {{min}} sein.", - "max" : "{{field}} darf nicht größer als {{max}} sein.", - "invalid_email" : "{{field}} ist keine valide E-Mail-Adresse.", - "invalid_regex" : "{{field}} entspricht nicht dem Muster {{regex}}.", - "invalid_date" : "{{field}} ist kein valides Datum.", - "mask" : "{{field}} entspricht nicht der Maske.", - "stripe" : "{{stripe}}", - "month" : "Monat", - "day" : "Tag", - "year" : "Jahr", - "january" : "Januar", - "february" : "Februar", - "march" : "März", - "april" : "April", - "may" : "Mai", - "june" : "Juni", - "july" : "Juli", - "august" : "August", - "september" : "September", - "october" : "Oktober", - "november" : "November", - "december" : "Dezember", - "next" : "Weiter", - "previous" : "Zurück", - "cancel" : "Abbrechen", - "submit" : "Vorgang starten", - "dualMultiselect_filterPlaceholder" : "Tippen um zu filtern.", - "dualMultiselect_labelAll" : "Alle Werte", - "dualMultiselect_labelSelected" : "Ausgewählte Werte", - "dualMultiselect_buttonSelectAll" : "Alle auswählen", - "dualMultiselect_buttonDeselectAll" : "Alle abwählen", - "listSelection_buttonSelectAriaLabel" : "Eintrag Auswählen", - "mapView_zoomInButton" : "Vergrößern", - "mapView_zoomOutButton" : "Verkleinern", - "selectComponent_searchPlaceholder" : "Tippe um zu Suchen...", - "selectComponent_noChoicesText" : "Keine Elemente zur Auswahl", - "selectComponent_noResultsText" : "Keine Ergebnisse gefunden" - } - } - } - } - }, - "defaultValue" : "", - "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" : "", - "allowCalculateOverride" : false, - "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, - "defaultDate" : "", - "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" : "ef2amw" - } ], - "width" : 4, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column2", - "tableView" : true, - "label" : "", - "hideOnChildrenHidden" : 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", - "validate" : { - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : null, - "when" : null, - "eq" : "" - }, - "id" : "efau92d" - }, { - "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, - "widget" : null, - "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" : "", - "allowCalculateOverride" : false, - "refreshOn" : "", - "clearOnRefresh" : false, - "validateOn" : "change", - "validate" : { - "required" : false, - "custom" : "", - "customPrivate" : false, - "minLength" : "", - "maxLength" : "", - "minWords" : "", - "maxWords" : "", - "pattern" : "" - }, - "mask" : false, - "inputType" : "text", - "inputMask" : "", - "id" : "ea7hs5" - } ], - "width" : 4, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column3", - "tableView" : true, - "label" : "", - "hideOnChildrenHidden" : 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", - "validate" : { - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : null, - "when" : null, - "eq" : "" - }, - "id" : "ez9z05q" - } ], - "type" : "columns", - "tags" : [ ], - "conditional" : { - "show" : "", - "when" : null, - "eq" : "" - }, - "properties" : { - "" : "" - }, - "label" : "Columns", - "key" : "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" : "", - "allowCalculateOverride" : false, - "widget" : null, - "refreshOn" : "", - "clearOnRefresh" : false, - "validateOn" : "change", - "validate" : { - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "autoAdjust" : false, - "hideOnChildrenHidden" : false, - "id" : "eqtnze" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/progress-bar.json b/smardigo/provisioning/form/progress-bar.json deleted file mode 100644 index 6c4c6b2..0000000 --- a/smardigo/provisioning/form/progress-bar.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "name" : "Progress Bar", - "configKey" : "progress-bar", - "page" : 0, - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n
\n", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - }, { - "label" : "progress_current", - "labelPosition" : "left-left", - "hidden" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "number", - "input" : true, - "key" : "progress_current", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "delimiter" : false, - "requireDecimal" : false, - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "decimalLimit" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - }, { - "label" : "progress_max", - "labelPosition" : "left-left", - "hidden" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "number", - "input" : true, - "key" : "progress_max", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "delimiter" : false, - "requireDecimal" : false, - "encrypted" : false, - "decimalLimit" : null, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "display" : "form" -} \ No newline at end of file diff --git a/smardigo/provisioning/form/select-connect-feature-set.json b/smardigo/provisioning/form/select-connect-feature-set.json deleted file mode 100644 index ecbd919..0000000 --- a/smardigo/provisioning/form/select-connect-feature-set.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "configKey" : "select-connect-feature-set", - "name" : "select-connect-feature-set", - "components" : [ { - "label" : "Status", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "status2", - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "components" : [ { - "label" : "HTML", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "

Features

", - "refreshOnChange" : false, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html7", - "validate" : { - "customMessage" : "", - "json" : "", - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false, - "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", - "tag" : "p", - "id" : "e2e6mdi" - }, { - "label" : "Optionale Features", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "dualmultiselect", - "input" : true, - "key" : "connect-features", - "defaultValue" : [ ], - "validate" : { - "customMessage" : "", - "json" : "", - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{ context.scopeId }}/processes/{{ context.processId }}/datasources/connect-features/query?default='0','1'", - "values" : [ { } ] - }, - "template" : "{{ item.key }}", - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "projection" : "key", - "reorder" : false, - "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", - "filter" : true, - "filterPlaceholder" : "Tippen um zu filtern.", - "labelAll" : "Alle Werte", - "labelSelected" : "Ausgewählte Werte", - "buttonSelectAll" : "Alle auswählen", - "buttonDeselectAll" : "Alle abwählen", - "selectAll" : false, - "id" : "e7k5sf" - } ], - "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" : "enh5f1d" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/select-connect-version.json b/smardigo/provisioning/form/select-connect-version.json deleted file mode 100644 index eaf1da8..0000000 --- a/smardigo/provisioning/form/select-connect-version.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "configKey" : "select-connect-version", - "name" : "select-connect-version", - "components" : [ { - "label" : "Connect", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "connect", - "validate" : { - "customMessage" : "", - "json" : "", - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "components" : [ { - "label" : "Connect", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "connect2", - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "components" : [ { - "label" : "Version", - "labelPosition" : "left-left", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "select", - "input" : true, - "key" : "version", - "defaultValue" : "latest", - "validate" : { - "select" : false, - "customMessage" : "", - "json" : "", - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/whitelabel-docker-image-tags/query", - "headers" : [ { - "key" : "", - "value" : "" - } ], - "values" : [ ], - "json" : "", - "resource" : "", - "custom" : "" - }, - "dataSrc" : "url", - "valueProperty" : "value", - "tabs" : null, - "properties" : { }, - "selectThreshold" : 0.3, - "encrypted" : false, - "lazyLoad" : false, - "selectValues" : "", - "disableLimit" : false, - "sort" : "", - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "customDefaultValue" : "value='latest'", - "reorder" : false, - "reference" : 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, - "calculateValue" : "", - "allowCalculateOverride" : false, - "widget" : null, - "refreshOn" : "", - "clearOnRefresh" : false, - "validateOn" : "change", - "limit" : 100, - "filter" : "", - "searchEnabled" : true, - "searchField" : "", - "minSearch" : 0, - "readOnlyValue" : false, - "authenticate" : false, - "template" : "{{ item.label }}", - "selectFields" : "", - "customSearchCriteria" : "", - "searchThreshold" : 0.3, - "fuseOptions" : { }, - "customOptions" : { }, - "infiniteScroll" : false, - "clearValueIfNotInItems" : false, - "clientSideFilter" : "", - "id" : "e0qkvu" - } ], - "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" : "", - "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" : "e0jo9ps" - } ], - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : 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, - "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" : "er94pcr" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/simple-connect-create.json b/smardigo/provisioning/form/simple-connect-create.json deleted file mode 100644 index 37dd95e..0000000 --- a/smardigo/provisioning/form/simple-connect-create.json +++ /dev/null @@ -1,464 +0,0 @@ -{ - "name" : "Simple Connect Wizard", - "configKey" : "simple-connect-create", - "display" : "wizard", - "page" : 0, - "numPages" : 8, - "components" : [ { - "labelPosition" : "left", - "label" : "Auswahl Mandant", - "title" : "Auswahl Mandant", - "tableView" : false, - "type" : "panel", - "components" : [ { - "label" : "Mandant auswählen", - "hideLabel" : true, - "optionsLabelPosition" : "right", - "values" : [ { - "label" : "Mandant anlegen", - "value" : "create_new_tenant", - "shortcut" : "" - }, { - "shortcut" : "", - "label" : "Mandant auswählen", - "value" : "choose_tenant" - } ], - "inline" : false, - "persistent" : false, - "clearOnHide" : false, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "radio", - "input" : true, - "key" : "wizard_selection", - "validate" : { - "unique" : false, - "customMessage" : "", - "json" : "", - "required" : true - }, - "properties" : { }, - "tags" : [ ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "customConditional" : "", - "logic" : [ ], - "defaultValue" : "choose_tenant", - "encrypted" : false, - "tabs" : null, - "reorder" : false - }, { - "label" : "Mandant", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "type" : "container", - "input" : true, - "key" : "tenant", - "components" : [ { - "label" : "Mandant", - "customClass" : "ml-4", - "clearOnHide" : false, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "listselection", - "input" : true, - "key" : "selected_tenant", - "data" : { - "url" : "/api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/tenants/query", - "requestBody" : "", - "values" : [ { } ] - }, - "columns" : [ { - "name" : "Name", - "prop" : "name", - "value" : "", - "width" : "", - "sortable" : true - }, { - "name" : "Schlüssel", - "prop" : "key", - "value" : "", - "width" : "", - "sortable" : true - } ], - "projection" : [ { - "key" : "id", - "prop" : "id" - }, { - "key" : "name", - "prop" : "name" - }, { - "key" : "key", - "prop" : "key" - } ], - "identity" : "id", - "validate" : { - "required" : true, - "unique" : false, - "customMessage" : "", - "json" : "" - }, - "properties" : { }, - "tags" : [ ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "customConditional" : "show = data.wizard_selection == 'choose_tenant';", - "logic" : [ { - "name" : "if wizard_selection = 'create_new_tenant' then clear", - "trigger" : { - "type" : "javascript", - "javascript" : "result = data.wizard_selection == 'create_new_tenant';" - }, - "actions" : [ { - "name" : "clear", - "type" : "clear" - } ] - } ], - "tabs" : null, - "datapath" : "", - "defaultFilter" : "", - "encrypted" : false, - "reorder" : false - } ], - "properties" : { }, - "clearOnHide" : false - }, { - "label" : "Mandant bearbeiten", - "shortcut" : "", - "customClass" : "ml-4", - "persistent" : false, - "clearOnHide" : false, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "checkbox", - "input" : true, - "key" : "edit_tenant", - "validate" : { - "unique" : false, - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "customConditional" : "show = data.wizard_selection == 'choose_tenant';", - "properties" : { }, - "tags" : [ ], - "defaultValue" : false, - "tabs" : null, - "reorder" : false, - "encrypted" : false, - "logic" : [ ] - } ], - "input" : false, - "key" : "ChooseTenant", - "tags" : [ ], - "conditional" : { - "show" : "" - }, - "properties" : { - "" : "" - } - }, { - "label" : "Mandant bearbeiten", - "title" : "Mandant bearbeiten", - "clearOnHide" : true, - "mask" : false, - "tableView" : false, - "type" : "panel", - "key" : "page2", - "input" : false, - "components" : [ { - "label" : "tenant", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "type" : "container", - "input" : true, - "key" : "tenant", - "components" : [ { - "labelPosition" : "left-left", - "columns" : [ { - "components" : [ { - "label" : "Name", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "name", - "defaultValue" : "", - "validate" : { - "unique" : false, - "customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 20 Zeichen", - "json" : "", - "required" : true, - "minLength" : null, - "maxLength" : null, - "minWords" : null, - "maxWords" : null, - "pattern" : "^[ a-zA-Z0-9-]{4,20}$" - }, - "inputFormat" : "plain", - "properties" : { }, - "tags" : [ ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "Id", - "mask" : false, - "tableView" : true, - "type" : "hidden", - "input" : true, - "key" : "id", - "properties" : { }, - "tags" : [ ] - } ], - "width" : 6, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column1", - "tableView" : true, - "label" : "", - "clearOnHide" : false, - "hideOnChildrenHidden" : false - }, { - "components" : [ { - "label" : "Key", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "key", - "defaultValue" : "", - "validate" : { - "customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 10 Zeichen, alles kleingeschrieben", - "json" : "", - "required" : true, - "minLength" : null, - "maxLength" : null, - "minWords" : null, - "maxWords" : null, - "pattern" : "^[a-z]{4,10}$" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "inputFormat" : "plain", - "encrypted" : false, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 6, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column2", - "tableView" : true, - "label" : "", - "clearOnHide" : false, - "hideOnChildrenHidden" : false - } ], - "label" : "Mengenrabattnr.", - "mask" : false, - "tableView" : false, - "type" : "columns", - "input" : false, - "key" : "columns" - } ], - "clearOnHide" : false - } ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "customConditional" : "show = data.wizard_selection == 'choose_tenant' && !!data.edit_tenant && !!data.tenant && !!data.tenant.id;" - }, { - "label" : "Mandant erfassen", - "title" : "Mandant erfassen", - "mask" : false, - "tableView" : false, - "type" : "panel", - "key" : "page2", - "input" : false, - "components" : [ { - "label" : "tenant", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "type" : "container", - "input" : true, - "key" : "tenant", - "components" : [ { - "labelPosition" : "left-left", - "columns" : [ { - "components" : [ { - "label" : "Name", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "name", - "defaultValue" : "", - "validate" : { - "unique" : false, - "customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 20 Zeichen", - "json" : "", - "required" : true, - "minLength" : null, - "maxLength" : null, - "minWords" : null, - "maxWords" : null, - "pattern" : "^[ a-zA-Z0-9-]{4,20}$" - }, - "inputFormat" : "plain", - "properties" : { }, - "tags" : [ ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 6, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column3", - "tableView" : true, - "label" : "", - "clearOnHide" : false, - "hideOnChildrenHidden" : false - }, { - "components" : [ { - "label" : "Key", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "key", - "defaultValue" : "", - "validate" : { - "customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 10 Zeichen, alles kleingeschrieben", - "json" : "", - "required" : true, - "minLength" : null, - "maxLength" : null, - "minWords" : null, - "maxWords" : null, - "pattern" : "^[a-z]{4,10}$" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 6, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "key" : "column4", - "tableView" : true, - "label" : "", - "clearOnHide" : false, - "hideOnChildrenHidden" : false - } ], - "label" : "Mengenrabattnr.", - "mask" : false, - "tableView" : false, - "type" : "columns", - "input" : false, - "key" : "columns" - } ], - "clearOnHide" : false - } ], - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "customConditional" : "show = data.wizard_selection == 'create_new_tenant';", - "logic" : [ ], - "properties" : { }, - "tags" : [ ] - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/form/simple-connect.json b/smardigo/provisioning/form/simple-connect.json deleted file mode 100644 index 587a3c1..0000000 --- a/smardigo/provisioning/form/simple-connect.json +++ /dev/null @@ -1,808 +0,0 @@ -{ - "name" : "Simple Connect", - "configKey" : "simple-connect", - "page" : 0, - "components" : [ { - "label" : "Features", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "features", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Optionale Features", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "dualmultiselect", - "input" : true, - "key" : "connect-features", - "defaultValue" : [ ], - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{ context.scopeId }}/processes/{{ context.processId }}/datasources/connect-features/query?default='0','1'", - "values" : [ { } ] - }, - "template" : "{{ item.key }}", - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "projection" : "key", - "reorder" : false - } ], - "tabs" : null, - "reorder" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ] - }, { - "label" : "Links", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "links", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Columns", - "columns" : [ { - "components" : [ { - "label" : "connect_admin_username", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "connect_admin_username", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "connect_admin_password", - "hideLabel" : true, - "labelPosition" : "left-left", - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "connect_admin_password", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "width" : 3, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column" - }, { - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ 'https://' + (!!(data.cluster)?data.cluster.stage:'cluster.stage') + '-' + (!!(data.tenant)?data.tenant.key:'tenant.key') + '-' + (!!(data.cluster)?data.cluster.name:'cluster.name') + '-01-connect.smardigo.digital' }}\n \n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html2", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ], - "width" : 9, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column" - }, { - "width" : 3, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ ] - }, { - "width" : 9, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ 'https://' + (!!(data.cluster)?data.cluster.stage:'cluster.stage') + '-' + (!!(data.tenant)?data.tenant.key:'tenant.key') + '-' + (!!(data.cluster)?data.cluster.name:'cluster.name') + '-01-wordpress.smardigo.digital' }}\n \n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html4", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "show = data['connect-features'].includes(\"connect_wordpress\") ", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ] - }, { - "width" : 3, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "wordpress_admin_username", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "wordpress_admin_username", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "show = data['connect-features'].includes(\"connect_wordpress\") ", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "wordpress_admin_password", - "hideLabel" : true, - "labelPosition" : "left-left", - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "wordpress_admin_password", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "show = data['connect-features'].includes(\"connect_wordpress\") ", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ] - }, { - "width" : 9, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ 'https://' + (!!(data.cluster)?data.cluster.stage:'cluster.stage') + '-' + (!!(data.tenant)?data.tenant.key:'tenant.key') + '-' + (!!(data.cluster)?data.cluster.name:'cluster.name') + '-01-wordpress.smardigo.digital/wp-admin' }}\n \n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html5", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "show = data['connect-features'].includes(\"connect_wordpress\") ", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ] - }, { - "width" : 3, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "keycloak_admin_username", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "keycloak_admin_username", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "keycloak_admin_password", - "hideLabel" : true, - "labelPosition" : "left-left", - "showWordCount" : false, - "showCharCount" : false, - "clearOnHide" : false, - "disabled" : true, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "keycloak_admin_password", - "defaultValue" : "", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "inputFormat" : "plain", - "encrypted" : false, - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ] - }, { - "width" : 9, - "offset" : 0, - "push" : 0, - "pull" : 0, - "type" : "column", - "input" : false, - "hideOnChildrenHidden" : false, - "key" : "column", - "tableView" : true, - "label" : "Column", - "components" : [ { - "label" : "HTML", - "labelPosition" : "left-left", - "className" : "", - "attrs" : [ { - "attr" : "", - "value" : "" - } ], - "content" : "
\n \n {{ 'https://' + (!!(data.cluster)?data.cluster.stage:'cluster.stage') + '-keycloak-01.smardigo.digital/auth/admin/' + (!!(data.tenant)?data.tenant.key:'tenant.key') + '/console' }}\n \n
", - "refreshOnChange" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "htmlelement", - "input" : false, - "key" : "html3", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "refreshOn" : "data", - "reorder" : false - } ] - } ], - "mask" : false, - "tableView" : false, - "alwaysEnabled" : false, - "type" : "columns", - "input" : false, - "key" : "columns2", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - }, { - "label" : "Connect", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "connect", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Connect", - "hideLabel" : true, - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "connect2", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Version", - "labelPosition" : "left-left", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "select", - "input" : true, - "key" : "version", - "defaultValue" : "latest", - "validate" : { - "select" : false, - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "data" : { - "url" : "api/v1/scopes/{{context.scopeId}}/tags/{{context.scopeTag}}/datasources/whitelabel-docker-image-tags/query", - "headers" : [ { - "key" : "", - "value" : "" - } ], - "values" : [ ] - }, - "dataSrc" : "url", - "valueProperty" : "value", - "tabs" : null, - "properties" : { }, - "selectThreshold" : 0.3, - "encrypted" : false, - "lazyLoad" : false, - "selectValues" : "", - "disableLimit" : false, - "sort" : "", - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "customDefaultValue" : "value='latest'", - "reorder" : false, - "reference" : false - } ], - "tabs" : null, - "reorder" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ] - } ], - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - }, { - "label" : "Cluster", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "container", - "input" : true, - "key" : "cluster", - "validate" : { - "customMessage" : "", - "json" : "" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "components" : [ { - "label" : "Cluster", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "well", - "input" : false, - "key" : "cluster_well", - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "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 - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "label" : "Name", - "labelPosition" : "left-left", - "allowMultipleMasks" : false, - "showWordCount" : false, - "showCharCount" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "textfield", - "input" : true, - "key" : "name", - "defaultValue" : "", - "validate" : { - "customMessage" : "Zeichenkette ohne Sonderzeichen, mindestens 4 und höchstens 15 Zeichen, alles kleingeschrieben", - "json" : "", - "required" : true, - "minLength" : null, - "maxLength" : null, - "minWords" : null, - "maxWords" : null, - "pattern" : "^[a-z0-9]{4,15}$" - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - }, { - "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 - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "delimiter" : false, - "requireDecimal" : false, - "encrypted" : false, - "decimalLimit" : null, - "customConditional" : "", - "logic" : [ ], - "reorder" : false - }, { - "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 - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "" - }, - "tabs" : null, - "inputFormat" : "plain", - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "widget" : { - "type" : "" - }, - "reorder" : false - } ], - "tabs" : null, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "tabs" : null, - "encrypted" : false, - "properties" : { }, - "tags" : [ ], - "customConditional" : "", - "logic" : [ ], - "reorder" : false - } ], - "display" : "form" -} \ No newline at end of file diff --git a/smardigo/provisioning/form/tenant.json b/smardigo/provisioning/form/tenant.json deleted file mode 100644 index be04508..0000000 --- a/smardigo/provisioning/form/tenant.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "name" : "Mandnat", - "configKey" : "tenant", - "page" : 0, - "components" : [ { - "label" : "Mandant", - "mask" : false, - "tableView" : true, - "alwaysEnabled" : false, - "type" : "datasourcecontainer", - "input" : true, - "key" : "tenant", - "defaultValue" : { - "tenant" : { - "id" : "", - "name" : "", - "key" : "" - } - }, - "validate" : { - "customMessage" : "", - "json" : "", - "required" : false, - "custom" : "", - "customPrivate" : false - }, - "conditional" : { - "show" : "", - "when" : "", - "json" : "", - "eq" : "" - }, - "data" : { - "url" : "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" : "ehjc0fj" - }, { - "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" : "ep46nvg" - }, { - "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" : "esggboj" - } ], - "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" : "exeapht" - } ], - "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" : "embfag" - } ], - "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" : "esiqho" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/layout/simple-connect.json b/smardigo/provisioning/layout/simple-connect.json deleted file mode 100644 index cf26272..0000000 --- a/smardigo/provisioning/layout/simple-connect.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name" : "simple-connect", - "configKey" : "simple-connect", - "tabExpression" : "{{ data.cluster.stage }}-{{ data.tenant.key }}-{{ data.cluster.name }}", - "readonlyExpression" : "data.vorgang_status > 10", - "components" : [ { - "type" : "columns", - "key" : "dossier", - "columns" : [ { - "components" : [ { - "type" : "form", - "key" : "header", - "readonlyExpression" : "true" - }, { - "type" : "html", - "content" : "
" - }, { - "type" : "columns", - "key" : "first-column", - "columns" : [ { - "components" : [ { - "type" : "page", - "key" : "dossier-page", - "toc" : "left", - "sections" : [ { - "type" : "section", - "key" : "aktionen", - "title" : "Aktionen", - "visibleExpression" : "(data.vorgang_status >= 40 && data.vorgang_status < 50)||(data.vorgang_status >= 60)", - "components" : [ { - "type" : "form", - "key" : "progress-bar", - "readonlyExpression" : "true" - }, { - "type" : "columns", - "key" : "a_key", - "columns" : [ { - "width" : "75%", - "components" : [ { - "type" : "form", - "key" : "current-job-left", - "readonlyExpression" : "true" - } ] - }, { - "width" : "25%", - "components" : [ { - "type" : "form", - "key" : "current-job-right", - "readonlyExpression" : "true" - } ] - } ] - }, { - "type" : "form", - "key" : "current-jobs", - "readonlyExpression" : "true" - } ] - }, { - "type" : "section", - "key" : "smardigo", - "title" : "Smardigo", - "components" : [ { - "type" : "form", - "key" : "simple-connect" - } ] - }, { - "type" : "section", - "key" : "stammdaten", - "title" : "Stammdaten", - "components" : [ { - "type" : "form", - "key" : "tenant", - "readonlyExpression" : "true" - } ] - }, { - "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" - } ] - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/mail-template/smardigo-up-and-running.html b/smardigo/provisioning/mail-template/smardigo-up-and-running.html deleted file mode 100644 index 85a81e1..0000000 --- a/smardigo/provisioning/mail-template/smardigo-up-and-running.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - Neue Smardigo-Instanz erfolgreich aufgesetzt - - - - -

- Sehr geehrte Damen und Herren, -

-

-

- ihre Smardigo-Instanz ist nun einsatzbereit. -

-

- Zum Abschließen der Installation müssen Sie sich mit den folgend angegebenen initialen Zugangsdaten - anmelden. Sie werden danach aufgefordert, Ihre eigenen Passwörter zu setzen. Beachten Sie, dass die - zugehörigen Benutzer über alle Ihre Smardigo-Instanzen hin geteilt werden. Die initialen Passwörter - können nur für die allererste Anmeldung verwendet werden. Von Ihnen gesetzte Passwörter werden nicht - überschrieben. -

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ServiceBenutzerPasswortLink
Connectsome-usernamesome-passwordsome-link
Keycloaksome-usernamesome-passwordsome-link
Wordpresssome-usernamesome-passwordsome-link
ELKsome-usernamesome-passwordsome-link
-

-

- Hier geht es zum Antrag: Link -

-

- Hinweis: Diese Mail wurde durch Smardigo automatisch erzeugt. -

- - diff --git a/smardigo/provisioning/meta.info b/smardigo/provisioning/meta.info deleted file mode 100644 index 98c600c..0000000 --- a/smardigo/provisioning/meta.info +++ /dev/null @@ -1 +0,0 @@ -scopeId=provisioning \ No newline at end of file diff --git a/smardigo/provisioning/policy/policy.json b/smardigo/provisioning/policy/policy.json deleted file mode 100644 index 9037bd9..0000000 --- a/smardigo/provisioning/policy/policy.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "configKey" : "policy", - "configType" : "policy", - "name" : "Policies", - "policies" : [ { - "id" : "allow_delete_process_all", - "name" : "Processes delete all", - "effect" : "allow", - "actions" : [ "delete" ], - "resources" : [ "processes:simple-connect" ], - "conditions" : [ "${vorgang_status_text == 'Neu'}" ] - }, { - "id" : "allow_read_write_variables_all", - "name" : "Variables read/write all", - "effect" : "allow", - "actions" : [ "read", "write" ], - "resources" : [ "variables:simple-connect:*" ], - "conditions" : [ ] - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/process-search/simple-connect-fallback.json b/smardigo/provisioning/process-search/simple-connect-fallback.json deleted file mode 100644 index e1fa601..0000000 --- a/smardigo/provisioning/process-search/simple-connect-fallback.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name" : "Simple Connect", - "configKey" : "simple-connect-fallback", - "processDefinitionKey" : "simple-connect", - "columns" : [ ], - "sorts" : [ ], - "filters" : [ ] -} \ No newline at end of file diff --git a/smardigo/provisioning/process-search/simple-connect.json b/smardigo/provisioning/process-search/simple-connect.json deleted file mode 100644 index a8e898b..0000000 --- a/smardigo/provisioning/process-search/simple-connect.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "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" : "cluster.name", - "name" : "Cluster Name", - "width" : "100" - }, { - "key" : "connect.version", - "name" : "Version", - "width" : "100" - }, { - "key" : "creation_user_id", - "name" : "Ersteller", - "width" : 150 - }, { - "key" : "vorgang_status_text", - "name" : "Status", - "width" : 100, - "render" : { - "type" : "nominal_classification", - "dataclassdefinitions" : [ { - "value" : "Neu", - "style" : "traffic-light-blue" - }, { - "value" : "Antrag gesendet", - "style" : "traffic-light-blue" - }, { - "value" : "Antrag freigegeben", - "style" : "traffic-light-yellow" - }, { - "value" : "Service wird gestartet", - "style" : "traffic-light-yellow" - }, { - "value" : "Service wird aktualisiert", - "style" : "traffic-light-yellow" - }, { - "value" : "Service gestartet", - "style" : "traffic-light-green" - }, { - "value" : "Antrag abgebrochen", - "style" : "traffic-light-red" - }, { - "value" : "Service wird gelöscht", - "style" : "traffic-light-red" - }, { - "value" : "Service gelöscht", - "style" : "traffic-light-red" - } ] - } - }, { - "key" : "candidateGroups", - "name" : "Gruppen", - "width" : 100, - "hidden" : true - } ], - "filters" : [ { - "name" : "Ersteller", - "key" : "creation_user_id", - "defaultOption" : { - "key" : "default", - "name" : "Alle" - } - }, { - "name" : "Status", - "key" : "vorgang_status_text", - "defaultOption" : { - "key" : "default", - "name" : "Alle" - } - } ], - "sorts" : [ { - "key" : "creation_date", - "direction" : "desc" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/process-variable-declaration/simple-connect.json b/smardigo/provisioning/process-variable-declaration/simple-connect.json deleted file mode 100644 index 5596203..0000000 --- a/smardigo/provisioning/process-variable-declaration/simple-connect.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "name" : "Simple Connect", - "configKey" : "simple-connect", - "configType" : "process-variable-declaration", - "variableDeclarations" : { - "antrag_decission" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "approve_comment" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "awxPath" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "candidateGroups" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Gruppen" - }, - "cluster" : { - "type" : "object", - "classification" : "PRIVATE", - "fields" : { - "name" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Cluster Name" - } - } - }, - "connect" : { - "type" : "object", - "classification" : "PRIVATE", - "fields" : { - "version" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Version" - } - } - }, - "connect_admin_password" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "connect_admin_username" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "connect-features" : { - "type" : "object", - "classification" : "PRIVATE" - }, - "creation_date" : { - "type" : "date", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Erstelldatum" - }, - "creation_user_id" : { - "type" : "userId", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Ersteller" - }, - "edit_tenant" : { - "type" : "boolean", - "classification" : "PRIVATE" - }, - "extra_vars" : { - "type" : "object", - "classification" : "PRIVATE" - }, - "id" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "ID" - }, - "job_template_id" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "jobs" : { - "type" : "object", - "classification" : "PRIVATE" - }, - "key" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "keycloak_admin_password" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "keycloak_admin_username" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "name" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "process_definition_key" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Prozess" - }, - "progress_current" : { - "type" : "long", - "classification" : "PRIVATE" - }, - "progress_max" : { - "type" : "long", - "classification" : "PRIVATE" - }, - "pruefer_id" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "selected_tenant" : { - "type" : "object", - "classification" : "PRIVATE" - }, - "sendUpAndRunningMail" : { - "type" : "boolean", - "classification" : "PRIVATE" - }, - "service" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "service_url" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "size" : { - "type" : "long", - "classification" : "PRIVATE" - }, - "stage" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "tenant" : { - "type" : "object", - "classification" : "PRIVATE", - "fields" : { - "name" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Mandant Name" - }, - "key" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Mandant Schlüssel" - } - } - }, - "tenant_id" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "vorgang_status" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "vorgang_status_text" : { - "type" : "string", - "classification" : "PRIVATE", - "searchable" : true, - "label" : "Status" - }, - "wizard_selection" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "wordpress_admin_password" : { - "type" : "string", - "classification" : "PRIVATE" - }, - "wordpress_admin_username" : { - "type" : "string", - "classification" : "PRIVATE" - } - } -} \ No newline at end of file diff --git a/smardigo/provisioning/process/investigator.dmn b/smardigo/provisioning/process/investigator.dmn deleted file mode 100644 index e50a91c..0000000 --- a/smardigo/provisioning/process/investigator.dmn +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - tenant_id - - - - - - - - - - "head" - - - - - - - - - - - - diff --git a/smardigo/provisioning/process/simple-connect.bpmn b/smardigo/provisioning/process/simple-connect.bpmn deleted file mode 100644 index 398d487..0000000 --- a/smardigo/provisioning/process/simple-connect.bpmn +++ /dev/null @@ -1,2277 +0,0 @@ - - - - - - - - - - - Flow_1w2pl97 - Flow_0l51s9z - - - Flow_1rtcnw8 - - - Flow_17rbwn1 - Flow_13jykf9 - Flow_1hsqawc - - - - - ${15} - Antrag gesendet - - - Flow_1hsqawc - Flow_0ex5zxa - - - Flow_0dybqr7 - Flow_17rbwn1 - - - - - ${10} - Neu - - - Flow_1gqgiz8 - Flow_0dybqr7 - - - - - ${tenant.id} - - - Flow_0btq5mg - Flow_1gqgiz8 - - - Flow_13jykf9 - - - - - - - - - ${0} - ${1} - - - ${envStage} - - ${1} - connect - - - - - - - - - wordpress-admin - - - - connect-realm-admin - wordpress-admin - connect-admin - ${envStage != 'dev'} - - - Flow_1rtcnw8 - Flow_0btq5mg - - - Flow_0ex5zxa - Flow_0zcb7z2 - Flow_1qghkm9 - Flow_0qc2wxt - - - - - ${30} - Antrag freigegeben - - - Flow_14pzxys - Flow_052tizj - Flow_1w2pl97 - - - - - - - - - - Flow_1qghkm9 - Flow_0l2gvw9 - - - Flow_1n08t19 - - - Flow_09j614s - - - - Flow_19oh3q2 - Flow_0qhadmy - - - Flow_0l2gvw9 - Flow_14pzxys - - Flow_0oy4ldu - - - Flow_0oy4ldu - Flow_0wzmz4j - - - - Flow_0wzmz4j - - - - - - Flow_0qc2wxt - - - Flow_14qlmwl - Flow_03lhlpu - - - - - ${40} - Service wird gestartet - - - Flow_0l51s9z - Flow_0bzl5jh - - - - - - - - - ${progress_current + 1} - - - Flow_0utt18n - Flow_0kli6wa - - - Flow_1c2a31w - - Flow_0j5ui0o - - - - - - - - - ${5} - - - Flow_07sf9z8 - Flow_1c6reic - - - - - ${1} - ${4} - - - Flow_0r057gs - Flow_07sf9z8 - - - - - ${41} - Service wird aktualisiert - - - Flow_1lbjdee - Flow_18y954i - - - Flow_0j5ui0o - Flow_1yyd3eu - Flow_1lt30rz - - - - - - - - - - ${42} - Datenbanken werden gesichert - - - Flow_0obgxao - Flow_0k8emzg - - - - - ${1} - ${3} - - - Flow_0nhy074 - Flow_1pt1vey - - - - - - - - ${$action=='sichern'} - - - - - - - - - - - - - backup - - - ${progress_current + 1} - - - Flow_1pt1vey - Flow_0pukv52 - - - - Flow_1lt30rz - Flow_1lbjdee - Flow_0obgxao - Flow_15yi07j - Flow_0bhv1gi - Flow_09x0w6y - - - - - - - - ${$action=='aktualisieren'} - - - - - - - - - - Flow_18y954i - Flow_0r057gs - - - - - - - - - - - Flow_0k8emzg - Flow_0nhy074 - - - - Flow_1wmjqng - - - - Flow_05an5rx - Flow_0fu5s0o - Flow_0e5dqc8 - Flow_0pukv52 - Flow_00jy6ae - Flow_0ju2tch - Flow_0s7lukd - Flow_1bdsym1 - - - - - - ${43} - Datenbanken werden wiederhergestellt - - - Flow_15yi07j - Flow_0yusy35 - - - - - ${1} - ${5} - - - Flow_1c39717 - Flow_09id3fl - - - - - - - - - - Flow_0yusy35 - Flow_1c39717 - - - - - - - - - - - ${$action=='wiederherstellen'} - - - Flow_1yyd3eu - - - - - - - - - - - - - down - - - ${progress_current + 1} - - - Flow_09id3fl - Flow_1xmeor7 - - - - - - - - - - - - backup - - - ${progress_current + 1} - - - Flow_1xmeor7 - Flow_00a7lij - - - - - - - - - - - - up - - - ${progress_current + 1} - - - Flow_00a7lij - Flow_00jy6ae - - - - - - - - - - ${progress_current + 1} - - - Flow_1c6reic - Flow_0e5dqc8 - - - - - - - - - - ${5} - - - Flow_140km0x - Flow_0iaarud - - - - - ${1} - ${4} - - - Flow_0ekn24z - Flow_140km0x - - - - - ${44} - Service wird aktualisiert - - - Flow_0bhv1gi - Flow_1fy2say - - - - - - - - - - Flow_01vwyx0 - Flow_0ekn24z - - - - - - - - - ${progress_current + 1} - - - Flow_0iaarud - Flow_0ju2tch - - - - - - - - ${$action=='auf-neue-version-aktualisieren'} - - - - Flow_1fy2say - Flow_0lmp48m - - - Flow_0lmp48m - Flow_01vwyx0 - Flow_05an5rx - - - ${$action == 'ok'} - - - ${$action == 'abbrechen'} - - - - - - - - - ${5} - - - Flow_0swo8uc - Flow_0sjgl0x - - - - - ${1} - ${4} - - - Flow_05exzhl - Flow_0swo8uc - - - - - ${45} - Service wird aktualisiert - - - Flow_09x0w6y - Flow_16vxkhf - - - - - - - - - - Flow_0dd4zj2 - Flow_05exzhl - - - - - - - - - ${progress_current + 1} - - - Flow_0sjgl0x - Flow_0s7lukd - - - Flow_16vxkhf - Flow_0x16obd - - - Flow_0x16obd - Flow_0dd4zj2 - Flow_0fu5s0o - - - - - - - - ${$action == 'ok'} - - - - ${$action=='features-aktualisieren'} - - - ${$action == 'abbrechen'} - - - - - ${50} - Service gestartet - - - Flow_05lm53t - Flow_1wmjqng - - - - - - - - - - ${progress_current + 1} - - - Flow_1bdsym1 - Flow_05lm53t - - - - - Flow_042d7e6 - - - Flow_1x24mk0 - - - - Flow_0fqbjt7 - Flow_1x24mk0 - - - - - - ${91} - Antrag abgebrochen - - - Flow_0xsem7d - Flow_0fqbjt7 - - - Flow_0xsem7d - - - - Flow_00t49db - - - - - - - - - - ${progress_current + 1} - - - Flow_00t49db - Flow_1in0ur5 - - - Flow_1in0ur5 - - - Flow_042d7e6 - - ${vorgang_status >= 60} - - - - Flow_03lhlpu - - ${vorgang_status == 92} - - - - Flow_14qlmwl - - ${vorgang_status == 50} - - - - Flow_0qhadmy - - ${vorgang_status == 92} - - - - Flow_19oh3q2 - - ${vorgang_status == 30} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${$action == 'senden'} - - - - - - - - - ${$action == 'abbrechen'} - - - - - - - - - - - - - - - - - - - - - - Flow_09j614s - - ${vorgang_status == 92} - - - - Flow_1n08t19 - - ${vorgang_status == 30} - - - - Flow_0zcb7z2 - Flow_052tizj - - Flow_1xk6340 - - - - - ${tenant.id} - - - Flow_1xk6340 - Flow_18sqo48 - - - - - - import de.tolina.connect.common.variable.Variables -def authenticatedUserId = users.currentUserId() -Variables.userId(authenticatedUserId) - - - - Flow_18sqo48 - Flow_0cqe2bp - Flow_0xvqt4u - - - Flow_0xvqt4u - Flow_1j32s69 - - - Flow_1j32s69 - Flow_0cqe2bp - Flow_1az29g1 - - - Flow_1az29g1 - Flow_0135fm5 - Flow_0tivdau - - - - ${$action == 'abbrechen'} - - - - - ${$action == 'speichern'} - - - - Flow_0135fm5 - - - ${antrag_decission== 'antragGenehmigen'} - - - - - ${92} - Antrag abgebrochen - - - Flow_0tivdau - - - ${antrag_decission== 'antragAblehnen'} - - - - - - - - - - - - ${progress_current + 1} - - - Flow_14qi17c - Flow_0utt18n - - - - - - - - - ${progress_current + 1} - - - Flow_0lugtf9 - Flow_14qi17c - - - - - - - - - ${progress_current + 1} - - - Flow_04gf2u4 - Flow_0lugtf9 - - - - - ${1} - ${6} - - - Flow_1hoe8au - Flow_04gf2u4 - - - - - - - - - - Flow_14gp1tg - Flow_1hoe8au - - - - - ${60} - Service wird gelöscht - - - Flow_090j3ro - Flow_14gp1tg - - - - - - import de.tolina.connect.common.variable.Variables -def authenticatedUserId = users.currentUserId() -Variables.userId(authenticatedUserId) - - - - Flow_0yh3rtc - Flow_090j3ro - - - Flow_1381iar - Flow_0yh3rtc - Flow_1c2a31w - - - - - ${1} - ${8} - - - Flow_0bzl5jh - Flow_11ki58f - - - - - - - - - ${progress_current + 1} - - - Flow_11ki58f - Flow_1eku1o4 - - - - - - - - - ${progress_current + 1} - - - Flow_1eku1o4 - Flow_0pvr263 - - - - - - - - - ${progress_current + 1} - - - Flow_0pvr263 - Flow_1f0iyrk - - - - - - - - - ${progress_current + 1} - - - Flow_1f0iyrk - Flow_11k5c1y - - - - - - - - - ${progress_current + 1} - - - Flow_11k5c1y - Flow_1r4otto - - - - - - - - - - - wordpress_portal.sql.gz - - - ${progress_current + 1} - - - Flow_1r4otto - Flow_1u7vy0j - - - Flow_1u7vy0j - Flow_1gzjfsr - Flow_0d1wzgo - - - Flow_0d1wzgo - - - - ${sendUpAndRunningMail} - - - Flow_1gzjfsr - Flow_0y3ipyp - Flow_1qxegy2 - - - - - - - - - - - ${creation_user_id} - Neue Smardigo Instanz - template(smardigo-up-and-running) - - - Flow_0y3ipyp - Flow_10y7ypm - - - Flow_1qxegy2 - Flow_10y7ypm - Flow_1d07vge - - - - - - ${50} - Service gestartet - - - Flow_1d07vge - Flow_1381iar - - - - - - - - - ${progress_current + 1} - - - Flow_0kli6wa - Flow_11fywti - - - - - - ${70} - Service gelöscht - - - Flow_11fywti - Flow_13do7kt - - - Flow_13do7kt - - - - - - - - - - - - - - Flow_1ow8whd - - - - - - - - - - - - - - - - ${extra_vars} - - - - - Flow_1nqz9ya - Flow_1kxc9t0 - - - Flow_1ow8whd - Flow_0qfq760 - - - - - - - - - Flow_0qfq760 - Flow_11nxxg5 - - - - - - datasources.query('awx-job-templates').processScope(contextScopeId, contextProcessId).parameters([name:smardigoManagementAction]).list()[0]['id']; - - - - Flow_11nxxg5 - Flow_1cnt5hf - - - - - /api/v2/job_templates/${job_template_id}/launch/ - - - - - - Flow_1cnt5hf - Flow_1nqz9ya - - - Flow_1kxc9t0 - Flow_1nuku1o - def jobs = processes.byId(contextScopeId, contextProcessId).getVariable('jobs') -jobs = !!jobs ? jobs : [] -jobs.add(0, awxResponse.job) -processes.byId(contextScopeId, contextProcessId).setVariable('jobs', jobs) - -processes.byId(contextScopeId, contextProcessId).setVariable('current_job_id', awxResponse.job) - -processes.byId(contextScopeId, contextProcessId).createComment('current_job_id := ' + awxResponse.job) - - - Flow_1nuku1o - Flow_0gcsmj7 - - - - Flow_0gcsmj7 - Flow_1ju13h8 - - - Flow_1ju13h8 - - - - - - Flow_1nu8qqa - - - - - - - - - - - - Flow_1nu8qqa - Flow_127qqnb - - - Flow_127qqnb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smardigo/provisioning/role-policy-mapping/role-policy-mapping.json b/smardigo/provisioning/role-policy-mapping/role-policy-mapping.json deleted file mode 100644 index d843bb5..0000000 --- a/smardigo/provisioning/role-policy-mapping/role-policy-mapping.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name" : "Policy Mapping", - "configKey" : "role-policy-mapping", - "configType" : "role-policy-mapping", - "rolePolicyMapping" : { - "user" : [ "allow_read_write_variables_all" ], - "maintainer" : [ "allow_delete_process_all" ], - "administrator" : [ "allow_delete_process_all" ] - } -} \ No newline at end of file diff --git a/smardigo/provisioning/roles/roles.json b/smardigo/provisioning/roles/roles.json deleted file mode 100644 index 44c16c9..0000000 --- a/smardigo/provisioning/roles/roles.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name" : "roles", - "configKey" : "roles", - "configType" : "roles", - "roles" : [ { - "id" : "user", - "name" : "User" - }, { - "id" : "head", - "name" : "Head" - }, { - "id" : "maintainer", - "name" : "Maintainer" - }, { - "id" : "administrator", - "name" : "Administrator" - } ] -} \ No newline at end of file diff --git a/smardigo/provisioning/script/ansible-end.groovy b/smardigo/provisioning/script/ansible-end.groovy deleted file mode 100644 index e08ddf8..0000000 --- a/smardigo/provisioning/script/ansible-end.groovy +++ /dev/null @@ -1 +0,0 @@ -processes.byId(contextScopeId, contextProcessId).createComment(comment + ' beendet') \ No newline at end of file diff --git a/smardigo/provisioning/script/ansible-start.groovy b/smardigo/provisioning/script/ansible-start.groovy deleted file mode 100644 index 38d0487..0000000 --- a/smardigo/provisioning/script/ansible-start.groovy +++ /dev/null @@ -1,43 +0,0 @@ -def cluster_features = ['connect'] + execution.getVariable('connect-features') - -def env = [ - cluster_features: cluster_features, - cluster_name: cluster.name, - cluster_service: cluster.service, - cluster_size: cluster.size, - connect_image_version: binding.hasVariable('connect') ? connect.version : 'latest', - current_realm_name: tenant.key, - current_realm_display_name: tenant.name, - process_instance_id: execution.getProcessInstanceId(), - scope_id: contextScopeId, - smardigo_management_action: smardigoManagementAction, - stage: cluster.stage, - tenant_id: tenant.key, - connect_client_admin_username: connect_admin_username, - connect_client_admin_password: connect_admin_password, - connect_realm_admin_username: keycloak_admin_username, - connect_realm_admin_password: keycloak_admin_password, - wordpress_admin_username: wordpress_admin_username, - wordpress_admin_password: wordpress_admin_password -] -if (binding.hasVariable('extraVariables')) { - env << extraVariables -} - -def filename = 'xvars-' + smardigoManagementAction + '-' + execution.getProcessInstanceId() + '.yml' -def ansibleCommand= 'ansible-playbook ' + smardigoManagementAction + '.yml --vault-password-file ~/vault-pass-' + envStage + ' -e "@' + filename + '"' -def ansibleVariables= 'cat < ' + filename + '\n' -ansibleVariables+= '---\n' -env.each { key, val -> - if (val instanceof List) { - ansibleVariables+= key + ':\n- \'' + val.join('\'\n- \'') + '\'\n' - } else { - ansibleVariables+= key + ': \'' + val + '\'\n' - } -} -ansibleVariables+= 'EOT' - -processes.byId(contextScopeId, contextProcessId).createComment(comment + ' gestartet') -processes.byId(contextScopeId, contextProcessId).createComment(ansibleVariables + '\n' + ansibleCommand) - -ansibleCommand \ No newline at end of file diff --git a/smardigo/provisioning/script/create-awx-paramaters.groovy b/smardigo/provisioning/script/create-awx-paramaters.groovy deleted file mode 100644 index f02d681..0000000 --- a/smardigo/provisioning/script/create-awx-paramaters.groovy +++ /dev/null @@ -1,27 +0,0 @@ -def cluster_features = ['connect'] + execution.getVariable('connect-features') - -def env = [ - cluster_features: cluster_features, - cluster_name: cluster.name, - cluster_service: cluster.service, - cluster_size: cluster.size, - connect_version: binding.hasVariable('connect') ? connect.version : 'latest', - current_realm_name: tenant.key, - current_realm_display_name: tenant.name, - process_instance_id: execution.getProcessInstanceId(), - scope_id: contextScopeId, - smardigo_management_action: smardigoManagementAction, - stage: cluster.stage, - tenant_id: tenant.key, - connect_client_admin_username: binding.hasVariable('connect_admin_username') ? connect_admin_username : '', - connect_client_admin_password: binding.hasVariable('connect_admin_password') ? connect_admin_password : '', - connect_realm_admin_username: binding.hasVariable('keycloak_admin_username') ? keycloak_admin_username : '', - connect_realm_admin_password: binding.hasVariable('keycloak_admin_password') ? keycloak_admin_password : '', - wordpress_admin_username: binding.hasVariable('wordpress_admin_username') ? wordpress_admin_username : '', - wordpress_admin_password: binding.hasVariable('wordpress_admin_password') ? wordpress_admin_password : '' -] -if (binding.hasVariable('extraVariables')) { - env << extraVariables -} - -env \ No newline at end of file diff --git a/smardigo/provisioning/script/create-password.groovy b/smardigo/provisioning/script/create-password.groovy deleted file mode 100644 index 935f273..0000000 --- a/smardigo/provisioning/script/create-password.groovy +++ /dev/null @@ -1,26 +0,0 @@ -def pool_length = 20; -def digits = [0..9].flatten() - [ 'O', '0', 'l', '1', 'I' ] -def upperCase = ['A'..'Z'].flatten() - [ 'O', '0', 'l', '1', 'I' ] -def lowerCase = ['a'..'z'].flatten() - [ 'O', '0', 'l', '1', 'I' ] -def special = ['~','!','#','%','&','(',')','{','}','[',']','-','+'] - -def pool = digits + upperCase + lowerCase + special - -Random rand = new Random(System.currentTimeMillis()); -def passChars = (0..pool_length - 1).collect { pool[rand.nextInt(pool.size())] }; - -passChars[0] = special[rand.nextInt(special.size())] -passChars[pool_length - 0] = special[rand.nextInt(special.size())] - -passChars[1] = upperCase[rand.nextInt(upperCase.size())] -passChars[pool_length - 1] = upperCase[rand.nextInt(upperCase.size())] - -passChars[2] = lowerCase[rand.nextInt(lowerCase.size())] -passChars[pool_length - 2] = lowerCase[rand.nextInt(lowerCase.size())] - -passChars[3] = digits[rand.nextInt(digits.size())] -passChars[pool_length - 3] = digits[rand.nextInt(digits.size())] - -def PASSWORD = passChars.join(''); - -PASSWORD \ No newline at end of file diff --git a/smardigo/provisioning/script/create-teams-message.groovy b/smardigo/provisioning/script/create-teams-message.groovy deleted file mode 100644 index 12b424b..0000000 --- a/smardigo/provisioning/script/create-teams-message.groovy +++ /dev/null @@ -1,45 +0,0 @@ -def smardigoUrl = "https://" + cluster.stage + "-management-01-connect.smardigo.digital/api/redirect/process/" + contextScopeId + "/dossier/simple-connect/" + contextProcessId -def smardigoMessageUrl = "https://" + cluster.stage + "-management-01-connect.smardigo.digital/api/v1/scopes/" + contextScopeId + "/processes/" + contextProcessId + "/messages" - -def message = [:] -message["@type"] = "MessageCard" -message["@context"] = "http://schema.org/extensions" -message["themeColor"] = "0076D7" -message["summary"] = "Neue Aufgabe: " + comment - -def section = [:] -section["activityTitle"] = activityTitle -section["activitySubtitle"] = activitySubtitle -section["activityImage"] = "https://smardigo.de/wp-content/uploads/2020/01/smardigo-min.png" -section["facts"] = [ - [name:"Stage",value:cluster.stage], - [name:"Name",value:cluster.name], - [name:"Service",value:cluster.service], - [name:"Mandant",value:tenant.name] -] -message.sections = [section] - -def potentialAction = [] - -def openInSmardigo = [:] -openInSmardigo["@type"] = "ViewAction" -openInSmardigo["@context"] = "http://schema.org" -openInSmardigo["name"] = "Vorgang öffnen" -openInSmardigo["target"] = [smardigoUrl] -potentialAction.add(openInSmardigo) - -if (vorgang_status < 30) { - def approveInSmardigo = [:] - approveInSmardigo["@type"] = "HttpPOST" - approveInSmardigo["name"] = "Server freigeben" - approveInSmardigo["target"] = smardigoMessageUrl - approveInSmardigo["body"] = "{\"message\":\"process-approved-" + contextProcessId + "\"}" - approveInSmardigo["headers"] = [ - [name:"Smardigo-User-Token",value:envSmardigoUserToken] - ] - potentialAction.add(approveInSmardigo) -} - -message.potentialAction = potentialAction - -message \ No newline at end of file diff --git a/smardigo/provisioning/script/external-task-mock.groovy b/smardigo/provisioning/script/external-task-mock.groovy deleted file mode 100644 index 91b1368..0000000 --- a/smardigo/provisioning/script/external-task-mock.groovy +++ /dev/null @@ -1,24 +0,0 @@ -/**************************************** - insert process variable values start -*****************************************/ -def processVariables = [:] -processVariables.result = creation_user_id + " is not a cat" - -/**************************************** - insert process variable values end -*****************************************/ -/**************************************** - insert local variable values start -*****************************************/ -def localVariables = [:] - -/**************************************** - insert local variable values end -*****************************************/ - -def result = [ - processVariables:processVariables, - localVariables:localVariables -] - -return result; \ No newline at end of file diff --git a/smardigo/provisioning/script/initialize-connect-features.groovy b/smardigo/provisioning/script/initialize-connect-features.groovy deleted file mode 100644 index cf66253..0000000 --- a/smardigo/provisioning/script/initialize-connect-features.groovy +++ /dev/null @@ -1,10 +0,0 @@ - -def parameters = [:] -parameters["default"] = "'1'" - -def defaultFeatures = datasources.query("connect-features").processScope(contextScopeId, contextScopeTag).parameters(parameters).list(); - -def features = [] -defaultFeatures.each { val -> features+= val.key } - -features \ No newline at end of file diff --git a/smardigo/template/process/primary-process.bpmn b/smardigo/template/process/primary-process.bpmn index 1b330be..c41bfb5 100644 --- a/smardigo/template/process/primary-process.bpmn +++ b/smardigo/template/process/primary-process.bpmn @@ -40,15 +40,6 @@ - - - - - - - - - diff --git a/smardigo/wordpress_portal.sql.gz b/smardigo/wordpress_portal.sql.gz index 3c9d9be..df8fe72 100644 Binary files a/smardigo/wordpress_portal.sql.gz and b/smardigo/wordpress_portal.sql.gz differ diff --git a/tasks/pmci_set_default_variables.yml b/tasks/pmci_set_default_variables.yml new file mode 100644 index 0000000..bb726be --- /dev/null +++ b/tasks/pmci_set_default_variables.yml @@ -0,0 +1,29 @@ +--- +- name: "Setting pmci default variables" + ansible.builtin.set_fact: + ansible_ssh_host: "{{ stage_server_domain }}" + tenant_id: "{{ tenant.key }}" # legacy paramater, backwards compatibility + cluster_name: "{{ cluster.key }}" # legacy paramater, backwards compatibility + current_realm_name: "{{ tenant.key }}" # legacy paramater, backwards compatibility + management_base_url: "{{ stage }}-management-01-connect.{{ domain }}" + +- name: "Setting pmci connect variables" + ansible.builtin.set_fact: + connect_version: "{{ data.connect.version }}" # legacy paramater, backwards compatibility + connect_client_admin_username: "{{ data.connect.admin.username | default(cluster.key + '-connect-admin') }}" # legacy paramater, backwards compatibility + when: + - data.connect is defined + +- name: "Setting pmci wordpress variables" + ansible.builtin.set_fact: + connect_wordpress_admin_username: "{{ data.wordpress.admin.username | default(cluster.key + '-wordpress-admin') }}" # legacy paramater, backwards compatibility + connect_wordpress_admin_password: "{{ data.wordpress.admin.password | default(cluster.key + '-wordpress-admin') }}" # legacy paramater, backwards compatibility + wordpress_connect_username: "{{ data.wordpress.connect.username | default(cluster.key + '-wordpress-connect') }}" # legacy paramater, backwards compatibility + when: + - data.wordpress is defined + +- name: "Setting pmci database variables" + ansible.builtin.set_fact: + database_backup_file: "{{ data.database.backup_file }}" # legacy paramater, backwards compatibility + when: + - data.database is defined diff --git a/templates/wordpress/config/config.ini b/templates/wordpress/config/config.ini new file mode 100644 index 0000000..0f0134d --- /dev/null +++ b/templates/wordpress/config/config.ini @@ -0,0 +1,5 @@ +file_uploads = On +memory_limit = 256M +upload_max_filesize = 64M +post_max_size = 64M +max_execution_time = 600 diff --git a/templates/wordpress/data/plugins/index.php b/templates/wordpress/data/plugins/index.php deleted file mode 100644 index 6220032..0000000 --- a/templates/wordpress/data/plugins/index.php +++ /dev/null @@ -1,2 +0,0 @@ - to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - tasks: - - name: "Add all servers for stage {{ stage }} to inventory" - add_host: - name: "{{ item.name }}" - groups: - - "stage_{{ stage }}" - - "{{ item.service }}" - stage_server_infos: "{{ stage_server_infos }}" - changed_when: False - with_items: "{{ stage_server_infos }}" - -############################################################# -# Updating monitoring for all servers -############################################################# - -- hosts: "{{ stage }}-prometheus-01" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - ansible_ssh_host: "{{ stage_server_domain }}" - - tasks: - - include_role: - name: prometheus - tasks_from: _update_config - - include_role: - name: prometheus - tasks_from: _reload_config - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/update-service-state.yml b/update-service-state.yml deleted file mode 100644 index 2f8df41..0000000 --- a/update-service-state.yml +++ /dev/null @@ -1,89 +0,0 @@ ---- - -# Parameters: -# playbook inventory -# stage := the name of the stage (e.g. devnso, qanso, prodnso) -# tenant_id := (unique key for the tenant, e.g. customer) -# cluster_name := (business name for the cluster, e.g. product, department ) -# cluster_features := (services to setup, e.g. ['connect', 'wordpress', ...]) -# service_state := the state of the service (e.g. up, down, upgrade) -# smardigo message callback -# scope_id := (scope id of the management process) -# process_instance_id := (process instance id of the management process) -# smardigo_management_action := (smardigo management action anme of the management process) - -############################################################# -# Creating inventory dynamically for given parameters -############################################################# - -- hosts: localhost - gather_facts: false - connection: local - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - -# add virtual server to load stage specific variables as context - - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" - add_host: - name: "{{ stage }}-virtual-host-to-read-groups-vars" - groups: - - "stage_{{ stage }}" - changed_when: False - - tasks: - - name: Add hosts - add_host: - name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-{{ '%02d' | format(item|int) }}" - groups: "{{ ['stage_' + stage ] + [cluster_service] + cluster_features }}" - with_sequence: start=1 end={{ cluster_size | default(1) }} - changed_when: False - -############################################################# -# Stopping services for created inventory -############################################################# - -- hosts: "stage_{{ stage }}:!{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - remote_user: root - vars: - service_state: up - ansible_ssh_host: "{{ stage_server_domain }}" - - pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false - tags: - - always - - roles: - - role: service_state - vars: - service_id: "{{ connect_id }}" - when: "'connect' in group_names" - - - role: service_state - vars: - service_id: "{{ wordpress_id }}" - when: "'connect_wordpress' in group_names" - -############################################################# -# Sending smardigo management message to process -############################################################# - -- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" - serial: "{{ serial_number | default(1) }}" - gather_facts: false - connection: local - run_once: true - vars: - connect_jwt_username: "{{ management_admin_username }}" - - tasks: - - name: "Sending smardigo management message to <{{ shared_service_url_management }}>" - include_tasks: tasks/smardigo_management_message.yml diff --git a/upload-database-dump.yml b/upload-database-dump.yml index d227d8d..c188c61 100644 --- a/upload-database-dump.yml +++ b/upload-database-dump.yml @@ -18,47 +18,26 @@ # Creating inventory dynamically for given parameters ############################################################# -- hosts: localhost - connection: local - gather_facts: false - - pre_tasks: - - name: "Import constraints check" - import_tasks: tasks/constraints_check.yml - become: false - tags: - - always - - tasks: - - name: "Add maria servers to hosts if necessary" - add_host: - name: "{{ shared_service_maria_primary }}" - groups: - - "stage_{{ stage }}" - - "{{ item }}" - changed_when: False - with_items: "{{ cluster_features }}" - when: item in ['connect_wordpress'] - -############################################################# -# Uploading database backups for created inventory -############################################################# - -- hosts: "stage_{{ stage }}" - serial: "{{ serial_number | default(1) }}" - remote_user: root +- name: 'apply setup to {{ host | default("maria") }}' + hosts: '{{ host | default("postgress,maria") }}' + serial: "{{ serial_number | default(5) }}" + become: yes vars: ansible_ssh_host: "{{ stage_server_domain }}" pre_tasks: - - name: "Import autodiscover pre-tasks" - import_tasks: tasks/autodiscover_pre_tasks.yml - become: false + - name: "Check if ansible version is at least {{ ansible_minimal_version }}" + assert: + that: + - ansible_version.string is version(ansible_minimal_version, ">=") + msg: "The ansible version has to be at least {{ ansible_minimal_version }}" tags: - always roles: - role: upload_local_file - when: - - "'connect_wordpress' in group_names" - - "upload_file is defined" + vars: + upload_owner: "{{ backupuser_user_name }}" + upload_group: "{{ backupuser_user_name }}" + upload_file: "smardigo/wordpress_portal.sql.gz" + uploaded_file: "backups/wordpress_portal.sql.gz"