mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-08-30 04:23:14 +00:00
`group_vars/matrix_servers` selects postgres whenever postgres is enabled, which is the default, so postgres is what essentially every deployment runs. The scenarios were testing sqlite - a path almost nobody is on. How little that path is used is not a guess: the mautrix-meta bridges could not start at all under sqlite, and nobody reported it. Testing the engine users are actually on is worth more than keeping coverage of the one they are not, so no scenario is left behind on sqlite. Four of the eight scenarios have a database and are converted; the other four have none and are untouched. molecule-shared/tasks/postgres.yml stands Postgres up on the scenario's network, with the data directory on a tmpfs since it is thrown away with the container. The image is pinned at the major the postgres role deploys to new installations and left to Renovate: when a new major lands, the PR bumping that pin runs every scenario against it, which is the earliest warning we get that a component does not cope. Each scenario gives its database and user names that differ from the role's defaults, so the component reaching the database proves the role built its connection string out of them. The assertions moved from "a file appeared at the path we configured" to "these tables exist", which is strictly stronger: tables can only appear once the component has resolved the hostname, authenticated with the credentials the role rendered, and run its migrations to completion. Costs about 10 seconds per affected scenario (115s to 125s locally for mautrix-whatsapp), on jobs that run in parallel. Gotcha worth recording: since Postgres 18 the image puts PGDATA in a versioned subdirectory and refuses to start if it finds a mount at the old /var/lib/postgresql/data, so the tmpfs is mounted at /var/lib/postgresql. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SEH3vxYSQ5SV4N5z61eyGT
98 lines
4.2 KiB
YAML
98 lines
4.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: matrix-reminder-bot-${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_bot_matrix_reminder_bot_container_network: matrix-reminder-bot-molecule
|
|
|
|
# Unlike the bridges, this bot is not an appservice: it logs in as an ordinary user
|
|
# with a password. The stub answers /_matrix/client/v3/login with an access token,
|
|
# which is all the bot needs to reach its sync loop.
|
|
matrix_bot_matrix_reminder_bot_matrix_homeserver_url: http://matrix.molecule.local:8008
|
|
|
|
# Different from the role's default localpart, so verify.yml can tell what the role
|
|
# rendered apart from what it would have rendered anyway.
|
|
matrix_bot_matrix_reminder_bot_matrix_user_id_localpart: molecule.reminder-bot
|
|
matrix_bot_matrix_reminder_bot_matrix_user_password: molecule_bot_password_4f2a91
|
|
|
|
# The role has no default here and refuses to run without one. Also different from the
|
|
# bot's own fallback, and it reaches the container twice: the config file and TZ.
|
|
matrix_bot_matrix_reminder_bot_reminders_timezone: Europe/Sofia
|
|
|
|
# The role and the bot both default to `!`.
|
|
matrix_bot_matrix_reminder_bot_command_prefix: "%%"
|
|
|
|
# Both lists default to off with no entries, so turning them on exercises the
|
|
# `_auto + _custom` composition.
|
|
matrix_bot_matrix_reminder_bot_allowlist_enabled: true
|
|
matrix_bot_matrix_reminder_bot_allowlist_regexes_custom:
|
|
- "@molecule-allowed:molecule.local"
|
|
matrix_bot_matrix_reminder_bot_blocklist_enabled: true
|
|
matrix_bot_matrix_reminder_bot_blocklist_regexes_custom:
|
|
- ".*:blocked.molecule.local"
|
|
|
|
# The device name is hardcoded in the role's template, so overriding it is only
|
|
# possible through the extension mechanism - which tests that merge too.
|
|
matrix_bot_matrix_reminder_bot_configuration_extension_yaml: |
|
|
matrix:
|
|
device_name: Molecule Reminder Bot
|
|
|
|
# Postgres, because that is what `group_vars/matrix_servers` selects whenever postgres
|
|
# is enabled - which is the default, so it is what essentially every real deployment
|
|
# runs. prepare.yml stands one up. Name and user differ from the role's defaults, so
|
|
# reaching the database proves the role built its connection string out of these.
|
|
matrix_bot_matrix_reminder_bot_database_engine: postgres
|
|
matrix_bot_matrix_reminder_bot_database_hostname: matrix-postgres-molecule
|
|
matrix_bot_matrix_reminder_bot_database_name: molecule_reminder_bot
|
|
matrix_bot_matrix_reminder_bot_database_username: molecule_reminder_bot
|
|
matrix_bot_matrix_reminder_bot_database_password: molecule_pg_password_3c9b02
|
|
|
|
# verify.yml runs as its own play, where the role's defaults are out of scope,
|
|
# so the paths it reads are pinned here to match what the role derives.
|
|
matrix_bot_matrix_reminder_bot_base_path: /matrix/matrix-reminder-bot
|
|
matrix_bot_matrix_reminder_bot_config_path: /matrix/matrix-reminder-bot/config
|
|
matrix_bot_matrix_reminder_bot_data_path: /matrix/matrix-reminder-bot/data
|
|
matrix_bot_matrix_reminder_bot_data_store_path: /matrix/matrix-reminder-bot/data/store
|
|
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
|