feature/app_groups #16

Open
carla wants to merge 2 commits from carla/authentik:feature/app_groups into main
24 changed files with 52 additions and 14 deletions

View File

@ -64,11 +64,22 @@ COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/"
# BACKGROUND_BOX_COLOR='#eaeaeacf' # BACKGROUND_BOX_COLOR='#eaeaeacf'
# THEME_BACKGROUND="url('https://authentik.example.com/static/dist/assets/images/flow_background.jpg'); background-position: center; background-repeat: no-repeat; background-size: cover;" # THEME_BACKGROUND="url('https://authentik.example.com/static/dist/assets/images/flow_background.jpg'); background-position: center; background-repeat: no-repeat; background-size: cover;"
# Group Name Variables to cluster Applications
# GROUP_SUPPORT=Support
# GROUP_HELP=Help
# GROUP_ORGANISATION=Organisation
# GROUP_COMMUNICATION=Communication
# GROUP_COLLABORATION=Collaboration
# GROUP_DOCUMENTATION=Documentation
# GROUP_DEVELOPMENT=Development
# GROUP_INFRASTRUCTURE=Infrastructure
# COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud.yml"
# NEXTCLOUD_DOMAIN=nextcloud.example.com # NEXTCLOUD_DOMAIN=nextcloud.example.com
# SECRET_NEXTCLOUD_ID_VERSION=v1 # SECRET_NEXTCLOUD_ID_VERSION=v1
# SECRET_NEXTCLOUD_SECRET_VERSION=v1 # SECRET_NEXTCLOUD_SECRET_VERSION=v1
# APP_ICONS="nextcloud:~/.abra/recipes/authentik/icons/nextcloud.png" # APP_ICONS="nextcloud:~/.abra/recipes/authentik/icons/nextcloud.png"
# NEXTCLOUD_APPGROUP="$GROUP_ORGANISATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.wordpress.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.wordpress.yml"
# WORDPRESS_DOMAIN=wordpress.example.com # WORDPRESS_DOMAIN=wordpress.example.com
@ -76,6 +87,7 @@ COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/"
# SECRET_WORDPRESS_ID_VERSION=v1 # SECRET_WORDPRESS_ID_VERSION=v1
# SECRET_WORDPRESS_SECRET_VERSION=v1 # SECRET_WORDPRESS_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS wordpress:~/.abra/recipes/authentik/icons/wordpress.png" # APP_ICONS="$APP_ICONS wordpress:~/.abra/recipes/authentik/icons/wordpress.png"
# WORDPRESS_APPGROUP="$GROUP_DEVELOPMENT"
# COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml"
# ELEMENT_DOMAIN=element-web.example.com # ELEMENT_DOMAIN=element-web.example.com
@ -83,52 +95,61 @@ COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/"
# SECRET_MATRIX_ID_VERSION=v1 # SECRET_MATRIX_ID_VERSION=v1
# SECRET_MATRIX_SECRET_VERSION=v1 # SECRET_MATRIX_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS matrix:~/.abra/recipes/authentik/icons/matrix.svg" # APP_ICONS="$APP_ICONS matrix:~/.abra/recipes/authentik/icons/matrix.svg"
# MATRIX_APPGROUP="$GROUP_COMMUNICATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.wekan.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.wekan.yml"
# WEKAN_DOMAIN=wekan.example.com # WEKAN_DOMAIN=wekan.example.com
# SECRET_WEKAN_ID_VERSION=v1 # SECRET_WEKAN_ID_VERSION=v1
# SECRET_WEKAN_SECRET_VERSION=v1 # SECRET_WEKAN_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS wekan:~/.abra/recipes/authentik/icons/wekan.png" # APP_ICONS="$APP_ICONS wekan:~/.abra/recipes/authentik/icons/wekan.png"
# WEKAN_APPGROUP="$GROUP_ORGANISATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.vikunja.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.vikunja.yml"
# VIKUNJA_DOMAIN=vikunja.example.com # VIKUNJA_DOMAIN=vikunja.example.com
# SECRET_VIKUNJA_ID_VERSION=v1 # SECRET_VIKUNJA_ID_VERSION=v1
# SECRET_VIKUNJA_SECRET_VERSION=v1 # SECRET_VIKUNJA_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS vikunja:~/.abra/recipes/authentik/icons/vikunja.svg" # APP_ICONS="$APP_ICONS vikunja:~/.abra/recipes/authentik/icons/vikunja.svg"
# VIKUNJA_APPGROUP="$GROUP_ORGANISATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.outline.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.outline.yml"
# OUTLINE_DOMAIN=outline.example.com # OUTLINE_DOMAIN=outline.example.com
# SECRET_OUTLINE_ID_VERSION=v1 # SECRET_OUTLINE_ID_VERSION=v1
# SECRET_OUTLINE_SECRET_VERSION=v1 # SECRET_OUTLINE_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS outline:~/.abra/recipes/authentik/icons/outline.png" # APP_ICONS="$APP_ICONS outline:~/.abra/recipes/authentik/icons/outline.png"
# OUTLINE_APPGROUP="$GROUP_DOCUMENTATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.kimai.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.kimai.yml"
# KIMAI_DOMAIN=kimai.example.com # KIMAI_DOMAIN=kimai.example.com
# SECRET_KIMAI_ID_VERSION=v1 # SECRET_KIMAI_ID_VERSION=v1
# SECRET_KIMAI_SECRET_VERSION=v1 # SECRET_KIMAI_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS kimai:~/.abra/recipes/authentik/icons/kimai_logo.png" # APP_ICONS="$APP_ICONS kimai:~/.abra/recipes/authentik/icons/kimai_logo.png"
# KIMAI_APPGROUP="$GROUP_ORGANISATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.zammad.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.zammad.yml"
# ZAMMAD_DOMAIN=zammad.example.com # ZAMMAD_DOMAIN=zammad.example.com
# APP_ICONS="$APP_ICONS zammad:~/.abra/recipes/authentik/icons/zammad.svg" # APP_ICONS="$APP_ICONS zammad:~/.abra/recipes/authentik/icons/zammad.svg"
# ZAMMAD_APPGROUP="$GROUP_SUPPORT"
# COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml"
# MONITORING_DOMAIN=monitoring.example.com # MONITORING_DOMAIN=monitoring.example.com
# SECRET_MONITORING_ID_VERSION=v1 # SECRET_MONITORING_ID_VERSION=v1
# SECRET_MONITORING_SECRET_VERSION=v1 # SECRET_MONITORING_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS monitoring:~/.abra/recipes/authentik/icons/monitoring.svg" # APP_ICONS="$APP_ICONS monitoring:~/.abra/recipes/authentik/icons/monitoring.svg"
# MONITORING_APPGROUP="$GROUP_INFRASTRUCTURE"
# COMPOSE_FILE="$COMPOSE_FILE:compose.rallly.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.rallly.yml"
# RALLLY_DOMAIN=rallly.example.com # RALLLY_DOMAIN=rallly.example.com
# SECRET_RALLLY_ID_VERSION=v1 # SECRET_RALLLY_ID_VERSION=v1
# SECRET_RALLLY_SECRET_VERSION=v1 # SECRET_RALLLY_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS rallly:~/.abra/recipes/authentik/icons/rallly.png" # APP_ICONS="$APP_ICONS rallly:~/.abra/recipes/authentik/icons/rallly.png"
# RALLLY_APPGROUP="$GROUP_ORGANISATION"
# COMPOSE_FILE="$COMPOSE_FILE:compose.hedgedoc.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.hedgedoc.yml"
# HEDGEDOC_DOMAIN=hedgedoc.example.com # HEDGEDOC_DOMAIN=hedgedoc.example.com
# SECRET_HEDGEDOC_ID_VERSION=v1 # SECRET_HEDGEDOC_ID_VERSION=v1
# SECRET_HEDGEDOC_SECRET_VERSION=v1 # SECRET_HEDGEDOC_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS hedgedoc:~/.abra/recipes/authentik/icons/hedgedoc.png" # APP_ICONS="$APP_ICONS hedgedoc:~/.abra/recipes/authentik/icons/hedgedoc.png"
# HEDGEDOC_APPGROUP="$GROUP_DOCUMENTATION"
# APPLICATIONS='{"Calendar": "https://nextcloud.example.com/apps/calendar/", "BBB": "https://nextcloud.example.com/apps/bbb/", "Pretix": "https://pretix.example.com/control/"}' # APPLICATIONS='{"Calendar": {"url":"https://nextcloud.example.com/apps/calendar/", "group": "$GROUP_ORGANISATION"}, "BBB": {"url":"https://nextcloud.example.com/apps/bbb/", "group":"$GROUP_COMMUNICATION"}, "Pretix": {"url":"https://pretix.example.com/control/", "group":"$GROUP_ORGANISATION"}}'
# EXTRA_ICONS={"Calendar": "~/.abra/recipes/authentik/icons/calendar.svg", "BBB": "~/.abra/recipes/authentik/icons/bbb.png", "Pretix": "~/.abra/recipes/authentik/icons/pretix.svg"} # EXTRA_ICONS={"Calendar": "~/.abra/recipes/authentik/icons/calendar.svg", "BBB": "~/.abra/recipes/authentik/icons/bbb.png", "Pretix": "~/.abra/recipes/authentik/icons/pretix.svg"}

