mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-08-29 20:13:13 +00:00
The second scenario, chosen to be a bridge rather than another HTTP component: bridges are roughly 40 of the 70 roles here, and validating the shape on role two is cheaper than discovering it on role forty. It found two things the first role could not. Bridges read a whole family of variables from outside themselves - matrix_bridges_relay_enabled, _encryption_enabled, _encryption_default, _msc4190_enabled, _self_sign_enabled, plus matrix_admin - all defined in matrix-base. Since every bridge reads them, they belong in shared context rather than in each bridge's scenario: molecule-shared/playbook-context.yml now carries them along with the identity and path variables the first scenario had inline. Note it is loaded through vars_files, which outranks inventory group_vars, so it is authoritative; a scenario that wants to prove one of these reaches the rendered configuration should say so explicitly. Appservices call /whoami while starting and refuse to run if the id returned is not the bot user they were configured as - mautrix-whatsapp exits 17 with "Unexpected user ID in whoami call". The shared stub now takes the id it should claim to be. Expect every bridge and bot to need this. What the scenario proves: the bridge starts and stays up, opens its appservice port, its rendered config and appservice registration carry the scenario's tokens and bot user, it created its sqlite database under the role's data path as the role's uid, and it runs the version the role pins. It does not bridge anything and never will. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
83 lines
3.1 KiB
YAML
83 lines
3.1 KiB
YAML
# SPDX-FileCopyrightText: 2026 Slavi Pantaleev
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
---
|
|
- name: Prepare matrix-alertmanager-receiver Molecule tests
|
|
hosts: all
|
|
become: true
|
|
vars_files:
|
|
- "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/../../../molecule-shared/vars.yml"
|
|
- "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/../../../molecule-shared/playbook-context.yml"
|
|
gather_facts: true
|
|
tasks:
|
|
- name: Ensure apt cache is updated
|
|
ansible.builtin.apt:
|
|
update_cache: true
|
|
cache_valid_time: 600
|
|
when: ansible_os_family == 'Debian'
|
|
|
|
- name: Ensure required packages are installed
|
|
ansible.builtin.package:
|
|
name:
|
|
- python3-requests
|
|
- fuse-overlayfs
|
|
state: present
|
|
|
|
- name: Ensure Docker is installed
|
|
ansible.builtin.include_role:
|
|
name: ansible-role-docker
|
|
vars:
|
|
docker_daemon_options:
|
|
storage-driver: fuse-overlayfs
|
|
|
|
# The role's file tasks set owner/group by name, and Ansible resolves those
|
|
# through the passwd database - so they have to exist before it runs. In a
|
|
# real deployment `matrix-base` creates them.
|
|
- name: Ensure the matrix group exists
|
|
ansible.builtin.group:
|
|
name: "{{ matrix_group_name }}"
|
|
gid: "{{ matrix_user_gid }}"
|
|
state: present
|
|
|
|
- name: Ensure the matrix user exists
|
|
ansible.builtin.user:
|
|
name: "{{ matrix_user_name }}"
|
|
uid: "{{ matrix_user_uid }}"
|
|
group: "{{ matrix_group_name }}"
|
|
create_home: false
|
|
system: true
|
|
state: present
|
|
|
|
- name: Ensure the base data path exists
|
|
ansible.builtin.file:
|
|
path: "{{ matrix_base_data_path }}"
|
|
state: directory
|
|
owner: "{{ matrix_user_name }}"
|
|
group: "{{ matrix_group_name }}"
|
|
mode: "0750"
|
|
|
|
- name: Ensure the container network the role attaches to exists
|
|
ansible.builtin.command:
|
|
argv:
|
|
- docker
|
|
- network
|
|
- create
|
|
- "{{ matrix_alertmanager_receiver_container_network }}"
|
|
register: matrix_alertmanager_receiver_molecule_network
|
|
changed_when: matrix_alertmanager_receiver_molecule_network.rc == 0
|
|
failed_when:
|
|
- matrix_alertmanager_receiver_molecule_network.rc != 0
|
|
- "'already exists' not in matrix_alertmanager_receiver_molecule_network.stderr"
|
|
|
|
# matrix-alertmanager-receiver contacts the homeserver while starting up -
|
|
# it fetches /_matrix/client/v3/joined_rooms to resolve its room mapping and
|
|
# exits 1 if that fails - so a homeserver has to exist for it to come up at
|
|
# all. The shared stub is enough; see molecule-shared/homeserver-stub.py.
|
|
- name: Ensure the homeserver stub is running
|
|
ansible.builtin.include_tasks:
|
|
file: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/../../../molecule-shared/tasks/homeserver-stub.yml"
|
|
vars:
|
|
molecule_shared_stub_network: "{{ matrix_alertmanager_receiver_container_network }}"
|
|
molecule_shared_stub_joined_rooms: "{{ matrix_alertmanager_receiver_config_matrix_room_mapping.values() | list }}"
|