| @@ -58,14 +58,33 @@ matrix_appservice_draupnir_for_all_force_restart: "{{ | |||||
| matrix_appservice_draupnir_for_all_rolling_tag | bool | matrix_appservice_draupnir_for_all_rolling_tag | bool | ||||
| }}" | }}" | ||||
| # This controls whether Zero Touch Deployment is enabled. | |||||
| # When enabled, the playbook validates the related settings and only renders | |||||
| # the configuration values Draupnir expects for this mode. | |||||
| # This prevents invalid manual combinations from being passed through, since | |||||
| # Draupnir requires `matrix_appservice_draupnir_for_all_config_adminRoom` to be | |||||
| # unset and `matrix_appservice_draupnir_for_all_initialManager` to be a valid | |||||
| # user ID. | |||||
| # Zero Touch Deployment is recomended for all new deployments. | |||||
| # New deployments that are exempt from this recomendation are assumed to be advanced users. | |||||
| # Who know what they are doing and have specific needs that require the flexibility of non-zero-touch-deployment mode. | |||||
| # Note that enabling this on an existing deployment will cause the bot to recreate the admin room. | |||||
| # Manual policy migration has to be done in that case as to not break when access controls return to working order. | |||||
| matrix_appservice_draupnir_for_all_zero_touch_deploy: false | |||||
| # The room ID where people can use the bot. The bot has no access controls, so | # 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! | # anyone in this room can use the bot - secure your room! | ||||
| # This should be a room alias - not a matrix.to URL. | # This should be a room alias - not a matrix.to URL. | ||||
| # Note: Draupnir is fairly verbose - expect a lot of messages from it. | |||||
| # Appservice mode unlike bot mode is not verbose in the admin room. | |||||
| # This room is different for Appservice Mode compared to normal mode. | # This room is different for Appservice Mode compared to normal mode. | ||||
| # In Appservice mode it provides functions like user management. | # In Appservice mode it provides functions like user management. | ||||
| matrix_appservice_draupnir_for_all_config_adminRoom: "" # noqa var-naming | matrix_appservice_draupnir_for_all_config_adminRoom: "" # noqa var-naming | ||||
| # This controls the mxid of who is invited to the admin room on its creation when using Zero Touch Deployment. | |||||
| # The this value is mutually exclusive with matrix_appservice_draupnir_for_all_config_adminRoom | |||||
| # and the bot will crash if you attempt to set both at the same time. | |||||
| matrix_appservice_draupnir_for_all_config_initialManager: "" # noqa var-naming | |||||
| # Controls if the room state backing store is activated. | # Controls if the room state backing store is activated. | ||||
| # Room state backing store makes restarts of the bot lightning fast as the bot does not suffer from amnesia. | # Room state backing store makes restarts of the bot lightning fast as the bot does not suffer from amnesia. | ||||
| # This config option has diminished improvements for bots on extremely fast homeservers or very very small bots on fast homeservers. | # This config option has diminished improvements for bots on extremely fast homeservers or very very small bots on fast homeservers. | ||||
| @@ -25,10 +25,19 @@ | |||||
| - {'old': 'matrix_appservice_draupnir_for_all_docker_src_files_path', 'new': 'matrix_appservice_draupnir_for_all_container_src_files_path'} | - {'old': 'matrix_appservice_draupnir_for_all_docker_src_files_path', 'new': 'matrix_appservice_draupnir_for_all_container_src_files_path'} | ||||
| - {'old': 'matrix_appservice_draupnir_for_all_container_image_force_pull', 'new': '<removed> (No longer needed due to new docker module doing this natively only if needed.)'} | - {'old': 'matrix_appservice_draupnir_for_all_container_image_force_pull', 'new': '<removed> (No longer needed due to new docker module doing this natively only if needed.)'} | ||||
| - name: Fail if required matrix-bot-draupnir variables are undefined | |||||
| - name: Fail if required matrix-appservice-draupnir-for-all variables are undefined | |||||
| ansible.builtin.fail: | ansible.builtin.fail: | ||||
| msg: "The `{{ item }}` variable must be defined and have a non-null value." | |||||
| msg: "The `{{ item.name }}` variable must be defined and have a non-null value." | |||||
| with_items: | with_items: | ||||
| - "matrix_appservice_draupnir_for_all_config_adminRoom" | |||||
| - "matrix_bot_draupnir_container_network" | |||||
| when: "lookup('vars', item, default='') == '' or lookup('vars', item, default='') is none" | |||||
| - {'name': 'matrix_appservice_draupnir_for_all_config_adminRoom', when: "{{ not matrix_appservice_draupnir_for_all_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_appservice_draupnir_for_all_config_initialManager', when: "{{ matrix_appservice_draupnir_for_all_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_appservice_draupnir_for_all_container_network', when: true} | |||||
| when: "item.when | bool and (lookup('vars', item.name, default='') == '' or lookup('vars', item.name, default='') is none)" | |||||
| - name: Fail if inappropriate variables are defined | |||||
| ansible.builtin.fail: | |||||
| msg: "The `{{ item.name }}` variable must be undefined or have a null value." | |||||
| with_items: | |||||
| - {'name': 'matrix_appservice_draupnir_for_all_config_adminRoom', when: "{{ matrix_appservice_draupnir_for_all_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_appservice_draupnir_for_all_config_initialManager', when: "{{ not matrix_appservice_draupnir_for_all_zero_touch_deploy }}"} | |||||
| when: "item.when | bool and not (lookup('vars', item.name, default='') == '' or lookup('vars', item.name, default='') is none)" | |||||
| @@ -17,9 +17,17 @@ db: | |||||
| engine: "postgres" | engine: "postgres" | ||||
| connectionString: "{{ matrix_appservice_draupnir_for_all_database_connection_string }}" | connectionString: "{{ matrix_appservice_draupnir_for_all_database_connection_string }}" | ||||
| {% if not matrix_appservice_draupnir_for_all_zero_touch_deploy %} | |||||
| # A room you have created that scopes who can access the appservice. | # A room you have created that scopes who can access the appservice. | ||||
| # See docs/access_control.md | # See docs/access_control.md | ||||
| adminRoom: {{ matrix_appservice_draupnir_for_all_config_adminRoom | to_json }} | adminRoom: {{ matrix_appservice_draupnir_for_all_config_adminRoom | to_json }} | ||||
| {% endif %} | |||||
| {% if matrix_appservice_draupnir_for_all_zero_touch_deploy %} | |||||
| # The initial manager to invite if the admin room has to be created. | |||||
| initialManager: {{ matrix_appservice_draupnir_for_all_config_initialManager | to_json }} | |||||
| {% endif %} | |||||
| # This is a web api that the widget connects to in order to interact with the appservice. | # This is a web api that the widget connects to in order to interact with the appservice. | ||||
| webAPI: | webAPI: | ||||
| @@ -37,6 +45,5 @@ maxDraupnirsPerUser: 1 | |||||
| # Defaults to false when omitted. | # Defaults to false when omitted. | ||||
| allowSelfServiceProvisioning: false | allowSelfServiceProvisioning: false | ||||
| roomStateBackingStore: | roomStateBackingStore: | ||||
| enabled: {{ matrix_appservice_draupnir_for_all_config_roomStateBackingStore_enabled | to_json }} | enabled: {{ matrix_appservice_draupnir_for_all_config_roomStateBackingStore_enabled | to_json }} | ||||
| @@ -115,12 +115,36 @@ matrix_bot_draupnir_password: "{{ matrix_bot_draupnir_pantalaimon_password }}" | |||||
| # This configuration option does not follow the common naming schema as its not controlling a config key directly. | # This configuration option does not follow the common naming schema as its not controlling a config key directly. | ||||
| matrix_bot_draupnir_login_native: false | matrix_bot_draupnir_login_native: false | ||||
| # 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 controls whether Zero Touch Deployment is enabled. | |||||
| # When enabled, the playbook validates the settings and only | |||||
| # renders the configuration values Draupnir expects. | |||||
| # This prevents invalid manual combinations from being passed through, since | |||||
| # Draupnir requires `matrix_bot_draupnir_config_managementRoom` to be unset and | |||||
| # `matrix_bot_draupnir_initialManager` to be a valid MXID. | |||||
| # Zero Touch Deployment is recommended for all new deployments. | |||||
| # Deployments that are exempt from this recommendation are assumed to be | |||||
| # advanced setups with specific needs for non-zero-touch mode. | |||||
| # Note that enabling this on an existing deployment will cause the bot to | |||||
| # recreate the management room. | |||||
| # Recreating the management room will cause all protections to reset their settings to defaults | |||||
| # and cause the re creation of secondary rooms like notification rooms. News memory will also be wiped. | |||||
| matrix_bot_draupnir_zero_touch_deploy: false | |||||
| # The management room used for administration when Zero Touch | |||||
| # Deployment is disabled. | |||||
| # The bot has no access controls, so anyone in this room can use it - secure | |||||
| # your room! | |||||
| # This should be a room alias or room ID - not a matrix.to URL. | # This should be a room alias or room ID - not a matrix.to URL. | ||||
| # Note: Draupnir is fairly verbose - expect a lot of messages from it. | # Note: Draupnir is fairly verbose - expect a lot of messages from it. | ||||
| matrix_bot_draupnir_config_managementRoom: "" # noqa var-naming | matrix_bot_draupnir_config_managementRoom: "" # noqa var-naming | ||||
| # The MXID invited as the initial manager when Zero Touch Deployment creates the | |||||
| # management room. | |||||
| # This value is mutually exclusive with | |||||
| # `matrix_bot_draupnir_config_managementRoom`, and the bot will crash if you | |||||
| # attempt to set both at the same time. | |||||
| matrix_bot_draupnir_config_initialManager: "" # noqa var-naming | |||||
| # Endpoint URL that Draupnir uses to interact with the Matrix homeserver (client-server API). | # Endpoint URL that Draupnir uses to interact with the Matrix homeserver (client-server API). | ||||
| # Set this to the Pantalaimon URL if you're using that. | # Set this to the Pantalaimon URL if you're using that. | ||||
| matrix_bot_draupnir_config_homeserverUrl: "" # noqa var-naming | matrix_bot_draupnir_config_homeserverUrl: "" # noqa var-naming | ||||
| @@ -1,5 +1,5 @@ | |||||
| # SPDX-FileCopyrightText: 2023 - 2025 MDAD project contributors | # SPDX-FileCopyrightText: 2023 - 2025 MDAD project contributors | ||||
| # SPDX-FileCopyrightText: 2023 - 2025 Catalan Lover <catalanlover@protonmail.com> | |||||
| # SPDX-FileCopyrightText: 2023 - 2026 Catalan Lover <catalanlover@protonmail.com> | |||||
| # SPDX-FileCopyrightText: 2024 - 2025 Slavi Pantaleev | # SPDX-FileCopyrightText: 2024 - 2025 Slavi Pantaleev | ||||
| # | # | ||||
| # SPDX-License-Identifier: AGPL-3.0-or-later | # SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| @@ -45,7 +45,8 @@ | |||||
| with_items: | with_items: | ||||
| - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ not matrix_bot_draupnir_pantalaimon_use and not matrix_bot_draupnir_login_native }}"} | - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ not matrix_bot_draupnir_pantalaimon_use and not matrix_bot_draupnir_login_native }}"} | ||||
| - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_config_experimentalRustCrypto }}"} | - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_config_experimentalRustCrypto }}"} | ||||
| - {'name': 'matrix_bot_draupnir_config_managementRoom', when: true} | |||||
| - {'name': 'matrix_bot_draupnir_config_managementRoom', when: "{{ not matrix_bot_draupnir_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_bot_draupnir_config_initialManager', when: "{{ matrix_bot_draupnir_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_bot_draupnir_container_network', when: true} | - {'name': 'matrix_bot_draupnir_container_network', when: true} | ||||
| - {'name': 'matrix_bot_draupnir_config_homeserverUrl', when: true} | - {'name': 'matrix_bot_draupnir_config_homeserverUrl', when: true} | ||||
| - {'name': 'matrix_bot_draupnir_config_rawHomeserverUrl', when: true} | - {'name': 'matrix_bot_draupnir_config_rawHomeserverUrl', when: true} | ||||
| @@ -64,6 +65,8 @@ | |||||
| with_items: | with_items: | ||||
| - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_pantalaimon_use }}"} | - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_pantalaimon_use }}"} | ||||
| - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_login_native }}"} | - {'name': 'matrix_bot_draupnir_config_accessToken', when: "{{ matrix_bot_draupnir_login_native }}"} | ||||
| - {'name': 'matrix_bot_draupnir_config_managementRoom', when: "{{ matrix_bot_draupnir_zero_touch_deploy }}"} | |||||
| - {'name': 'matrix_bot_draupnir_config_initialManager', when: "{{ not matrix_bot_draupnir_zero_touch_deploy }}"} | |||||
| when: "item.when | bool and not (lookup('vars', item.name, default='') == '' or lookup('vars', item.name, default='') is none)" | when: "item.when | bool and not (lookup('vars', item.name, default='') == '' or lookup('vars', item.name, default='') is none)" | ||||
| - name: Fail when matrix_bot_draupnir_config_experimentalRustCrypto is enabled together with matrix_bot_draupnir_pantalaimon_use | - name: Fail when matrix_bot_draupnir_config_experimentalRustCrypto is enabled together with matrix_bot_draupnir_pantalaimon_use | ||||
| @@ -63,6 +63,7 @@ autojoinOnlyIfManager: true | |||||
| # Whether Draupnir should report ignored invites to the management room (if autojoinOnlyIfManager is true). | # Whether Draupnir should report ignored invites to the management room (if autojoinOnlyIfManager is true). | ||||
| recordIgnoredInvites: false | recordIgnoredInvites: false | ||||
| {% if not matrix_bot_draupnir_zero_touch_deploy %} | |||||
| # The room ID (or room alias) of the management room, anyone in this room can issue commands to Draupnir. | # The room ID (or room alias) of the management room, anyone in this room can issue commands to Draupnir. | ||||
| # | # | ||||
| # Draupnir has no more granular access controls other than this, be sure you trust everyone in this room - secure it! | # Draupnir has no more granular access controls other than this, be sure you trust everyone in this room - secure it! | ||||
| @@ -72,6 +73,13 @@ recordIgnoredInvites: false | |||||
| # Note: By default, Draupnir is fairly verbose - expect a lot of messages in this room. | # Note: By default, Draupnir is fairly verbose - expect a lot of messages in this room. | ||||
| # (see verboseLogging to adjust this a bit.) | # (see verboseLogging to adjust this a bit.) | ||||
| managementRoom: {{ matrix_bot_draupnir_config_managementRoom | to_json }} | managementRoom: {{ matrix_bot_draupnir_config_managementRoom | to_json }} | ||||
| {% endif %} | |||||
| {% if matrix_bot_draupnir_zero_touch_deploy %} | |||||
| # The initial manager to invite if the management room has to be created. | |||||
| # Leave this commented out when using a pre-existing management room. | |||||
| initialManager: {{ matrix_bot_draupnir_config_initialManager | to_json }} | |||||
| {% endif %} | |||||
| # The log level of terminal (or container) output, | # The log level of terminal (or container) output, | ||||
| # can be one of DEBUG, INFO, WARN and ERROR, in increasing order of importance and severity. | # can be one of DEBUG, INFO, WARN and ERROR, in increasing order of importance and severity. | ||||