View File

@ -185,14 +185,17 @@ import os
if os.environ['APPLICATIONS'] == '': if os.environ['APPLICATIONS'] == '':
exit() exit()
applications = json.loads(os.environ['APPLICATIONS']) applications = json.loads(os.environ['APPLICATIONS'])
for name, url in applications.items(): for name, details in applications.items():
print(f'Add {name}: {url}') url = details['url']
group = details['group']
Review

Here you should catch the case if there is no group. I think it should be possible to add applications without any group.

Here you should catch the case if there is no group. I think it should be possible to add applications without any group.
print(f'Add {name}: {url} in group: {group}')
app = Application.objects.filter(name=name).first() app = Application.objects.filter(name=name).first()
if not app: if not app:
app = Application() app = Application()
app.name = name app.name = name
app.slug = name.replace(' ', '-') app.slug = name.replace(' ', '-')
app.meta_launch_url = url app.meta_launch_url = url
app.group = group
app.open_in_new_tab = True app.open_in_new_tab = True
app.save() app.save()
""" 2>&1 | quieten """ 2>&1 | quieten

View File

@ -6,6 +6,8 @@ services:
- hedgedoc_secret - hedgedoc_secret
environment: environment:
- HEDGEDOC_DOMAIN - HEDGEDOC_DOMAIN
- HEDGEDOC_APPGROUP
configs: configs:
- source: hedgedoc - source: hedgedoc
target: /blueprints/hedgedoc.yaml target: /blueprints/hedgedoc.yaml
@ -18,7 +20,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_hedgedoc_secret_${SECRET_HEDGEDOC_SECRET_VERSION} name: ${STACK_NAME}_hedgedoc_secret_${SECRET_HEDGEDOC_SECRET_VERSION}
configs: configs:
hedgedoc: hedgedoc:
name: ${STACK_NAME}_hedgedoc_${HEDGEDOC_CONFIG_VERSION} name: ${STACK_NAME}_hedgedoc_${HEDGEDOC_CONFIG_VERSION}

