Files
matrix-docker-ansible-deploy/molecule-shared/tasks/homeserver-stub.yml
Slavi PantaleevandClaude Opus 5 c447e1528b Reword the Molecule scenario comments
They were hard-wrapped at 80 characters, broke mid-parenthesis, and spent lines
restating what the code below them does.

Rewrapped at natural boundaries instead, with the narration dropped and only the
reasons, gotchas and surprises kept. Section dividers stay - they delineate long
plays rather than narrate them.

Comments only; no scenario behaviour changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEH3vxYSQ5SV4N5z61eyGT
2026-08-27 18:02:53 +03:00

85 lines
3.4 KiB
YAML

# SPDX-FileCopyrightText: 2026 Slavi Pantaleev
#
# SPDX-License-Identifier: AGPL-3.0-or-later
---
# Stands up a stand-in homeserver on a container network, for scenarios whose component
# contacts a homeserver while starting up.
#
# Include from a scenario's prepare.yml:
#
# - 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: "{{ <role>_container_network }}"
# molecule_shared_stub_joined_rooms: ["!some-room:molecule.local"]
#
# The component should then be pointed at http://matrix.molecule.local:8008.
#
# See molecule-shared/homeserver-stub.py for what it answers and, more importantly, what it is not.
- name: Ensure the homeserver stub script is present
ansible.builtin.copy:
src: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/../../../molecule-shared/homeserver-stub.py"
dest: /root/molecule-homeserver-stub.py
mode: "0755"
- name: Ensure a previous homeserver stub is gone
ansible.builtin.command:
argv:
- docker
- rm
- --force
- "{{ molecule_shared_stub_name | default('matrix-homeserver-stub') }}"
register: molecule_shared_stub_removal
changed_when: molecule_shared_stub_removal.rc == 0
failed_when: false
# The alias is what the component resolves, so its configuration can name a hostname
# rather than a container name.
- name: Ensure the homeserver stub is running
ansible.builtin.command:
argv:
- docker
- run
- --detach
- --name={{ molecule_shared_stub_name | default('matrix-homeserver-stub') }}
- --network={{ molecule_shared_stub_network }}
- --network-alias={{ molecule_shared_stub_hostname | default('matrix.molecule.local') }}
- --env=STUB_SERVER_NAME={{ molecule_shared_stub_server_name | default('molecule.local') }}
- --env=STUB_JOINED_ROOMS={{ (molecule_shared_stub_joined_rooms | default([])) | join(',') }}
# Appservices call /whoami on startup and refuse to run if the id returned is not
# the bot user they were configured as, so a scenario bridging anything has to tell
# the stub who it should claim to be.
- --env=STUB_USER_ID={{ molecule_shared_stub_user_id | default('@stub:' + (molecule_shared_stub_server_name | default('molecule.local'))) }}
# Set molecule_shared_stub_verbose to "1" to log every request the stub is asked for.
# How you find out why a component will not start, and for a component with no port of
# its own, the only place to observe it acting on what the role configured.
- --env=STUB_VERBOSE={{ molecule_shared_stub_verbose | default('') }}
- --volume=/root/molecule-homeserver-stub.py:/stub.py:ro
- "{{ molecule_shared_image_python }}"
- python3
- /stub.py
register: molecule_shared_stub_start
changed_when: molecule_shared_stub_start.rc == 0
- name: Wait for the homeserver stub to answer
ansible.builtin.command:
argv:
- docker
- run
- --rm
- --network={{ molecule_shared_stub_network }}
- "{{ molecule_shared_image_curl }}"
- --silent
- --fail
- --max-time
- "5"
- "http://{{ molecule_shared_stub_hostname | default('matrix.molecule.local') }}:8008/_matrix/client/versions"
register: molecule_shared_stub_ready
changed_when: false
until: molecule_shared_stub_ready.rc == 0
retries: 12
delay: 5