mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-09-07 16:33:15 +00:00
Both roles derived `..._appservice_database_uri` as `'sqlite:///' + <path>`.
mautrix-go hands that string to go-sqlite3 as a filename rather than parsing it
as a URL, so the bridge cannot open its database and dies at startup:
FTL Failed to initialize database
error="... unable to open database file: no such file or directory"
Every other mautrix bridge role here passes the bare in-container path.
This has stayed hidden because group_vars/matrix_servers selects postgres
whenever postgres is enabled, which is the default - so almost nobody reaches
the sqlite branch. Anyone who does gets a bridge that never starts.
Found by the mautrix-meta-messenger Molecule scenario, which runs sqlite
deliberately. The scenario's override is dropped and its assertion now compares
the rendered URI against the path the role defines, so the derived value is
what is under test rather than the scenario's own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEH3vxYSQ5SV4N5z61eyGT
113 lines
5.2 KiB
YAML
113 lines
5.2 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-meta-messenger-${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_meta_messenger_container_network: mautrix-meta-messenger-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.
|
|
matrix_bridge_mautrix_meta_messenger_homeserver_address: http://matrix.molecule.local:8008
|
|
matrix_bridge_mautrix_meta_messenger_homeserver_domain: molecule.local
|
|
|
|
# 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_meta_messenger_database_engine: sqlite3-fk-wal
|
|
|
|
# The URI the role derives for `sqlite3-fk-wal` is deliberately NOT
|
|
# overridden here. It used to build `sqlite:///` + the in-container path,
|
|
# which go-sqlite3 takes as a plain filename rather than parsing as a URL,
|
|
# so the bridge died at startup with `unable to open database file`. This
|
|
# scenario is what caught it. Leaving the role's own value in place is
|
|
# what keeps it caught.
|
|
|
|
# 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_meta_messenger_appservice_token: molecule_meta_as_token_5c81de
|
|
matrix_bridge_mautrix_meta_messenger_homeserver_token: molecule_meta_hs_token_a70f24
|
|
|
|
# The one variable that makes this role family unusual: a single
|
|
# upstream codebase serves several Meta networks, and this variable is
|
|
# what picks which one. It reaches the rendered configuration in several
|
|
# places at once - the appservice id, the ghost username prefix, the bot
|
|
# displayname and the bridge's `tor` switch - so a value other than the
|
|
# role's default `messenger` is what tells verify.yml that the role
|
|
# propagated the choice rather than everything merely agreeing by
|
|
# accident. `facebook-tor` is the only one of the three modes that also
|
|
# flips a boolean in the configuration, which is why it is the one used.
|
|
#
|
|
# Nothing logs in during the scenario, so the bridge never opens a
|
|
# connection to Meta (over Tor or otherwise). See docs/molecule-testing.md
|
|
# for why a scenario stops short of that.
|
|
matrix_bridge_mautrix_meta_messenger_meta_mode: facebook-tor
|
|
|
|
# Deliberately different from the role's defaults (`messengerbot`,
|
|
# `!fb`, `(FB)`, `warn`) and from what the bridge would pick on its own,
|
|
# so verify.yml can tell what the role rendered apart from a
|
|
# coincidence.
|
|
matrix_bridge_mautrix_meta_messenger_appservice_username: molecule-metabot
|
|
matrix_bridge_mautrix_meta_messenger_bridge_command_prefix: "!molecule-meta"
|
|
matrix_bridge_mautrix_meta_messenger_bridge_displayname_suffix: "(Molecule)"
|
|
matrix_bridge_mautrix_meta_messenger_logging_min_level: debug
|
|
|
|
# The bridge's HTTP API exposure. Traefik is not deployed here, so
|
|
# nothing routes to it; what is being tested is that the role turns
|
|
# these three variables into both the container's Traefik labels and the
|
|
# `appservice.public_address` the bridge itself reads.
|
|
matrix_bridge_mautrix_meta_messenger_exposure_enabled: true
|
|
matrix_bridge_mautrix_meta_messenger_exposure_hostname: bridges.molecule.local
|
|
matrix_bridge_mautrix_meta_messenger_exposure_path_prefix: /bridges/meta-messenger
|
|
matrix_bridge_mautrix_meta_messenger_scheme: https
|
|
|
|
# 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_meta_messenger_base_path: /matrix/mautrix-meta-messenger
|
|
matrix_bridge_mautrix_meta_messenger_config_path: /matrix/mautrix-meta-messenger/config
|
|
matrix_bridge_mautrix_meta_messenger_data_path: /matrix/mautrix-meta-messenger/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_HOME:-~/.ansible}/roles
|
|
scenario:
|
|
test_sequence:
|
|
- dependency
|
|
- cleanup
|
|
- destroy
|
|
- syntax
|
|
- create
|
|
- prepare
|
|
- converge
|
|
- idempotence
|
|
- verify
|
|
- cleanup
|
|
- destroy
|
|
verifier:
|
|
name: ansible
|