View File

@ -3,6 +3,7 @@ services:
worker: worker:
environment: environment:
- KIMAI_DOMAIN - KIMAI_DOMAIN
- KIMAI_APPGROUP
configs: configs:
- source: kimai - source: kimai
target: /blueprints/kimai.yaml target: /blueprints/kimai.yaml

View File

@ -13,6 +13,7 @@ services:
environment: environment:
- ELEMENT_DOMAIN - ELEMENT_DOMAIN
- MATRIX_DOMAIN - MATRIX_DOMAIN
- MATRIX_APPGROUP
configs: configs:
- source: matrix - source: matrix
target: /blueprints/matrix.yaml target: /blueprints/matrix.yaml
@ -25,7 +26,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_matrix_secret_${SECRET_MATRIX_SECRET_VERSION} name: ${STACK_NAME}_matrix_secret_${SECRET_MATRIX_SECRET_VERSION}
configs: configs:
matrix: matrix:
name: ${STACK_NAME}_matrix_${MATRIX_CONFIG_VERSION} name: ${STACK_NAME}_matrix_${MATRIX_CONFIG_VERSION}

View File

@ -5,7 +5,8 @@ services:
- monitoring_id - monitoring_id
- monitoring_secret - monitoring_secret
environment: environment:
- MONITORING_DOMAIN - MONITORING_DOMAIN
- MONITORING_APPGROUP
configs: configs:
- source: monitoring - source: monitoring
target: /blueprints/monitoring.yaml target: /blueprints/monitoring.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_monitoring_secret_${SECRET_MONITORING_SECRET_VERSION} name: ${STACK_NAME}_monitoring_secret_${SECRET_MONITORING_SECRET_VERSION}
configs: configs:
monitoring: monitoring:
name: ${STACK_NAME}_monitoring_${MONITORING_CONFIG_VERSION} name: ${STACK_NAME}_monitoring_${MONITORING_CONFIG_VERSION}

