mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-09-22 07:40:09 +00:00
Proves the bridge starts on the configuration this role rendered: the systemd unit is active and has not been restarting, the appservice port is open, config.yaml and registration.yaml (parsed, not grepped) carry the scenario's homeserver address, bot username, tokens, command prefix, avatar-proxy key, public address and log level, the sqlite database was created under the role's data path as the role's uid, and the running container is the version defaults/main.yml pins. It does not bridge anything. Discord is behind an account, which is where a scenario stops being a test of this repository. Two things are specific to this role rather than copied from the mautrix-whatsapp scenario: - mautrix-discord is the only bridge here whose validate_config.yml requires a public address. It is composed from hostname + scheme + path prefix, and those same three feed the Traefik avatar-proxy labels, so the scenario picks a non-`/` path prefix and a non-default scheme and asserts the composed router rule and strip-prefix middleware - both in the label file and, read back off the running container, as labels Docker accepted. Traefik labels are left enabled here for that reason, unlike in the mautrix-whatsapp scenario which asserts their absence. - matrix_bridge_mautrix_discord_bridge_double_puppet_server_map_default in the role's defaults references matrix_bridge_beeper_linkedin_homeserver_domain and matrix_bridge_beeper_linkedin_homeserver_address - variables belonging to a different role, evidently copy-pasted from matrix-bridge-beeper-linkedin, and unique to this role among the bridges. A playbook run has every role's defaults in scope so it resolves silently; a role scenario has only this role loaded and the template fails on the undefined name. The scenario neutralises it in its own group_vars rather than touching the role. Falsified the crash-loop assertion: pointing the in-container sqlite path at a directory that does not exist makes the bridge exit on startup, and the run then fails at "Assert the service is active and has not been restarting" with "activating after 5 automatic restart(s)". Reverted, and green again since - including idempotence.
107 lines
4.6 KiB
YAML
107 lines
4.6 KiB
YAML
# SPDX-FileCopyrightText: 2026 Slavi Pantaleev
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
---
|
|
dependency:
|
|
name: galaxy
|
|
options:
|
|
requirements-file: requirements.yml
|
|
force: true
|
|
driver:
|
|
name: docker
|
|
platforms:
|
|
- name: mautrix-discord-${MOLECULE_DISTRO:-ubuntu2604}-default
|
|
image: "geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2604}-ansible:latest"
|
|
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
|
volumes:
|
|
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
|
cgroupns_mode: host
|
|
privileged: true
|
|
pre_build_image: true
|
|
provisioner:
|
|
name: ansible
|
|
config_options:
|
|
defaults:
|
|
callback_result_format: yaml
|
|
inventory:
|
|
group_vars:
|
|
all:
|
|
matrix_bridge_mautrix_discord_container_network: mautrix-discord-molecule
|
|
|
|
# The homeserver stub prepare.yml stands up. The bridge contacts it
|
|
# while starting; it is not a real homeserver and nothing is asserted
|
|
# about it. There is deliberately no Discord on the other side either -
|
|
# see docs/molecule-testing.md.
|
|
matrix_bridge_mautrix_discord_homeserver_address: http://matrix.molecule.local:8008
|
|
|
|
# sqlite keeps the scenario to one container. The role only requires a
|
|
# database hostname when the engine is postgres, and testing which
|
|
# database engine the bridge can talk to is not what this proves.
|
|
matrix_bridge_mautrix_discord_database_engine: sqlite
|
|
|
|
# Appservice tokens. These are what the bridge and homeserver would
|
|
# authenticate to each other with; here they only have to reach the
|
|
# rendered configuration and the registration file.
|
|
matrix_bridge_mautrix_discord_appservice_token: molecule_as_token_d15c07
|
|
matrix_bridge_mautrix_discord_homeserver_token: molecule_hs_token_a4e2b8
|
|
|
|
# Deliberately different from the role's defaults, so verify.yml can
|
|
# tell what the role rendered apart from what the bridge would have
|
|
# defaulted to on its own.
|
|
matrix_bridge_mautrix_discord_appservice_bot_username: molecule-discordbot
|
|
matrix_bridge_mautrix_discord_homeserver_domain: molecule.local
|
|
matrix_bridge_mautrix_discord_bridge_command_prefix: "!molecule-discord"
|
|
# The role defaults to `warn`; the bridge's own shipped configuration
|
|
# uses `debug`. `info` is neither.
|
|
matrix_bridge_mautrix_discord_logging_level: info
|
|
|
|
# Unlike most bridge roles here, mautrix-discord *requires* a public
|
|
# address: `validate_config.yml` fails without
|
|
# `matrix_bridge_mautrix_discord_bridge_public_address`, which is
|
|
# derived from these three. Discord fetches avatars over it in relay
|
|
# mode; nothing reaches it in this scenario, but it has to be set for
|
|
# the role to run at all.
|
|
#
|
|
# A non-`/` path prefix and a non-default scheme are chosen so the
|
|
# avatar-proxy labels verify.yml reads can only look the way they do if
|
|
# the role composed them from these values.
|
|
matrix_bridge_mautrix_discord_hostname: discord.molecule.local
|
|
matrix_bridge_mautrix_discord_path_prefix: /discord-bridge
|
|
matrix_bridge_mautrix_discord_scheme: http
|
|
matrix_bridge_mautrix_discord_bridge_avatar_proxy_key: molecule_avatar_proxy_key_7c1d
|
|
|
|
# The role's default for this references
|
|
# `matrix_bridge_beeper_linkedin_homeserver_domain` /
|
|
# `..._homeserver_address`, which belong to a *different* role. In a
|
|
# playbook run every role's defaults are in scope, so it renders; a role
|
|
# scenario has only this role loaded and the template fails on the
|
|
# undefined name. Neutralised here rather than worked around in the
|
|
# role, and reported as a defect of the role.
|
|
matrix_bridge_mautrix_discord_bridge_double_puppet_server_map_default: {}
|
|
|
|
# verify.yml runs as its own play, where role defaults are out of scope,
|
|
# so the paths it reads are pinned here as literals matching what the
|
|
# role derives from matrix_base_data_path.
|
|
matrix_bridge_mautrix_discord_base_path: /matrix/mautrix-discord
|
|
matrix_bridge_mautrix_discord_config_path: /matrix/mautrix-discord/config
|
|
matrix_bridge_mautrix_discord_data_path: /matrix/mautrix-discord/data
|
|
env:
|
|
# Workaround for https://github.com/ansible/molecule/issues/4391
|
|
ANSIBLE_ROLES_PATH: ${MOLECULE_PROJECT_DIRECTORY}/../..:/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:~/.ansible/roles
|
|
scenario:
|
|
test_sequence:
|
|
- dependency
|
|
- cleanup
|
|
- destroy
|
|
- syntax
|
|
- create
|
|
- prepare
|
|
- converge
|
|
- idempotence
|
|
- verify
|
|
- cleanup
|
|
- destroy
|
|
verifier:
|
|
name: ansible
|