|
- ---
- # 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 }}"
|