View File

@ -6,6 +6,7 @@ services:
- nextcloud_secret - nextcloud_secret
environment: environment:
- NEXTCLOUD_DOMAIN - NEXTCLOUD_DOMAIN
- NEXTCLOUD_APPGROUP
configs: configs:
- source: nextcloud - source: nextcloud
target: /blueprints/nextcloud.yaml target: /blueprints/nextcloud.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_nextcloud_secret_${SECRET_NEXTCLOUD_SECRET_VERSION} name: ${STACK_NAME}_nextcloud_secret_${SECRET_NEXTCLOUD_SECRET_VERSION}
configs: configs:
nextcloud: nextcloud:
name: ${STACK_NAME}_nextcloud_${NEXTCLOUD_CONFIG_VERSION} name: ${STACK_NAME}_nextcloud_${NEXTCLOUD_CONFIG_VERSION}

View File

@ -6,6 +6,7 @@ services:
- outline_secret - outline_secret
environment: environment:
- OUTLINE_DOMAIN - OUTLINE_DOMAIN
- OUTLINE_APPGROUP
configs: configs:
- source: outline - source: outline
target: /blueprints/outline.yaml target: /blueprints/outline.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_outline_secret_${SECRET_OUTLINE_SECRET_VERSION} name: ${STACK_NAME}_outline_secret_${SECRET_OUTLINE_SECRET_VERSION}
configs: configs:
outline: outline:
name: ${STACK_NAME}_outline_${OUTLINE_CONFIG_VERSION} name: ${STACK_NAME}_outline_${OUTLINE_CONFIG_VERSION}

View File

@ -6,6 +6,7 @@ services:
- rallly_secret - rallly_secret
environment: environment:
- RALLLY_DOMAIN - RALLLY_DOMAIN
- RALLLY_APPGROUP
configs: configs:
- source: rallly - source: rallly
target: /blueprints/rallly.yaml target: /blueprints/rallly.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_rallly_secret_${SECRET_RALLLY_SECRET_VERSION} name: ${STACK_NAME}_rallly_secret_${SECRET_RALLLY_SECRET_VERSION}
configs: configs:
rallly: rallly:
name: ${STACK_NAME}_rallly_${RALLLY_CONFIG_VERSION} name: ${STACK_NAME}_rallly_${RALLLY_CONFIG_VERSION}

View File

@ -6,6 +6,7 @@ services:
- vikunja_secret - vikunja_secret
environment: environment:
- VIKUNJA_DOMAIN - VIKUNJA_DOMAIN
- VIKUNJA_APPGROUP
configs: configs:
- source: vikunja - source: vikunja
target: /blueprints/vikunja.yaml target: /blueprints/vikunja.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_vikunja_secret_${SECRET_VIKUNJA_SECRET_VERSION} name: ${STACK_NAME}_vikunja_secret_${SECRET_VIKUNJA_SECRET_VERSION}
configs: configs:
vikunja: vikunja:
name: ${STACK_NAME}_vikunja_${VIKUNJA_CONFIG_VERSION} name: ${STACK_NAME}_vikunja_${VIKUNJA_CONFIG_VERSION}

View File

@ -6,6 +6,7 @@ services:
- wekan_secret - wekan_secret
environment: environment:
- WEKAN_DOMAIN - WEKAN_DOMAIN
- WEKAN_APPGROUP
configs: configs:
- source: wekan - source: wekan
target: /blueprints/wekan.yaml target: /blueprints/wekan.yaml
@ -18,7 +19,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_wekan_secret_${SECRET_WEKAN_SECRET_VERSION} name: ${STACK_NAME}_wekan_secret_${SECRET_WEKAN_SECRET_VERSION}
configs: configs:
wekan: wekan:
name: ${STACK_NAME}_wekan_${WEKAN_CONFIG_VERSION} name: ${STACK_NAME}_wekan_${WEKAN_CONFIG_VERSION}

View File

