Files
computer-playbook/roles/web-app-zammad/vars/main.yml

106 lines
7.0 KiB
YAML

---
application_id: "web-app-zammad"
entity_name: "{{ application_id | get_entity_name }}"
ZAMMAD_PRECHECK_SERVICE: "precheck"
ZAMMAD_INIT_SERVICE: "init"
ZAMMAD_RAILS_SERVICE: "railsserver"
ZAMMAD_WEBSOCKET_SERVICE: "websocket"
ZAMMAD_SCHEDULER_SERVICE: "scheduler"
ZAMMAD_NGINX_SERVICE: "nginx"
ZAMMAD_SEARCH_SERVICE: "elasticsearch"
ZAMMAD_MEMCACHED_SERVICE: "memcached"
ZAMMAD_PRECHECK_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_PRECHECK_SERVICE ~ '.name') }}"
ZAMMAD_INIT_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_INIT_SERVICE ~ '.name') }}"
ZAMMAD_RAILS_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_RAILS_SERVICE ~ '.name') }}"
ZAMMAD_RAILS_CONTAINER_ADDRESS: "{{ lookup('container_address', application_id, ZAMMAD_RAILS_SERVICE) }}"
ZAMMAD_WEBSOCKET_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_WEBSOCKET_SERVICE ~ '.name') }}"
ZAMMAD_SCHEDULER_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_SCHEDULER_SERVICE ~ '.name') }}"
ZAMMAD_NGINX_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_NGINX_SERVICE ~ '.name') }}"
ZAMMAD_SEARCH_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_SEARCH_SERVICE ~ '.name') }}"
ZAMMAD_MEMCACHED_CONTAINER: "{{ lookup('engine', 'memcached', application_id, 'container') }}"
ZAMMAD_RAILS_PORT: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_RAILS_SERVICE ~ '.ports.internal.http') }}"
ZAMMAD_WEBSOCKET_PORT: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_WEBSOCKET_SERVICE ~ '.ports.internal.http') }}"
ZAMMAD_SEARCH_PORT: "{{ lookup('config', application_id, 'services.' ~ ZAMMAD_SEARCH_SERVICE ~ '.ports.internal.http') }}"
ZAMMAD_SEARCH_HEAP_MB: "{{ lookup('service_memory_mb', application_id, ZAMMAD_SEARCH_SERVICE, 0.25) }}"
ZAMMAD_SEARCH_WATERMARK: "{{ lookup('config', application_id, 'services.search.watermark') }}"
ZAMMAD_SEARCH_MAJOR: "{{ (lookup('config', application_id, 'services.search.version') | string).split('.') | first }}"
ZAMMAD_SEARCH_DATA_DIR: "{{ [lookup('volume', application_id, 'zammad_search').target, ZAMMAD_SEARCH_MAJOR] | path_join }}"
ZAMMAD_SEARCH_PRECHECK_ABS: "{{ [lookup('container', application_id, 'directories.config'), 'search_allocation_precheck.sh'] | path_join }}"
ZAMMAD_SEARCH_PRECHECK_TARGET: "{{ (lookup('volume', application_id, 'search_allocation_precheck').mounts | first).target }}"
ZAMMAD_SEARCH_READY_SECONDS: 600
ZAMMAD_SEARCH_POLL_SECONDS: 5
ZAMMAD_SEARCH_ALLOCATION_TIMEOUT_SECONDS: 60
# Exception: env.j2 must never set DATABASE_URL. The image's config/pre_initializers/database_url.rb
# builds it from POSTGRESQL_* only while DATABASE_URL is blank, so presetting it drops
# POSTGRESQL_OPTIONS and Rails falls back to its default pool of 5, below the thread count
# BackgroundServices starts in the scheduler.
ZAMMAD_DB_POOL: 50
ZAMMAD_API_BOT_USER: "{{ lookup('users', 'zammad-api-bot') }}"
ZAMMAD_WIZARD_BYPASS_USER: "{{ lookup('users', 'zammad-wizard-bypass-admin') }}"
ZAMMAD_API_BOT_PASSWORD: "{{ ZAMMAD_API_BOT_USER.password }}"
ZAMMAD_WIZARD_BYPASS_PASSWORD: "{{ ZAMMAD_WIZARD_BYPASS_USER.password }}"
ZAMMAD_INITIAL_ADMIN_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.initial_admin_password') }}"
ZAMMAD_SECRET_KEY_BASE: "{{ lookup('config', application_id, 'secrets.credentials.secret_key_base') }}"
ZAMMAD_HOSTNAME: "{{ lookup('domain', application_id) }}"
ZAMMAD_WEB_PROTOCOL: "{{ lookup('tls', application_id, 'protocols.web') }}"
ZAMMAD_HTTP_ONLY_ENABLED: "{{ not (lookup('tls', application_id, 'enabled') | bool) }}"
ZAMMAD_VOLUMES_DIR: "{{ lookup('container', application_id, 'directories.volumes') }}"
ZAMMAD_AUTO_WIZARD_HOST_PATH: "{{ ZAMMAD_VOLUMES_DIR }}auto_wizard.json"
ZAMMAD_OMNIAUTH_INIT_HOST_PATH: "{{ ZAMMAD_VOLUMES_DIR }}zz_omniauth_allow_get.rb"
ZAMMAD_TELEGRAM_HELPER_HOST_PATH: "{{ ZAMMAD_VOLUMES_DIR }}telegram_helper.rb"
ZAMMAD_OIDC_GROUP_ROLE_MAP_HOST_PATH: "{{ ZAMMAD_VOLUMES_DIR }}zz_oidc_group_role_mapping.rb"
ZAMMAD_OIDC_HTTP_DISCOVERY_HOST_PATH: "{{ ZAMMAD_VOLUMES_DIR }}zz_oidc_http_discovery.rb"
ZAMMAD_OIDC_GROUP_ROLE_MAP:
"/{{ RBAC.GROUP.NAME | trim('/') }}/{{ application_id }}/administrator": "Admin"
"/{{ RBAC.GROUP.NAME | trim('/') }}/{{ application_id }}/agent": "Agent"
"/{{ RBAC.GROUP.NAME | trim('/') }}/{{ application_id }}/customer": "Customer"
ZAMMAD_OIDC_ENABLED: "{{ lookup('config', application_id, 'services.sso.enabled') | bool }}"
ZAMMAD_EMAIL_ENABLED: "{{ lookup('config', application_id, 'services.email.enabled') | bool }}"
ZAMMAD_LDAP_ENABLED: "{{ lookup('config', application_id, 'services.ldap.enabled') | bool }}"
ZAMMAD_MAIL: "{{ lookup('email', application_id) if ZAMMAD_EMAIL_ENABLED else {} }}"
ZAMMAD_HELPDESK_USER: "{{ lookup('users', 'helpdesk') if ZAMMAD_EMAIL_ENABLED else {} }}"
ZAMMAD_HELPDESK_EMAIL: "{{ ZAMMAD_HELPDESK_USER.email | default('') }}"
ZAMMAD_HELPDESK_PASS: "{{ (ZAMMAD_HELPDESK_USER.tokens | default({})).get(MAIL_PROVIDER, '') }}"
ZAMMAD_MCP_ENABLED: "{{ lookup('config', application_id, 'services.zammadmcp.enabled') | bool }}"
ZAMMAD_MCP_SERVICE_KEY: "zammadmcp"
ZAMMAD_MCP_CONTAINER: "{{ lookup('config', application_id, 'services.zammadmcp.name') }}"
ZAMMAD_MCP_PORT: "{{ lookup('config', application_id, 'services.zammadmcp.ports.internal.http') }}"
ZAMMAD_MCP_BEARER: "{{ lookup('config', application_id, 'secrets.credentials.mcp_bearer') }}"
ZAMMAD_MCP_INSTANCE_DIR: "{{ [lookup('container', application_id, 'directories.instance'), 'mcp'] | path_join }}"
ZAMMAD_MCP_UPSTREAM_HOST: "{{ ZAMMAD_NGINX_SERVICE }}"
ZAMMAD_MCP_UPSTREAM_PORT: "{{ lookup('config', application_id, 'services.zammad.ports.internal.http') }}"
ZAMMAD_MCP_UPSTREAM_URL: "http://{{ ZAMMAD_MCP_UPSTREAM_HOST }}:{{ ZAMMAD_MCP_UPSTREAM_PORT }}"
ZAMMAD_MCP_CONTRACT:
provider: "{{ application_id }}"
upstream_url: "{{ ZAMMAD_MCP_UPSTREAM_URL }}"
auth_subject: "{{ lookup('config', application_id, 'mcp.auth_subject') }}"
mutating_tools_enabled: "{{ lookup('config', application_id, 'mcp.tools.mutating_tools_enabled') | bool }}"
tools: "{{ lookup('file', 'mcp/tools.json') | from_json }}"
limits: "{{ lookup('config', application_id, 'mcp.limits') }}"
schema_sha256: "{{ lookup('config', application_id, 'mcp.tools.schema_sha256') }}"
ZAMMAD_MCP_UPSTREAM_KEY: "{{ lookup('config', application_id, 'secrets.credentials.api_token') }}"
ZAMMAD_MCP_ACCOUNT: "{{ lookup('users', 'mcp-web-app-zammad') }}"
ZAMMAD_MCP_UPSTREAM_USER: "{{ ZAMMAD_MCP_ACCOUNT.username }}"
ZAMMAD_MCP_UPSTREAM_EMAIL: "{{ ZAMMAD_MCP_ACCOUNT.email }}"
ZAMMAD_MCP_UPSTREAM_PASSWORD: "{{ ZAMMAD_MCP_ACCOUNT.password }}"
ZAMMAD_MCP_UPSTREAM_TOKEN_LABEL: "infinito-mcp"
ZAMMAD_MCP_UPSTREAM_AUTH_HEADER: "Authorization"
ZAMMAD_MCP_UPSTREAM_AUTH_FORMAT: "Token token={key}"
ZAMMAD_LITELLM_ENABLED: "{{ lookup('config', application_id, 'services.litellm.enabled') | bool }}"
ZAMMAD_LITELLM_BASE_URL: "{{ LITELLM_OPENAI_BASE_LOCAL_URL }}"
ZAMMAD_LITELLM_MODEL: "{{ LITELLM_CHAT_MODEL }}"
ZAMMAD_LITELLM_API_KEY: "{{ lookup('config', application_id, 'secrets.credentials.litellm_api_key') }}"