| @@ -4498,6 +4498,14 @@ matrix_client_element_enable_presence_by_hs_url: |- | |||||
| matrix_client_element_jitsi_preferred_domain: "{{ matrix_server_fqn_jitsi if jitsi_enabled else '' }}" | matrix_client_element_jitsi_preferred_domain: "{{ matrix_server_fqn_jitsi if jitsi_enabled else '' }}" | ||||
| matrix_client_element_features_feature_video_rooms: "{{ matrix_element_call_enabled }}" | |||||
| matrix_client_element_features_feature_group_calls: "{{ matrix_element_call_enabled }}" | |||||
| matrix_client_element_features_feature_element_call_video_rooms: "{{ matrix_element_call_enabled }}" | |||||
| matrix_client_element_features_feature_oidc_native_flow: "{{ matrix_authentication_service_enabled }}" | |||||
| matrix_client_element_element_call_enabled: "{{ matrix_element_call_enabled }}" | |||||
| matrix_client_element_element_call_url: "{{ matrix_element_call_public_url if matrix_element_call_enabled else '' }}" | |||||
| ###################################################################### | ###################################################################### | ||||
| # | # | ||||
| # /matrix-client-element | # /matrix-client-element | ||||
| @@ -180,6 +180,67 @@ matrix_client_element_branding_auth_header_logo_url: "{{ matrix_client_element_w | |||||
| # URL to Wallpaper, shown in background of welcome page | # URL to Wallpaper, shown in background of welcome page | ||||
| matrix_client_element_branding_welcome_background_url: ~ # noqa var-naming | matrix_client_element_branding_welcome_background_url: ~ # noqa var-naming | ||||
| # Controls the `features` section of the Element Web configuration. | |||||
| matrix_client_element_features: "{{ matrix_client_element_features_default | combine(matrix_client_element_features_auto, recursive=True) | combine(matrix_client_element_features_custom, recursive=True) }}" | |||||
| matrix_client_element_features_default: |- | |||||
| {{ | |||||
| {} | |||||
| | combine( | |||||
| {'feature_video_rooms': true} if matrix_client_element_features_feature_video_rooms else {} | |||||
| ) | |||||
| | combine( | |||||
| {'feature_group_calls': true} if matrix_client_element_features_feature_group_calls else {} | |||||
| ) | |||||
| | combine( | |||||
| {'feature_element_call_video_rooms': true} if matrix_client_element_features_feature_element_call_video_rooms else {} | |||||
| ) | |||||
| | combine( | |||||
| {'feature_oidc_native_flow': true} if matrix_client_element_features_feature_oidc_native_flow else {} | |||||
| ) | |||||
| }} | |||||
| matrix_client_element_features_auto: {} | |||||
| matrix_client_element_features_custom: {} | |||||
| matrix_client_element_features_feature_video_rooms: false | |||||
| matrix_client_element_features_feature_group_calls: false | |||||
| matrix_client_element_features_feature_element_call_video_rooms: false | |||||
| matrix_client_element_features_feature_oidc_native_flow: false | |||||
| matrix_client_element_element_call_enabled: false | |||||
| matrix_client_element_element_call: "{{ matrix_client_element_element_call_default | combine(matrix_client_element_element_call_auto, recursive=True) | combine(matrix_client_element_element_call_custom, recursive=True) }}" | |||||
| matrix_client_element_element_call_default: |- | |||||
| {{ | |||||
| {} | |||||
| | combine( | |||||
| {'url': matrix_client_element_element_call_url} if matrix_client_element_element_call_url else {} | |||||
| ) | |||||
| | combine( | |||||
| {'participant_limit': matrix_client_element_element_call_participant_limit} if matrix_client_element_element_call_participant_limit else {} | |||||
| ) | |||||
| | combine( | |||||
| {'brand': matrix_client_element_element_call_brand} if matrix_client_element_element_call_brand else {} | |||||
| ) | |||||
| | combine( | |||||
| {'use_exclusively': matrix_client_element_element_call_use_exclusively} if matrix_client_element_element_call_use_exclusively else {} | |||||
| ) | |||||
| }} | |||||
| matrix_client_element_element_call_auto: {} | |||||
| matrix_client_element_element_call_custom: {} | |||||
| # Controls the `element_call.url` setting in the Element Web configuration. | |||||
| matrix_client_element_element_call_url: '' | |||||
| # Controls the `element_call.participant_limit` setting in the Element Web configuration. | |||||
| matrix_client_element_element_call_participant_limit: 8 | |||||
| # Controls the `element_call.brand` setting in the Element Web configuration. | |||||
| matrix_client_element_element_call_brand: "Element Call" | |||||
| # Controls the `element_call.use_exclusively` setting in the Element Web configuration. | |||||
| matrix_client_element_element_call_use_exclusively: true | |||||
| matrix_client_element_page_template_welcome_path: "{{ role_path }}/templates/welcome.html.j2" | matrix_client_element_page_template_welcome_path: "{{ role_path }}/templates/welcome.html.j2" | ||||
| # By default, there's no Element Web homepage (when logged in). If you wish to have one, | # By default, there's no Element Web homepage (when logged in). If you wish to have one, | ||||
| @@ -44,5 +44,7 @@ | |||||
| "auth_footer_links": {{ matrix_client_element_branding_auth_footer_links | to_json }}, | "auth_footer_links": {{ matrix_client_element_branding_auth_footer_links | to_json }}, | ||||
| "auth_header_logo_url": {{ matrix_client_element_branding_auth_header_logo_url | to_json }}, | "auth_header_logo_url": {{ matrix_client_element_branding_auth_header_logo_url | to_json }}, | ||||
| "welcome_background_url": {{ matrix_client_element_branding_welcome_background_url | to_json }} | "welcome_background_url": {{ matrix_client_element_branding_welcome_background_url | to_json }} | ||||
| } | |||||
| }, | |||||
| "features": {{ matrix_client_element_features | to_json }}, | |||||
| "element_call": {{ (matrix_client_element_element_call if matrix_client_element_element_call_enabled else {}) | to_json }} | |||||
| } | } | ||||
| @@ -2,10 +2,12 @@ | |||||
| # Enable or disable matrix-element-call deployment | # Enable or disable matrix-element-call deployment | ||||
| matrix_element_call_enabled: false | matrix_element_call_enabled: false | ||||
| matrix_element_call_scheme: https | |||||
| matrix_element_call_hostname: "call.{{ matrix_domain }}" | |||||
| # Base path configuration | # Base path configuration | ||||
| matrix_element_call_base_path: "{{ matrix_base_data_path }}/element-call" | matrix_element_call_base_path: "{{ matrix_base_data_path }}/element-call" | ||||
| matrix_homeserver_config_path: "{{ matrix_base_data_path }}/synapse/config/homeserver.yaml" | matrix_homeserver_config_path: "{{ matrix_base_data_path }}/synapse/config/homeserver.yaml" | ||||
| element_web_config_path: "{{ matrix_base_data_path }}/client-element/config.json" | |||||
| # Docker network configuration | # Docker network configuration | ||||
| matrix_element_call_container_network: '' | matrix_element_call_container_network: '' | ||||
| @@ -18,16 +20,10 @@ matrix_element_call_image: "ghcr.io/element-hq/element-call:latest" | |||||
| # Ports | # Ports | ||||
| matrix_element_call_port: "8093" | matrix_element_call_port: "8093" | ||||
| # Well-known paths and domains (derived from matrix_domain) | |||||
| matrix_element_call_domain: "call.{{ matrix_domain }}" | |||||
| matrix_element_call_well_known_client_path: "{{ matrix_base_data_path }}/static-files/public/.well-known/matrix/client" | |||||
| matrix_element_call_well_known_element_path: "{{ matrix_base_data_path }}/static-files/public/.well-known/element/element.json" | |||||
| matrix_element_call_base_url: "https://{{ matrix_element_call_domain }}" | |||||
| # Traefik Configuration for Element Call | # Traefik Configuration for Element Call | ||||
| matrix_element_call_container_labels_traefik_enabled: true | matrix_element_call_container_labels_traefik_enabled: true | ||||
| matrix_element_call_container_labels_traefik_docker_network: "{{ matrix_element_call_container_network }}" | matrix_element_call_container_labels_traefik_docker_network: "{{ matrix_element_call_container_network }}" | ||||
| matrix_element_call_container_labels_traefik_hostname: "{{ matrix_element_call_domain }}" | |||||
| matrix_element_call_container_labels_traefik_hostname: "{{ matrix_element_call_hostname }}" | |||||
| # The path prefix must either be `/` or not end with a slash (e.g. `/element`). | # The path prefix must either be `/` or not end with a slash (e.g. `/element`). | ||||
| matrix_element_call_container_labels_traefik_path_prefix: "{{ matrix_element_call_path_prefix }}" | matrix_element_call_container_labels_traefik_path_prefix: "{{ matrix_element_call_path_prefix }}" | ||||
| matrix_element_call_container_labels_traefik_rule: "Host(`{{ matrix_element_call_container_labels_traefik_hostname }}`){% if matrix_element_call_container_labels_traefik_path_prefix != '/' %} && PathPrefix(`{{ matrix_element_call_container_labels_traefik_path_prefix }}`){% endif %}" | matrix_element_call_container_labels_traefik_rule: "Host(`{{ matrix_element_call_container_labels_traefik_hostname }}`){% if matrix_element_call_container_labels_traefik_path_prefix != '/' %} && PathPrefix(`{{ matrix_element_call_container_labels_traefik_path_prefix }}`){% endif %}" | ||||
| @@ -122,4 +118,4 @@ matrix_element_call_hsts_preload_enabled: false | |||||
| # Enable or disable metrics collection | # Enable or disable metrics collection | ||||
| matrix_element_call_metrics_enabled: false | matrix_element_call_metrics_enabled: false | ||||
| matrix_element_call_metrics_port: 2112 | |||||
| matrix_element_call_metrics_port: 2112 | |||||
| @@ -86,8 +86,3 @@ | |||||
| mode: '0644' | mode: '0644' | ||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_groupname }}" | group: "{{ matrix_user_groupname }}" | ||||
| # Update Element Web config.json with Element Call settings | |||||
| - name: Update Element Web config.json | |||||
| ansible.builtin.include_tasks: "tasks/update_element_web_config.yml" | |||||
| when: matrix_element_call_enabled | bool | |||||
| @@ -1,40 +0,0 @@ | |||||
| - name: Read Element Web config.json | |||||
| ansible.builtin.slurp: | |||||
| src: "{{ element_web_config_path }}" | |||||
| register: element_web_config_content | |||||
| - name: Load JSON data from config.json | |||||
| ansible.builtin.set_fact: | |||||
| element_web_config: "{{ element_web_config_content['content'] | b64decode | from_json }}" | |||||
| - name: Update Element Call configuration in config.json | |||||
| ansible.builtin.set_fact: | |||||
| updated_element_call_config: > | |||||
| {{ | |||||
| { | |||||
| "element_call": { | |||||
| "url": "https://{{ matrix_element_call_domain }}", | |||||
| "participant_limit": 8, | |||||
| "brand": "Element Call", | |||||
| "use_exclusively": true | |||||
| }, | |||||
| "features": { | |||||
| "feature_video_rooms": true, | |||||
| "feature_new_room_decoration_ui": true, | |||||
| "feature_group_calls": true, | |||||
| "feature_element_call_video_rooms": true | |||||
| } | |||||
| } | |||||
| }} | |||||
| - name: Merge updated Element Call configuration with existing config.json | |||||
| ansible.builtin.set_fact: | |||||
| element_web_config: "{{ element_web_config | combine(updated_element_call_config, recursive=True) }}" | |||||
| - name: Write updated Element Web config.json | |||||
| ansible.builtin.copy: | |||||
| content: "{{ element_web_config | to_nice_json }}" | |||||
| dest: "{{ element_web_config_path }}" | |||||
| mode: '0644' | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| @@ -1,5 +1,5 @@ | |||||
| { | { | ||||
| "call": { | "call": { | ||||
| "widget_url": "https://{{ matrix_element_call_domain }}" | |||||
| "widget_url": "https://{{ matrix_element_call_hostname }}" | |||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,5 +1,3 @@ | |||||
| --- | --- | ||||
| # roles/custom/matrix-element-call/vars/main.yml | |||||
| # Variables specific to matrix-element-call, like service configurations, can go here. | |||||
| # Any environment-specific values can be overridden here. | |||||
| matrix_element_call_public_url: "{{ matrix_element_call_scheme }}://{{ matrix_element_call_hostname }}" | |||||