| @@ -71,6 +71,8 @@ matrix_homeserver_container_extra_arguments_auto: | | |||||
| {{ | {{ | ||||
| (['--mount type=bind,src=' + matrix_appservice_discord_config_path + '/registration.yaml,dst=/matrix-appservice-discord-registration.yaml,ro'] if matrix_appservice_discord_enabled else []) | (['--mount type=bind,src=' + matrix_appservice_discord_config_path + '/registration.yaml,dst=/matrix-appservice-discord-registration.yaml,ro'] if matrix_appservice_discord_enabled else []) | ||||
| + | + | ||||
| (['--mount type=bind,src=' + matrix_appservice_draupnir_for_all_config_path + '/draupnir-for-all-registration.yaml,dst=/matrix-appservice-draupnir-for-all-registration.yaml,ro'] if matrix_appservice_draupnir_for_all_enabled else []) | |||||
| + | |||||
| (['--mount type=bind,src=' + matrix_appservice_irc_config_path + '/registration.yaml,dst=/matrix-appservice-irc-registration.yaml,ro'] if matrix_appservice_irc_enabled else []) | (['--mount type=bind,src=' + matrix_appservice_irc_config_path + '/registration.yaml,dst=/matrix-appservice-irc-registration.yaml,ro'] if matrix_appservice_irc_enabled else []) | ||||
| + | + | ||||
| (['--mount type=bind,src=' + matrix_appservice_kakaotalk_config_path + '/registration.yaml,dst=/matrix-appservice-kakaotalk-registration.yaml,ro'] if matrix_appservice_kakaotalk_enabled else []) | (['--mount type=bind,src=' + matrix_appservice_kakaotalk_config_path + '/registration.yaml,dst=/matrix-appservice-kakaotalk-registration.yaml,ro'] if matrix_appservice_kakaotalk_enabled else []) | ||||
| @@ -138,6 +140,8 @@ matrix_homeserver_app_service_config_files_auto: | | |||||
| {{ | {{ | ||||
| (['/matrix-appservice-discord-registration.yaml'] if matrix_appservice_discord_enabled else []) | (['/matrix-appservice-discord-registration.yaml'] if matrix_appservice_discord_enabled else []) | ||||
| + | + | ||||
| (['/matrix-appservice-draupnir-for-all-registration.yaml'] if matrix_appservice_draupnir_for_all_enabled else []) | |||||
| + | |||||
| (['/matrix-appservice-irc-registration.yaml'] if matrix_appservice_irc_enabled else []) | (['/matrix-appservice-irc-registration.yaml'] if matrix_appservice_irc_enabled else []) | ||||
| + | + | ||||
| (['/matrix-appservice-kakaotalk-registration.yaml'] if matrix_appservice_kakaotalk_enabled else []) | (['/matrix-appservice-kakaotalk-registration.yaml'] if matrix_appservice_kakaotalk_enabled else []) | ||||
| @@ -270,6 +274,8 @@ devture_systemd_service_manager_services_list_auto: | | |||||
| + | + | ||||
| ([{'name': 'matrix-appservice-discord.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-discord']}] if matrix_appservice_discord_enabled else []) | ([{'name': 'matrix-appservice-discord.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-discord']}] if matrix_appservice_discord_enabled else []) | ||||
| + | + | ||||
| ([{'name': 'matrix-appservice-draupnir-for-all.service', 'priority': 4000, 'groups': ['matrix', 'bridges', 'draupnir-for-all', 'appservice-draupnir-for-all']}] if matrix_appservice_draupnir_for_all_enabled else []) | |||||
| + | |||||
| ([{'name': 'matrix-appservice-irc.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-irc']}] if matrix_appservice_irc_enabled else []) | ([{'name': 'matrix-appservice-irc.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-irc']}] if matrix_appservice_irc_enabled else []) | ||||
| + | + | ||||
| ([{'name': 'matrix-appservice-kakaotalk.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-kakaotalk']}] if matrix_appservice_kakaotalk_enabled else []) | ([{'name': 'matrix-appservice-kakaotalk.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-kakaotalk']}] if matrix_appservice_kakaotalk_enabled else []) | ||||
| @@ -2626,6 +2632,7 @@ matrix_bot_mjolnir_container_additional_networks_auto: |- | |||||
| # | # | ||||
| ###################################################################### | ###################################################################### | ||||
| ###################################################################### | ###################################################################### | ||||
| # | # | ||||
| # matrix-bot-draupnir | # matrix-bot-draupnir | ||||
| @@ -2656,6 +2663,48 @@ matrix_bot_draupnir_container_additional_networks_auto: |- | |||||
| ###################################################################### | ###################################################################### | ||||
| ###################################################################### | |||||
| # | |||||
| # matrix-appservice-draupnir-for-all | |||||
| # | |||||
| ###################################################################### | |||||
| # We don't enable bots by default. | |||||
| matrix_appservice_draupnir_for_all_enabled: false | |||||
| matrix_appservice_draupnir_for_all_systemd_required_services_list_auto: | | |||||
| {{ | |||||
| matrix_addons_homeserver_systemd_services_list | |||||
| + | |||||
| ([devture_postgres_identifier ~ '.service'] if (devture_postgres_enabled and matrix_appservice_draupnir_for_all_database_hostname == devture_postgres_connection_hostname) else []) | |||||
| }} | |||||
| matrix_appservice_draupnir_for_all_container_image_self_build: "{{ matrix_architecture not in ['amd64', 'arm64'] }}" | |||||
| matrix_appservice_draupnir_for_all_container_network: "{{ matrix_addons_container_network }}" | |||||
| matrix_appservice_draupnir_for_all_container_additional_networks_auto: |- | |||||
| {{ | |||||
| ( | |||||
| ([] if matrix_addons_homeserver_container_network == '' else [matrix_addons_homeserver_container_network]) | |||||
| + | |||||
| ([devture_postgres_container_network] if (devture_postgres_enabled and matrix_appservice_draupnir_for_all_database_hostname == devture_postgres_connection_hostname and matrix_appservice_draupnir_for_all_container_network != devture_postgres_container_network) else []) | |||||
| ) | unique | |||||
| }} | |||||
| matrix_appservice_draupnir_for_all_appservice_token: "{{ '%s' | format(matrix_homeserver_generic_secret_key) | password_hash('sha512', 'd4a.as.token', rounds=655555) | to_uuid }}" | |||||
| matrix_appservice_draupnir_for_all_homeserver_token: "{{ '%s' | format(matrix_homeserver_generic_secret_key) | password_hash('sha512', 'd4a.hs.token', rounds=655555) | to_uuid }}" | |||||
| matrix_appservice_draupnir_for_all_database_hostname: "{{ devture_postgres_connection_hostname if devture_postgres_enabled else '' }}" | |||||
| matrix_appservice_draupnir_for_all_database_password: "{{ '%s' | format(matrix_homeserver_generic_secret_key) | password_hash('sha512', 'as.d4a.db', rounds=655555) | to_uuid }}" | |||||
| ###################################################################### | |||||
| # | |||||
| # /matrix-appservice-draupnir-for-all | |||||
| # | |||||
| ###################################################################### | |||||
| ###################################################################### | ###################################################################### | ||||
| # | # | ||||
| # etke/backup_borg | # etke/backup_borg | ||||
| @@ -3541,6 +3590,12 @@ devture_postgres_managed_databases_auto: | | |||||
| 'password': matrix_appservice_discord_database_password, | 'password': matrix_appservice_discord_database_password, | ||||
| }] if (matrix_appservice_discord_enabled and matrix_appservice_discord_database_engine == 'postgres' and matrix_appservice_discord_database_hostname == devture_postgres_connection_hostname) else []) | }] if (matrix_appservice_discord_enabled and matrix_appservice_discord_database_engine == 'postgres' and matrix_appservice_discord_database_hostname == devture_postgres_connection_hostname) else []) | ||||
| + | + | ||||
| ([{ | |||||
| 'name': matrix_appservice_draupnir_for_all_database_name, | |||||
| 'username': matrix_appservice_draupnir_for_all_database_username, | |||||
| 'password': matrix_appservice_draupnir_for_all_database_password, | |||||
| }] if (matrix_appservice_draupnir_for_all_enabled and matrix_appservice_draupnir_for_all_database_hostname == devture_postgres_connection_hostname) else []) | |||||
| + | |||||
| ([{ | ([{ | ||||
| 'name': matrix_appservice_slack_database_name, | 'name': matrix_appservice_slack_database_name, | ||||
| 'username': matrix_appservice_slack_database_username, | 'username': matrix_appservice_slack_database_username, | ||||
| @@ -0,0 +1,103 @@ | |||||
| --- | |||||
| # A moderation tool for Matrix | |||||
| # Project source code URL: https://github.com/the-draupnir-project/Draupnir | |||||
| matrix_appservice_draupnir_for_all_enabled: true | |||||
| # renovate: datasource=docker depName=gnuxie/draupnir | |||||
| matrix_appservice_draupnir_for_all_version: "v1.86.2" | |||||
| matrix_appservice_draupnir_for_all_container_image_self_build: false | |||||
| matrix_appservice_draupnir_for_all_container_image_self_build_repo: "https://github.com/the-draupnir-project/Draupnir.git" | |||||
| matrix_appservice_draupnir_for_all_docker_image: "{{ matrix_appservice_draupnir_for_all_docker_image_name_prefix }}gnuxie/draupnir:{{ matrix_appservice_draupnir_for_all_version }}" | |||||
| matrix_appservice_draupnir_for_all_docker_image_name_prefix: "{{ 'localhost/' if matrix_appservice_draupnir_for_all_container_image_self_build else matrix_container_global_registry_prefix }}" | |||||
| matrix_appservice_draupnir_for_all_docker_image_force_pull: "{{ matrix_appservice_draupnir_for_all_docker_image.endswith(':latest') }}" | |||||
| matrix_appservice_draupnir_for_all_base_path: "{{ matrix_base_data_path }}/draupnir-for-all" | |||||
| matrix_appservice_draupnir_for_all_config_path: "{{ matrix_appservice_draupnir_for_all_base_path }}/config" | |||||
| matrix_appservice_draupnir_for_all_data_path: "{{ matrix_appservice_draupnir_for_all_base_path }}/data" | |||||
| matrix_appservice_draupnir_for_all_docker_src_files_path: "{{ matrix_appservice_draupnir_for_all_base_path }}/docker-src" | |||||
| matrix_appservice_draupnir_for_all_container_network: "" | |||||
| matrix_appservice_draupnir_for_all_container_additional_networks: "{{ matrix_appservice_draupnir_for_all_container_additional_networks_auto + matrix_appservice_draupnir_for_all_container_additional_networks_custom }}" | |||||
| matrix_appservice_draupnir_for_all_container_additional_networks_auto: [] | |||||
| matrix_appservice_draupnir_for_all_container_additional_networks_custom: [] | |||||
| # A list of extra arguments to pass to the container | |||||
| matrix_appservice_draupnir_for_all_container_extra_arguments: [] | |||||
| # List of systemd services that matrix-bot-draupnir.service depends on | |||||
| matrix_appservice_draupnir_for_all_systemd_required_services_list: "{{ matrix_appservice_draupnir_for_all_systemd_required_services_list_default + matrix_appservice_draupnir_for_all_systemd_required_services_list_auto + matrix_appservice_draupnir_for_all_systemd_required_services_list_custom }}" | |||||
| matrix_appservice_draupnir_for_all_systemd_required_services_list_default: ['docker.service'] | |||||
| matrix_appservice_draupnir_for_all_systemd_required_services_list_auto: [] | |||||
| matrix_appservice_draupnir_for_all_systemd_required_services_list_custom: [] | |||||
| # List of systemd services that matrix-bot-draupnir.service wants | |||||
| matrix_appservice_draupnir_for_all_systemd_wanted_services_list: [] | |||||
| # The room ID where people can use the bot. The bot has no access controls, so | |||||
| # anyone in this room can use the bot - secure your room! | |||||
| # This should be a room alias - not a matrix.to URL. | |||||
| # Note: draupnir is fairly verbose - expect a lot of messages from it. | |||||
| # This room is diffrent for Appservice Mode compared to normal mode. | |||||
| # In Appservice mode it provides functions like user management. | |||||
| matrix_appservice_draupnir_for_all_master_control_room_alias: "" | |||||
| # Placeholder Remenant of the fact that Cat belived Master Control Room to be separated from Access Control Policy List. | |||||
| # The alias of the Policy list used to control who can provision a bot for them selfs. | |||||
| # This should be a room alias - not a matrix.to URL. | |||||
| # matrix_appservice_draupnir_for_all_management_policy_list_alias: "" | |||||
| matrix_appservice_draupnir_for_all_database_username: matrix_appservice_draupnir_for_all | |||||
| matrix_appservice_draupnir_for_all_database_password: 'some-passsword' | |||||
| matrix_appservice_draupnir_for_all_database_hostname: '' | |||||
| matrix_appservice_draupnir_for_all_database_port: 5432 | |||||
| matrix_appservice_draupnir_for_all_database_name: matrix_appservice_draupnir_for_all | |||||
| matrix_appservice_draupnir_for_all_database_sslmode: disable | |||||
| matrix_appservice_draupnir_for_all_appservice_port: "9001" | |||||
| matrix_appservice_draupnir_for_all_appservice_url: 'http://matrix-appservice-draupnir-for-all' | |||||
| matrix_appservice_draupnir_for_all_database_connection_string: 'postgresql://{{ matrix_appservice_draupnir_for_all_database_username }}:{{ matrix_appservice_draupnir_for_all_database_password }}@{{ matrix_appservice_draupnir_for_all_database_hostname }}:{{ matrix_appservice_draupnir_for_all_database_port }}/{{ matrix_appservice_draupnir_for_all_database_name }}?sslmode={{ matrix_appservice_draupnir_for_all_database_sslmode }}' | |||||
| matrix_appservice_draupnir_for_all_user_prefix: "draupnir_" | |||||
| matrix_appservice_draupnir_for_all_registration_yaml: | | |||||
| id: "draupnir-for-all" | |||||
| as_token: "{{ matrix_appservice_draupnir_for_all_appservice_token }}" | |||||
| hs_token: "{{ matrix_appservice_draupnir_for_all_homeserver_token }}" | |||||
| url: "{{ matrix_appservice_draupnir_for_all_appservice_url }}:{{ matrix_appservice_draupnir_for_all_appservice_port }}" | |||||
| sender_localpart: draupnir-main | |||||
| namespaces: | |||||
| users: | |||||
| - exclusive: true | |||||
| regex: '@{{ matrix_appservice_draupnir_for_all_user_prefix }}*' | |||||
| rate_limited: false | |||||
| matrix_appservice_draupnir_for_all_registration: "{{ matrix_appservice_draupnir_for_all_registration_yaml | from_yaml }}" | |||||
| matrix_appservice_draupnir_for_all_configuration_appservice: "{{ lookup('template', 'templates/production-appservice.yaml.j2') | from_yaml }}" | |||||
| # Default configuration template which covers the generic use case. | |||||
| # You can customize it by controlling the various variables inside it. | |||||
| # | |||||
| # For a more advanced customization, you can extend the default (see `matrix_appservice_draupnir_for_all_configuration_extension_yaml`) | |||||
| # or completely replace this variable with your own template. | |||||
| matrix_appservice_draupnir_for_all_configuration_yaml: "{{ lookup('template', 'templates/production-bots.yaml.j2') }}" | |||||
| matrix_appservice_draupnir_for_all_configuration_extension_yaml: | | |||||
| # Your custom YAML configuration goes here. | |||||
| # This configuration extends the default starting configuration (`matrix_appservice_draupnir_for_all_configuration_yaml`). | |||||
| # | |||||
| # You can override individual variables from the default configuration, or introduce new ones. | |||||
| # | |||||
| # If you need something more special, you can take full control by | |||||
| # completely redefining `matrix_appservice_draupnir_for_all_configuration_yaml`. | |||||
| matrix_appservice_draupnir_for_all_configuration_extension: "{{ matrix_appservice_draupnir_for_all_configuration_extension_yaml | from_yaml if matrix_appservice_draupnir_for_all_configuration_extension_yaml | from_yaml is mapping else {} }}" | |||||
| # Holds the final configuration (a combination of the default and its extension). | |||||
| # You most likely don't need to touch this variable. Instead, see `matrix_appservice_draupnir_for_all_configuration_yaml`. | |||||
| matrix_appservice_draupnir_for_all_configuration: "{{ matrix_appservice_draupnir_for_all_configuration_yaml | from_yaml | combine(matrix_appservice_draupnir_for_all_configuration_extension, recursive=True) }}" | |||||
| @@ -0,0 +1,20 @@ | |||||
| --- | |||||
| - tags: | |||||
| - setup-all | |||||
| - setup-appservice-draupnir-for-all | |||||
| - install-all | |||||
| - install-appservice-draupnir-for-all | |||||
| block: | |||||
| - when: matrix_appservice_draupnir_for_all_enabled | bool | |||||
| ansible.builtin.include_tasks: "{{ role_path }}/tasks/validate_config.yml" | |||||
| - when: matrix_appservice_draupnir_for_all_enabled | bool | |||||
| ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_install.yml" | |||||
| - tags: | |||||
| - setup-all | |||||
| - setup-appservice-draupnir-for-all | |||||
| block: | |||||
| - when: not matrix_appservice_draupnir_for_all_enabled | bool | |||||
| ansible.builtin.include_tasks: "{{ role_path }}/tasks/setup_uninstall.yml" | |||||
| @@ -0,0 +1,95 @@ | |||||
| --- | |||||
| - ansible.builtin.set_fact: | |||||
| matrix_appservice_draupnir_for_all_requires_restart: false | |||||
| - name: Ensure matrix-appservice-draupnir-for-all paths exist | |||||
| ansible.builtin.file: | |||||
| path: "{{ item.path }}" | |||||
| state: directory | |||||
| mode: 0750 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| with_items: | |||||
| - {path: "{{ matrix_appservice_draupnir_for_all_base_path }}", when: true} | |||||
| - {path: "{{ matrix_appservice_draupnir_for_all_config_path }}", when: true} | |||||
| - {path: "{{ matrix_appservice_draupnir_for_all_data_path }}", when: true} | |||||
| - {path: "{{ matrix_appservice_draupnir_for_all_docker_src_files_path }}", when: "{{ matrix_appservice_draupnir_for_all_container_image_self_build }}"} | |||||
| when: "item.when | bool" | |||||
| - name: Ensure draupnir Docker image is pulled | |||||
| community.docker.docker_image: | |||||
| name: "{{ matrix_appservice_draupnir_for_all_docker_image }}" | |||||
| source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}" | |||||
| force_source: "{{ matrix_appservice_draupnir_for_all_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}" | |||||
| force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_appservice_draupnir_for_all_docker_image_force_pull }}" | |||||
| when: "not matrix_appservice_draupnir_for_all_container_image_self_build | bool" | |||||
| register: result | |||||
| retries: "{{ devture_playbook_help_container_retries_count }}" | |||||
| delay: "{{ devture_playbook_help_container_retries_delay }}" | |||||
| until: result is not failed | |||||
| - name: Ensure draupnir repository is present on self-build | |||||
| ansible.builtin.git: | |||||
| repo: "{{ matrix_appservice_draupnir_for_all_container_image_self_build_repo }}" | |||||
| dest: "{{ matrix_appservice_draupnir_for_all_docker_src_files_path }}" | |||||
| version: "{{ matrix_appservice_draupnir_for_all_docker_image.split(':')[1] }}" | |||||
| force: "yes" | |||||
| become: true | |||||
| become_user: "{{ matrix_user_username }}" | |||||
| register: matrix_appservice_draupnir_for_all_git_pull_results | |||||
| when: "matrix_appservice_draupnir_for_all_container_image_self_build | bool" | |||||
| - name: Ensure draupnir Docker image is built | |||||
| community.docker.docker_image: | |||||
| name: "{{ matrix_appservice_draupnir_for_all_docker_image }}" | |||||
| source: build | |||||
| force_source: "{{ matrix_appservice_draupnir_for_all_git_pull_results.changed }}" | |||||
| build: | |||||
| dockerfile: Dockerfile | |||||
| path: "{{ matrix_appservice_draupnir_for_all_docker_src_files_path }}" | |||||
| pull: true | |||||
| when: "matrix_appservice_draupnir_for_all_container_image_self_build | bool" | |||||
| - name: Ensure matrix-appservice-draupnir-for-all appservice config installed | |||||
| ansible.builtin.copy: | |||||
| content: "{{ matrix_appservice_draupnir_for_all_configuration_appservice | to_nice_yaml(indent=2, width=999999) }}" | |||||
| dest: "{{ matrix_appservice_draupnir_for_all_config_path }}/production-appservice.yaml" | |||||
| mode: 0644 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| - name: Ensure matrix-appservice-draupnir-for-all bot config installed | |||||
| ansible.builtin.copy: | |||||
| content: "{{ matrix_appservice_draupnir_for_all_configuration | to_nice_yaml(indent=2, width=999999) }}" | |||||
| dest: "{{ matrix_appservice_draupnir_for_all_config_path }}/production-bots.yaml" | |||||
| mode: 0644 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| - name: Ensure matrix-appservice-draupnir-for-all registration.yaml installed | |||||
| ansible.builtin.copy: | |||||
| content: "{{ matrix_appservice_draupnir_for_all_registration | to_nice_yaml(indent=2, width=999999) }}" | |||||
| dest: "{{ matrix_appservice_draupnir_for_all_config_path }}/draupnir-for-all-registration.yaml" | |||||
| mode: 0644 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| - name: Ensure matrix-appservice-draupnir-for-all container network is created | |||||
| community.general.docker_network: | |||||
| name: "{{ matrix_appservice_draupnir_for_all_container_network }}" | |||||
| driver: bridge | |||||
| - name: Ensure matrix-appservice-draupnir-for-all.service installed | |||||
| ansible.builtin.template: | |||||
| src: "{{ role_path }}/templates/systemd/matrix-appservice-draupnir-for-all.service.j2" | |||||
| dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-appservice-draupnir-for-all.service" | |||||
| mode: 0644 | |||||
| register: matrix_appservice_draupnir_for_all_systemd_service_result | |||||
| - name: Ensure matrix-appservice-draupnir-for-all.service restarted, if necessary | |||||
| ansible.builtin.service: | |||||
| name: "matrix-appservice-draupnir-for-all.service" | |||||
| state: restarted | |||||
| daemon_reload: true | |||||
| when: "matrix_appservice_draupnir_for_all_requires_restart | bool" | |||||
| @@ -0,0 +1,25 @@ | |||||
| --- | |||||
| - name: Check existence of matrix-appservice-draupnir-for-all service | |||||
| ansible.builtin.stat: | |||||
| path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-appservice-draupnir-for-all.service" | |||||
| register: matrix_bot_draupnir_service_stat | |||||
| - when: matrix_bot_draupnir_service_stat.stat.exists | bool | |||||
| block: | |||||
| - name: Ensure matrix-appservice-draupnir-for-all is stopped | |||||
| ansible.builtin.service: | |||||
| name: matrix-appservice-draupnir-for-all | |||||
| state: stopped | |||||
| enabled: false | |||||
| daemon_reload: true | |||||
| - name: Ensure matrix-appservice-draupnir-for-all.service doesn't exist | |||||
| ansible.builtin.file: | |||||
| path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-appservice-draupnir-for-all.service" | |||||
| state: absent | |||||
| - name: Ensure matrix-appservice-draupnir-for-all paths don't exist | |||||
| ansible.builtin.file: | |||||
| path: "{{ matrix_bot_draupnir_base_path }}" | |||||
| state: absent | |||||
| @@ -0,0 +1,9 @@ | |||||
| --- | |||||
| - name: Fail if required matrix-bot-draupnir variables are undefined | |||||
| ansible.builtin.fail: | |||||
| msg: "The `{{ item }}` variable must be defined and have a non-null value." | |||||
| with_items: | |||||
| - "matrix_appservice_draupnir_for_all_master_control_room_alias" | |||||
| - "matrix_bot_draupnir_container_network" | |||||
| when: "vars[item] == '' or vars[item] is none" | |||||
| @@ -0,0 +1,18 @@ | |||||
| homeserver: | |||||
| # The Matrix server name, this will be the name of the server in your matrix id. | |||||
| domain: "{{ matrix_domain }}" | |||||
| # The url for the appservice to call the client server API from. | |||||
| url: "{{ matrix_homeserver_url }}" | |||||
| # Database configuration for storing which Mjolnirs have been provisioned. | |||||
| db: | |||||
| engine: "postgres" | |||||
| connectionString: "{{ matrix_appservice_draupnir_for_all_database_connection_string }}" | |||||
| # A room you have created that scopes who can access the appservice. | |||||
| # See docs/access_control.md | |||||
| adminRoom: "{{ matrix_appservice_draupnir_for_all_master_control_room_alias }}" | |||||
| # This is a web api that the widget connects to in order to interact with the appservice. | |||||
| webAPI: | |||||
| port: 9000 | |||||
| @@ -0,0 +1,83 @@ | |||||
| # The log level of terminal (or container) output, | |||||
| # can be one of DEBUG, INFO, WARN and ERROR, in increasing order of importance and severity. | |||||
| # | |||||
| # This should be at INFO or DEBUG in order to get support for Draupnir problems. | |||||
| logLevel: "INFO" | |||||
| # Whether or not Draupnir should synchronize policy lists immediately after startup. | |||||
| # Equivalent to running '!draupnir sync'. | |||||
| syncOnStartup: true | |||||
| # Whether or not Draupnir should check moderation permissions in all protected rooms on startup. | |||||
| # Equivalent to running `!draupnir verify`. | |||||
| verifyPermissionsOnStartup: true | |||||
| # Whether Draupnir should check member lists quicker (by using a different endpoint), | |||||
| # keep in mind that enabling this will miss invited (but not joined) users. | |||||
| # | |||||
| # Turn on if your bot is in (very) large rooms, or in large amounts of rooms. | |||||
| fasterMembershipChecks: false | |||||
| # A case-insensitive list of ban reasons to have the bot also automatically redact the user's messages for. | |||||
| # | |||||
| # If the bot sees you ban a user with a reason that is an (exact case-insensitive) match to this list, | |||||
| # it will also remove the user's messages automatically. | |||||
| # | |||||
| # Typically this is useful to avoid having to give two commands to the bot. | |||||
| # Advanced: Use asterisks to have the reason match using "globs" | |||||
| # (f.e. "spam*testing" would match "spam for testing" as well as "spamtesting"). | |||||
| # | |||||
| # See here for more info: https://www.digitalocean.com/community/tools/glob | |||||
| # Note: Keep in mind that glob is NOT regex! | |||||
| automaticallyRedactForReasons: | |||||
| - "spam" | |||||
| - "advertising" | |||||
| # Whether or not to add all joined rooms to the "protected rooms" list | |||||
| # (excluding the management room and watched policy list rooms, see below). | |||||
| # | |||||
| # Note that this effectively makes the protectedRooms and associated commands useless | |||||
| # for regular rooms. | |||||
| # | |||||
| # Note: the management room is *excluded* from this condition. | |||||
| # Explicitly add it as a protected room to protect it. | |||||
| # | |||||
| # Note: Ban list rooms the bot is watching but didn't create will not be protected. | |||||
| # Explicitly add these rooms as a protected room list if you want them protected. | |||||
| protectAllJoinedRooms: false | |||||
| # Increase this delay to have Draupnir wait longer between two consecutive backgrounded | |||||
| # operations. The total duration of operations will be longer, but the homeserver won't | |||||
| # be affected as much. Conversely, decrease this delay to have Draupnir chain operations | |||||
| # faster. The total duration of operations will generally be shorter, but the performance | |||||
| # of the homeserver may be more impacted. | |||||
| backgroundDelayMS: 500 | |||||
| # Misc options for command handling and commands | |||||
| commands: | |||||
| # Whether or not the `!draupnir` prefix is necessary to submit commands. | |||||
| # | |||||
| # If `true`, will allow commands like `!ban`, `!help`, etc. | |||||
| # | |||||
| # Note: Draupnir can also be pinged by display name instead of having to use | |||||
| # the !draupnir prefix. For example, "my_moderator_bot: ban @spammer:example.org" | |||||
| # will address only my_moderator_bot. | |||||
| allowNoPrefix: false | |||||
| # Any additional bot prefixes that Draupnir will listen to. i.e. adding `mod` will allow `!mod help`. | |||||
| additionalPrefixes: | |||||
| - "draupnir-bot" | |||||
| - "draupnir_bot" | |||||
| - "draupnir" | |||||
| # Whether or not commands with a wildcard (*) will require an additional `--force` argument | |||||
| # in the command to be able to be submitted. | |||||
| confirmWildcardBan: true | |||||
| # The default reasons to be prompted with if the reason is missing from a ban command. | |||||
| ban: | |||||
| defaultReasons: | |||||
| - "spam" | |||||
| - "brigading" | |||||
| - "harassment" | |||||
| - "disagreement" | |||||
| @@ -0,0 +1,48 @@ | |||||
| #jinja2: lstrip_blocks: "True" | |||||
| [Unit] | |||||
| Description=Matrix Draupnir for All appservice | |||||
| {% for service in matrix_appservice_draupnir_for_all_systemd_wanted_services_list %} | |||||
| Requires={{ service }} | |||||
| After={{ service }} | |||||
| {% endfor %} | |||||
| {% for service in matrix_appservice_draupnir_for_all_systemd_required_services_list %} | |||||
| Wants={{ service }} | |||||
| {% endfor %} | |||||
| DefaultDependencies=no | |||||
| [Service] | |||||
| Type=simple | |||||
| Environment="HOME={{ devture_systemd_docker_base_systemd_unit_home_path }}" | |||||
| ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} stop --time={{ devture_systemd_docker_base_container_stop_grace_time_seconds }} matrix-appservice-draupnir-for-all 2>/dev/null || true' | |||||
| ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-appservice-draupnir-for-all 2>/dev/null || true' | |||||
| ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \ | |||||
| --rm \ | |||||
| --name=matrix-appservice-draupnir-for-all \ | |||||
| --log-driver=none \ | |||||
| --user={{ matrix_user_uid }}:{{ matrix_user_gid }} \ | |||||
| --cap-drop=ALL \ | |||||
| --read-only \ | |||||
| --network={{ matrix_appservice_draupnir_for_all_container_network }} \ | |||||
| --mount type=bind,src={{ matrix_appservice_draupnir_for_all_config_path }},dst=/data/config,ro \ | |||||
| --mount type=bind,src={{ matrix_appservice_draupnir_for_all_data_path }},dst=/data \ | |||||
| {% for arg in matrix_appservice_draupnir_for_all_container_extra_arguments %} | |||||
| {{ arg }} \ | |||||
| {% endfor %} | |||||
| {{ matrix_appservice_draupnir_for_all_docker_image }} \ | |||||
| appservice -c /data/config/production-appservice.yaml -f /data/config/draupnir-for-all-registration.yaml -p {{ matrix_appservice_draupnir_for_all_appservice_port }} --draupnir-config /data/config/production-bots.yaml | |||||
| {% for network in matrix_appservice_draupnir_for_all_container_additional_networks %} | |||||
| ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} network connect {{ network }} matrix-appservice-draupnir-for-all | |||||
| {% endfor %} | |||||
| ExecStart={{ devture_systemd_docker_base_host_command_docker }} start --attach matrix-appservice-draupnir-for-all | |||||
| ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} stop --time={{ devture_systemd_docker_base_container_stop_grace_time_seconds }} matrix-appservice-draupnir-for-all 2>/dev/null || true' | |||||
| ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-appservice-draupnir-for-all 2>/dev/null || true' | |||||
| Restart=always | |||||
| RestartSec=30 | |||||
| SyslogIdentifier=matrix-appservice-draupnir-for-all | |||||
| [Install] | |||||
| WantedBy=multi-user.target | |||||
| @@ -49,6 +49,7 @@ | |||||
| - galaxy/redis | - galaxy/redis | ||||
| - custom/matrix-corporal | - custom/matrix-corporal | ||||
| - custom/matrix-appservice-draupnir-for-all | |||||
| - custom/matrix-bridge-appservice-discord | - custom/matrix-bridge-appservice-discord | ||||
| - custom/matrix-bridge-appservice-slack | - custom/matrix-bridge-appservice-slack | ||||
| - custom/matrix-bridge-appservice-webhooks | - custom/matrix-bridge-appservice-webhooks | ||||