--- # roles/custom/matrix-element-call/tasks/install.yml # Ensure Required Directories Exist - name: Ensure matrix-element-call paths exist ansible.builtin.file: path: "{{ item.path }}" state: directory mode: 0750 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" loop: - path: "{{ matrix_element_call_base_path }}" - path: "{{ matrix_element_call_base_path }}/data" - path: "{{ matrix_element_call_base_path }}/config" - path: "{{ matrix_element_call_base_path }}/backend" # For LiveKit and Redis config - path: "{{ matrix_base_data_path }}/static-files/public/.well-known/element" # Directory for element.json # Ensure Configuration Files are in Place - name: Ensure Element Call config.json is in place ansible.builtin.template: src: "{{ role_path }}/templates/config.json.j2" dest: "{{ matrix_element_call_base_path }}/config/config.json" mode: 0640 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" - name: Ensure LiveKit livekit.yaml is in place ansible.builtin.template: src: "{{ role_path }}/templates/livekit.yaml.j2" dest: "{{ matrix_element_call_base_path }}/backend/livekit.yaml" mode: 0640 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" - name: Ensure Redis redis.conf is in place ansible.builtin.template: src: "{{ role_path }}/templates/redis.conf.j2" dest: "{{ matrix_element_call_base_path }}/backend/redis.conf" mode: 0640 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" - name: Ensure matrix-element-call environment file is in place ansible.builtin.template: src: "{{ role_path }}/templates/env.j2" dest: "{{ matrix_element_call_base_path }}/config/env" mode: 0640 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" - name: Ensure matrix-element-call Docker labels file is in place ansible.builtin.template: src: "{{ role_path }}/templates/labels.j2" dest: "{{ matrix_element_call_base_path }}/config/labels" mode: 0640 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" # Ensure Docker Images are Pulled - name: Ensure matrix-element-call Docker image is pulled community.docker.docker_image: name: "{{ matrix_element_call_container_image }}" source: pull force_source: "{{ matrix_element_call_container_image_force_pull }}" register: element_call_image_result retries: "{{ devture_playbook_help_container_retries_count }}" delay: "{{ devture_playbook_help_container_retries_delay }}" until: element_call_image_result is not failed - name: Ensure jwt-service Docker image is pulled community.docker.docker_image: name: "{{ matrix_jwt_service_image }}" source: pull register: jwt_image_result retries: 3 delay: 10 until: jwt_image_result is not failed - name: Ensure livekit Docker image is pulled community.docker.docker_image: name: "{{ matrix_livekit_image }}" source: pull register: livekit_image_result retries: 3 delay: 10 until: livekit_image_result is not failed - name: Ensure redis Docker image is pulled community.docker.docker_image: name: "{{ redis_image }}" source: pull register: redis_image_result retries: 3 delay: 10 until: redis_image_result is not failed # Systemd Services for Element Call, JWT Service, LiveKit, and Redis - name: Ensure matrix-element-call systemd service is installed ansible.builtin.template: src: "{{ role_path }}/templates/systemd/matrix-element-call.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-element-call.service" mode: 0644 - name: Ensure jwt-service systemd service is installed ansible.builtin.template: src: "{{ role_path }}/templates/systemd/matrix-jwt-service.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-jwt-service.service" mode: 0644 - name: Ensure livekit systemd service is installed ansible.builtin.template: src: "{{ role_path }}/templates/systemd/matrix-livekit.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-livekit.service" mode: 0644 - name: Ensure redis systemd service is installed ansible.builtin.template: src: "{{ role_path }}/templates/systemd/matrix-redis.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-redis.service" mode: 0644 # Update homeserver.yaml for Element Call - name: Add listeners section for Element Call to homeserver.yaml ansible.builtin.blockinfile: path: "{{ matrix_homeserver_config_path }}" block: | listeners: - port: 8008 tls: false type: http x_forwarded: true resources: - names: [client, federation, openid] compress: false marker: "# ANSIBLE MANAGED BLOCK - Element Call listeners" mode: '0644' owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" when: matrix_element_call_enabled | bool - name: Ensure serve_server_wellknown is enabled in homeserver.yaml ansible.builtin.lineinfile: path: "{{ matrix_homeserver_config_path }}" line: "serve_server_wellknown: true" insertafter: EOF state: present mode: '0644' owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" when: matrix_element_call_enabled | bool # Update the well-known client file for Element Call (adding RTC FOCI) - name: Update the existing well-known client file for Element Call (RTC FOCI) ansible.builtin.blockinfile: path: "{{ matrix_base_data_path }}/static-files/public/.well-known/matrix/client" block: | "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", "livekit_service_url": "{{ matrix_element_call_jwt_service_url }}" } ] marker: "# ANSIBLE MANAGED BLOCK - Element Call RTC FOCI" mode: '0644' owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" # Create .well-known/element/element.json for Element Call - name: Create the well-known element.json file ansible.builtin.template: src: "{{ role_path }}/templates/well_known_element.json.j2" dest: "{{ matrix_base_data_path }}/static-files/public/.well-known/element/element.json" mode: '0644' owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}" # Update Element Web config.json with Element Call settings - name: Update Element Web config.json ansible.builtin.blockinfile: path: "{{ element_web_config_path }}" block: | "features": { "feature_video_rooms": true, "feature_new_room_decoration_ui": true, "feature_group_calls": true, "feature_element_call_video_rooms": true }, "element_call": { "url": "https://{{ matrix_element_call_domain }}", "participant_limit": 8, "brand": "Element Call", "use_exclusively": true } marker: "# ANSIBLE MANAGED BLOCK - Element Call settings" mode: '0644' owner: "{{ matrix_user_username }}" group: "{{ matrix_user_groupname }}"