Browse Source

Make appservice-discord support both SQLite and Postgres

People can toggle between them now. The playbook also defaults
to using SQLite if an external Postgres server is used.

Ideally, we'd be able to create databases/users in external Postgres
servers as well, but our initialization logic (and `docker run` command,
etc.) hardcode too many things right now.
pull/740/head
Slavi Pantaleev 5 years ago
parent
commit
a374d309c8
4 changed files with 34 additions and 6 deletions
  1. +9
    -4
      group_vars/matrix_servers
  2. +16
    -0
      roles/matrix-bridge-appservice-discord/defaults/main.yml
  3. +4
    -0
      roles/matrix-bridge-appservice-discord/tasks/validate_config.yml
  4. +5
    -2
      roles/matrix-bridge-appservice-discord/templates/config.yaml.j2

+ 9
- 4
group_vars/matrix_servers View File

@@ -67,6 +67,11 @@ matrix_appservice_discord_appservice_token: "{{ matrix_synapse_macaroon_secret_k

matrix_appservice_discord_homeserver_token: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'discord.hs.token') | to_uuid }}"

# We only make this use Postgres if our own Postgres server is enabled.
# It's only then (for now) that we can automatically create the necessary database and user for this service.
matrix_appservice_discord_database_engine: "{{ 'postgres' if matrix_postgres_enabled else 'sqlite' }}"
matrix_appservice_discord_database_connString_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'as.discord.db') }}"

######################################################################
#
# /matrix-bridge-appservice-discord
@@ -892,10 +897,10 @@ matrix_postgres_db_name: "homeserver"
matrix_postgres_additional_databases: |
{{
([{
'name': 'matrix_appservice_discord',
'username': 'matrix_appservice_discord',
'password': matrix_synapse_macaroon_secret_key | password_hash('sha512', 'app_discord.db.secret') | string,
}] if matrix_appservice_discord_enabled else [])
'name': matrix_appservice_discord_database_connString_db_name,
'username': matrix_appservice_discord_database_connString_username,
'password': matrix_appservice_discord_database_connString_password,
}] if (matrix_appservice_discord_enabled and matrix_appservice_discord_database_engine == 'postgres' and matrix_appservice_discord_database_connString_hostname == 'matrix-postgres') else [])
+ ([{
'name': 'matrix_appservice_slack',
'username': 'matrix_appservice_slack',


+ 16
- 0
roles/matrix-bridge-appservice-discord/defaults/main.yml View File

@@ -41,6 +41,22 @@ matrix_appservice_discord_bridge_homeserverUrl: "http://matrix-synapse:8008"
matrix_appservice_discord_bridge_disablePresence: false
matrix_appservice_discord_bridge_enableSelfServiceBridging: false

# Database-related configuration fields.
#
# To use SQLite, stick to these defaults.
#
# To use Postgres:
# - change the engine (`matrix_appservice_discord_database_engine: 'postgres'`)
# - adjust your database credentials
matrix_appservice_discord_database_engine: 'sqlite'
matrix_appservice_discord_database_filename: "/data/discord.db"
matrix_appservice_discord_database_connString: 'postgresql://{{ matrix_appservice_discord_database_connString_username }}:{{ matrix_appservice_discord_database_connString_password }}@{{ matrix_appservice_discord_database_connString_hostname }}:{{ matrix_appservice_discord_database_connString_port }}/{{ matrix_appservice_discord_database_connString_db_name }}'
matrix_appservice_discord_database_connString_username: 'matrix_appservice_discord'
matrix_appservice_discord_database_connString_password: 'some-password'
matrix_appservice_discord_database_connString_hostname: 'matrix-postgres'
matrix_appservice_discord_database_connString_port: 5432
matrix_appservice_discord_database_connString_db_name: 'matrix_appservice_discord'

# Tells whether the bot should make use of "Privileged Gateway Intents".
#
# Enabling this means that you need to enable it for the bot (Discord application) as well,


+ 4
- 0
roles/matrix-bridge-appservice-discord/tasks/validate_config.yml View File

@@ -20,3 +20,7 @@
when: "item.old in vars"
with_items:
- {'old': 'matrix_appservice_discord_container_expose_client_server_api_port', 'new': '<superseded by matrix_appservice_discord_container_http_host_bind_port>'}

- name: Require a valid database engine
fail: msg="`matrix_appservice_discord_database_engine` needs to be either 'sqlite' or 'postgres'"
when: "matrix_appservice_discord_database_engine not in ['sqlite', 'postgres']"

+ 5
- 2
roles/matrix-bridge-appservice-discord/templates/config.yaml.j2 View File

@@ -58,8 +58,11 @@ database:
# If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite
# WARNING: You will almost certainly be fine with sqlite unless your bridge
# is in heavy demand and you suffer from IO slowness.
#filename: "/data/discord.db"
connString: "postgresql://matrix_appservice_discord:{{ matrix_additional_databases | selectattr('name', 'equalto', 'matrix_appservice_discord') | map(attribute='pass') | first }}@{{ matrix_postgres_connection_hostname }}/matrix_appservice_discord"
{% if matrix_appservice_discord_database_engine == 'sqlite' %}
filename: {{ matrix_appservice_discord_database_filename|to_json }}
{% else %}
connString: {{ matrix_appservice_discord_database_connString|to_json }}
{% endif %}
room:
# Set the default visibility of alias rooms, defaults to "public".
# One of: "public", "private"


Loading…
Cancel
Save