Files
computer-playbook/roles/web-app-jitsi/vars/main.yml
kevinveenbirkenbachandClaude Opus 5.5 0b27ed5ba4 fix(web-app-jitsi): recreate the Prosody component accounts on deploy
Prosody keeps an account's first password. The image's init registers
focus and jvb only once, so after a credential rotation it prints
"User exists" and keeps the old passwords, while jicofo and the
videobridge start with the new ones. Jicofo then fails with
"SASLError using SCRAM-SHA-1: not-authorized" and no conference can
start.

After compose up the role now deletes and re-registers both accounts
with their current passwords, through the container_address lookup so
it works in compose and swarm.

Found by the full-cycle gate of #1165, whose second pass runs after a
credential rotation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 16:46:26 +02:00

53 lines
3.0 KiB
YAML

---
application_id: "web-app-jitsi"
entity_name: "{{ application_id | get_entity_name }}"
JITSI_WEB_SERVICE: "web"
JITSI_PROSODY_SERVICE: "prosody"
JITSI_JICOFO_SERVICE: "jicofo"
JITSI_JVB_SERVICE: "jvb"
JITSI_WEB_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ JITSI_WEB_SERVICE ~ '.name') }}"
JITSI_PROSODY_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ JITSI_PROSODY_SERVICE ~ '.name') }}"
JITSI_JICOFO_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ JITSI_JICOFO_SERVICE ~ '.name') }}"
JITSI_JVB_CONTAINER: "{{ lookup('config', application_id, 'services.' ~ JITSI_JVB_SERVICE ~ '.name') }}"
JITSI_PROSODY_CONTAINER_ADDRESS: "{{ lookup('container_address', application_id, JITSI_PROSODY_SERVICE) }}"
JITSI_JVB_MEDIA_PORT: "{{ lookup('config', application_id, 'services.jitsi.ports.public.media') }}"
JITSI_PROSODY_XMPP_PORT: "{{ lookup('config', application_id, 'services.' ~ JITSI_PROSODY_SERVICE ~ '.ports.internal.xmpp') }}"
JITSI_PROSODY_COMPONENT_PORT: "{{ lookup('config', application_id, 'services.' ~ JITSI_PROSODY_SERVICE ~ '.ports.internal.component') }}"
JITSI_PROSODY_HTTP_PORT: "{{ lookup('config', application_id, 'services.' ~ JITSI_PROSODY_SERVICE ~ '.ports.internal.http') }}"
JITSI_PUBLIC_URL: "{{ lookup('tls', application_id, 'url.base') }}"
JITSI_VOLUMES_DIR: "{{ lookup('container', application_id, 'directories.volumes') }}"
JITSI_PROSODY_CONFIG_HOST_PATH: "{{ JITSI_VOLUMES_DIR }}prosody-config"
JITSI_PROSODY_PLUGINS_HOST_PATH: "{{ JITSI_VOLUMES_DIR }}prosody-plugins-custom"
JITSI_OIDC_ENABLED: "{{ lookup('config', application_id, 'services.sso.enabled') | bool }}"
JITSI_LDAP_ENABLED: "{{ lookup('config', application_id, 'services.ldap.enabled') | bool }}"
JITSI_XMPP_DOMAIN: "meet.jitsi"
JITSI_XMPP_AUTH_DOMAIN: "auth.meet.jitsi"
JITSI_XMPP_GUEST_DOMAIN: "guest.meet.jitsi"
JITSI_XMPP_MUC_DOMAIN: "muc.meet.jitsi"
JITSI_XMPP_INTERNAL_MUC_DOMAIN: "internal-muc.meet.jitsi"
JITSI_XMPP_RECORDER_DOMAIN: "recorder.meet.jitsi"
JITSI_JICOFO_COMPONENT_SECRET: "{{ lookup('config', application_id, 'secrets.credentials.jicofo_component_secret') }}"
JITSI_JICOFO_AUTH_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.jicofo_auth_password') }}"
JITSI_JVB_AUTH_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.jvb_auth_password') }}"
JITSI_JIGASI_XMPP_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.jigasi_xmpp_password') }}"
JITSI_JIBRI_RECORDER_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.jibri_recorder_password') }}"
JITSI_JIBRI_XMPP_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.jibri_xmpp_password') }}"
JITSI_COMPONENT_ACCOUNTS:
- user: focus
password: "{{ JITSI_JICOFO_AUTH_PASSWORD }}"
- user: jvb
password: "{{ JITSI_JVB_AUTH_PASSWORD }}"
JITSI_AUTH_TYPE: "{{ 'ldap' if (JITSI_LDAP_ENABLED and not JITSI_OIDC_ENABLED) else 'internal' }}"
JITSI_ENABLE_AUTH: "{{ JITSI_AUTH_TYPE != 'internal' }}"
JITSI_ENABLE_GUESTS: false