@ -7,6 +7,7 @@ services:
environment: environment:
- WORDPRESS_DOMAIN - WORDPRESS_DOMAIN
- WORDPRESS_GROUP - WORDPRESS_GROUP
- WORDPRESS_APPGROUP
configs: configs:
- source: wordpress - source: wordpress
target: /blueprints/wordpress.yaml target: /blueprints/wordpress.yaml
@ -19,7 +20,6 @@ secrets:
external: true external: true
name: ${STACK_NAME}_wordpress_secret_${SECRET_WORDPRESS_SECRET_VERSION} name: ${STACK_NAME}_wordpress_secret_${SECRET_WORDPRESS_SECRET_VERSION}
configs: configs:
wordpress: wordpress:
name: ${STACK_NAME}_wordpress_${WORDPRESS_CONFIG_VERSION} name: ${STACK_NAME}_wordpress_${WORDPRESS_CONFIG_VERSION}

View File

@ -3,6 +3,7 @@ services:
worker: worker:
environment: environment:
- ZAMMAD_DOMAIN - ZAMMAD_DOMAIN
- ZAMMAD_APPGROUP
configs: configs:
- source: zammad - source: zammad
target: /blueprints/zammad.yaml target: /blueprints/zammad.yaml

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf hedgedoc_provider provider: !KeyOf hedgedoc_provider
slug: hedgedoc slug: hedgedoc
group: {{ env "HEDGEDOC_APPGROUP" }}
conditions: [] conditions: []
id: hedgedoc_application id: hedgedoc_application
identifiers: identifiers:

View File

@ -42,6 +42,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf kimai_provider provider: !KeyOf kimai_provider
slug: kimai slug: kimai
group: {{ env "KIMAI_APPGROUP" }}
conditions: [] conditions: []
id: kimai_application id: kimai_application
identifiers: identifiers:

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf matrix_provider provider: !KeyOf matrix_provider
name: Element name: Element
group: {{ env "MATRIX_APPGROUP" }}
conditions: [] conditions: []
id: matrix_application id: matrix_application
identifiers: identifiers:

View File

@ -39,7 +39,8 @@ entries:
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf monitoring_provider provider: !KeyOf monitoring_provider
slug: monitoring slug: monitoring
group: {{ env "MONITORING_APPGROUP" }}
conditions: [] conditions: []
id: monitoring_application id: monitoring_application
identifiers: identifiers:

View File

@ -53,6 +53,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf nextcloud_provider provider: !KeyOf nextcloud_provider
slug: nextcloud slug: nextcloud
group: {{ env "NEXTCLOUD_APPGROUP" }}
conditions: [] conditions: []
id: nextcloud_application id: nextcloud_application
identifiers: identifiers:

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf outline_provider provider: !KeyOf outline_provider
slug: outline slug: outline
group: {{ env "OUTLINE_APPGROUP" }}
conditions: [] conditions: []
id: outline_application id: outline_application
identifiers: identifiers:

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf rallly_provider provider: !KeyOf rallly_provider
slug: rallly slug: rallly
group: {{ env "RALLLY_APPGROUP" }}
conditions: [] conditions: []
id: rallly_application id: rallly_application
identifiers: identifiers:

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf vikunja_provider provider: !KeyOf vikunja_provider
slug: vikunja slug: vikunja
group: {{ env "VIKUNJA_APPGROUP" }}
conditions: [] conditions: []
id: vikunja_application id: vikunja_application
identifiers: identifiers:

View File

@ -58,6 +58,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf wekan_provider provider: !KeyOf wekan_provider
slug: wekan slug: wekan
group: {{ env "WEKAN_APPGROUP" }}
conditions: [] conditions: []
id: wekan_application id: wekan_application
identifiers: identifiers:

View File

@ -40,6 +40,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf wordpress_provider provider: !KeyOf wordpress_provider
slug: wordpress slug: wordpress
group: {{ env "WORDPRESS_APPGROUP" }}
conditions: [] conditions: []
id: wordpress_application id: wordpress_application
identifiers: identifiers:

View File

@ -61,6 +61,7 @@ entries:
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf zammad_provider provider: !KeyOf zammad_provider
slug: zammad slug: zammad
group: {{ env "ZAMMAD_APPGROUP" }}
conditions: [] conditions: []
id: zammad_application id: zammad_application
identifiers: identifiers: