From 856cdf909adcc1816bdb1bd13caeff857f605f75 Mon Sep 17 00:00:00 2001
From: Kristian Klausen <kristian@klausen.dk>
Date: Thu, 4 Aug 2022 01:16:09 +0200
Subject: [PATCH] mailman3: IaC list configurations

It is cumbersome to manage the list configurations from the web ui and
easy for them to diverge, so let's instead manage them with Ansible.

Fix #254
---
 roles/mailman3/defaults/main.yml              | 79 +++++++++++++++++++
 .../files/list_base_configuration.json        | 77 ++++++++++++++++++
 roles/mailman3/tasks/main.yml                 | 11 +++
 3 files changed, 167 insertions(+)
 create mode 100644 roles/mailman3/files/list_base_configuration.json

diff --git a/roles/mailman3/defaults/main.yml b/roles/mailman3/defaults/main.yml
index b2d2b3fd9..5cd5753bb 100644
--- a/roles/mailman3/defaults/main.yml
+++ b/roles/mailman3/defaults/main.yml
@@ -1 +1,80 @@
 lists_domain: lists.archlinux.org
+lists:
+  arch-announce:
+    allow_list_posts: false
+    bounce_info_stale_after: 60d
+    default_member_action: reject
+    default_nonmember_action: reject
+    description: This mailing list is for official announcements for the Arch Linux distribution.
+    display_name: Arch-announce
+    moderator_password: "{{ vault_archweb_mailman_password }}"
+  arch-dev:
+    advertised: false
+    archive_policy: private
+    description: Development Discussion for Arch Linux
+    display_name: Arch-dev
+    info: This list is for development discussion about Arch Linux.  This list is closed to the general public and only used by internal Arch Linux developers.
+    subscription_policy: confirm_then_moderate
+  arch-devops:
+    display_name: Arch-devops
+    description: Arch Linux Infrastructure development discussion
+  arch-devops-private:
+    advertised: false
+    archive_policy: private
+    description: List for internal discussion of the devops team
+    display_name: Arch-devops-private
+    subscription_policy: confirm_then_moderate
+  arch-dev-public:
+    default_member_action: hold
+    description: Public mailing list for Arch Linux development
+    display_name: Arch-dev-public
+  arch-events:
+    description: Arch Linux Events
+    display_name: Arch-events
+  arch-mirrors-announce:
+    description: List for mirror admins to send announcements (like downtime notifications) to our users
+    display_name: Arch-mirrors-announce
+    info: "This list is intended for admins of Arch Linux mirrors that want to notify our users about downtime of their mirror.\r\n\r\nThis list also accepts mails from non-subscribers."
+  arch-mirrors:
+    description: Arch Linux Mirroring Discussion and Announcements
+    display_name: Arch-mirrors
+    info: This list is intended for admins of Arch Linux mirrors. Discussion and announcements regarding mirroring will use this list.
+  arch-multilib:
+    description: Arch Linux Multilib (32bit libs on 64bit OSes)
+    display_name: Arch-multilib
+  arch-ports:
+    description: Discussion regarding the porting of Arch Linux to non-x86_64 architectures
+    display_name: Arch-ports
+    info: This list is primarily used to talk about porting Arch Linux to non-x86_64 platforms, such as PPC, ARM, i586, i686, etc.
+  arch-proaudio:
+    description: Discussion about real-time multimedia, including (semi-)pro audio and video
+    display_name: Arch-proaudio
+  arch-projects:
+    description: Arch Linux projects development discussion
+    display_name: Arch-projects
+    info: "Announcements, development discussion, patches and pull requests for the Arch Linux projects:<ul><li><a target=\"blank\" href=\"https://github.com/archlinux/archweb/\">archweb</a> (patches preferably on Github as pull requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/arch-release-promotion/\">arch-release-promotion</a> (patches only on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/dbscripts/\">dbscripts</a> (patches preferably on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/devtools/\">devtools</a> (patches preferably on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://github.com/archlinux/mkinitcpio/\">mkinitcpio</a> (patches preferably on Github as pull requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/namcap/\">namcap</a> (patches preferably on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/netctl/\">netctl</a> (patches preferably on the mailing list)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/pyalpm/\">pyalpm</a> (patches preferably on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/repod/\">repod</a> (patches only on GitLab as merge requests)</li><li><a target=\"blank\" href=\"https://gitlab.archlinux.org/archlinux/shim-signed/\">shim-signed</a> (contributions preferably on GitLab as merge requests)</li></ul>\r\nPlease begin the email subject with the name of a project in square brackets (e.g. <code>[devtools]</code>). If no project matches, use <code>[projects]</code>.\r\n\r\nNote: No user discussion!"
+  arch-releng:
+    description: Arch Linux Release Engineering
+    display_name: Arch-releng
+  arch-tu:
+    advertised: false
+    archive_policy: private
+    description: Trusted Users Discussion for Arch Linux
+    display_name: Arch-tu
+    info: This list is for trusted users discussion about Arch Linux.  This list is closed to the general public and only used by internal Arch Linux trusted users.
+    subscription_policy: confirm_then_moderate
+  arch-wiki-admins:
+    advertised: false
+    archive_policy: private
+    display_name: Arch-wiki-admins
+    subscription_policy: confirm_then_moderate
+  arch-women:
+    description: Mailing list for the Arch Women project
+    display_name: Arch-women
+    info: "<a href=\"https://archwomen.org/\">Arch Women</a> is an all inclusive organization of Arch Linux enthusiasts with a focus on helping more women become involved in the Arch Linux community and FOSS.\r\n\r\nMailing list graciously hosted by the Arch Linuxâ„¢ project."
+  staff:
+    advertised: false
+    archive_policy: private
+    description: Internal list that includes all Arch Linux staff members (devs, TUs, support staff)
+    display_name: Staff
+    subscription_policy: confirm_then_moderate
diff --git a/roles/mailman3/files/list_base_configuration.json b/roles/mailman3/files/list_base_configuration.json
new file mode 100644
index 000000000..e727e96da
--- /dev/null
+++ b/roles/mailman3/files/list_base_configuration.json
@@ -0,0 +1,77 @@
+{
+  "acceptable_aliases": [],
+  "accept_these_nonmembers": [],
+  "admin_immed_notify": true,
+  "admin_notify_mchanges": false,
+  "administrivia": true,
+  "advertised": true,
+  "allow_list_posts": true,
+  "anonymous_list": false,
+  "archive_policy": "public",
+  "archive_rendering_mode": "text",
+  "autorespond_owner": "none",
+  "autorespond_postings": "none",
+  "autorespond_requests": "none",
+  "autoresponse_grace_period": "90d",
+  "autoresponse_owner_text": "",
+  "autoresponse_postings_text": "",
+  "autoresponse_request_text": "",
+  "bounce_info_stale_after": "7d",
+  "bounce_notify_owner_on_bounce_increment": false,
+  "bounce_notify_owner_on_disable": true,
+  "bounce_notify_owner_on_removal": true,
+  "bounce_score_threshold": 5,
+  "bounce_you_are_disabled_warnings": 3,
+  "bounce_you_are_disabled_warnings_interval": "7d",
+  "collapse_alternatives": true,
+  "convert_html_to_plaintext": false,
+  "default_member_action": "defer",
+  "default_nonmember_action": "hold",
+  "description": "",
+  "digest_send_periodic": true,
+  "digest_size_threshold": 30,
+  "digest_volume_frequency": "monthly",
+  "digests_enabled": true,
+  "display_name": "",
+  "discard_these_nonmembers": [],
+  "dmarc_mitigate_action": "no_mitigation",
+  "dmarc_mitigate_unconditionally": false,
+  "dmarc_moderation_notice": "",
+  "dmarc_wrapped_message_text": "",
+  "emergency": false,
+  "filter_action": "discard",
+  "filter_content": false,
+  "filter_extensions": [],
+  "filter_types": [],
+  "first_strip_reply_to": false,
+  "forward_unrecognized_bounces_to": "administrators",
+  "gateway_to_mail": false,
+  "gateway_to_news": false,
+  "hold_these_nonmembers": [],
+  "include_rfc2369_headers": true,
+  "info": "",
+  "linked_newsgroup": "",
+  "max_message_size": 40,
+  "max_num_recipients": 10,
+  "max_days_to_hold": 0,
+  "member_roster_visibility": "moderators",
+  "moderator_password": null,
+  "newsgroup_moderation": "none",
+  "nntp_prefix_subject_too": true,
+  "pass_types": [],
+  "pass_extensions": [],
+  "personalize": "none",
+  "posting_pipeline": "default-posting-pipeline",
+  "preferred_language": "en",
+  "process_bounces": true,
+  "reject_these_nonmembers": [],
+  "reply_goes_to_list": "no_munging",
+  "reply_to_address": "",
+  "require_explicit_destination": true,
+  "respond_to_post_requests": true,
+  "send_goodbye_message": true,
+  "send_welcome_message": true,
+  "subject_prefix": "",
+  "subscription_policy": "confirm",
+  "unsubscription_policy": "confirm"
+}
diff --git a/roles/mailman3/tasks/main.yml b/roles/mailman3/tasks/main.yml
index bbe0d188a..fb5ad7b7d 100644
--- a/roles/mailman3/tasks/main.yml
+++ b/roles/mailman3/tasks/main.yml
@@ -68,3 +68,14 @@
     - mailman3-digests.timer
     - mailman3-notify.timer
     - uwsgi@mailman\x2dweb.service
+
+- name: update list configurations
+  uri:
+    url: http://localhost:8001/3.1/lists/{{ item }}.lists.archlinux.org/config
+    user: "{{ vault_mailman_admin_user }}"
+    password: "{{ vault_mailman_admin_pass }}"
+    method: PUT
+    body_format: json
+    status_code: 204
+    body: "{{ lookup('file', 'list_base_configuration.json') | from_json | combine(lists[item]) | to_json }}"
+  loop: "{{ lists.keys() }}"
-- 
GitLab