From 8ab1725145c040d0b73068d9e9f5387464b0ff43 Mon Sep 17 00:00:00 2001
From: s3lph <account-gitlab-ideynizv@kernelpanic.lol>
Date: Sat, 15 Feb 2025 21:29:09 +0100
Subject: [PATCH] chore: migrate to forgejo actions, major ansible-lint
 refactor

---
 .ansible-lint                                |  6 ++
 .forgejo/workflows/ansible-galaxy.yml        | 29 +++++++++
 .forgejo/workflows/ansible-lint.yml          | 17 ++++++
 .gitlab-ci.yml                               | 11 ----
 galaxy.yml                                   | 13 ++--
 meta/runtime.yml                             | 52 ++++++++++++++++
 roles/dovecot/defaults/main/sieve.yml        |  4 +-
 roles/dovecot/defaults/main/userdb.yml       |  2 +-
 roles/dovecot/defaults/main/virtual.yml      |  2 +-
 roles/dovecot/handlers/main.yml              |  4 +-
 roles/dovecot/tasks/config.yml               | 12 ++--
 roles/dovecot/tasks/install.yml              | 12 ++--
 roles/dovecot/tasks/main.yml                 |  6 +-
 roles/dovecot/tasks/virtual.yml              |  8 +--
 roles/easywks/defaults/main.yml              |  8 +--
 roles/easywks/handlers/main.yml              |  6 +-
 roles/easywks/tasks/config.yml               | 16 ++---
 roles/easywks/tasks/install.yml              | 15 ++---
 roles/easywks/tasks/main.yml                 |  4 +-
 roles/getaddrinfo/tasks/config.yml           |  2 +-
 roles/getaddrinfo/tasks/lookup.yml           |  6 +-
 roles/mailman/defaults/main.yml              | 14 ++---
 roles/mailman/handlers/main.yml              | 10 +--
 roles/mailman/tasks/bootstrap.yml            | 38 ++++++------
 roles/mailman/tasks/config.yml               | 32 +++++-----
 roles/mailman/tasks/install.yml              | 26 ++++----
 roles/mailman/tasks/main.yml                 | 10 +--
 roles/mailman/tasks/privacy.yml              |  8 +--
 roles/mailman/tasks/templates.yml            | 40 ++++++------
 roles/multischleuder/defaults/main.yml       |  4 +-
 roles/multischleuder/tasks/config.yml        |  6 +-
 roles/multischleuder/tasks/install.yml       | 10 +--
 roles/multischleuder/tasks/main.yml          |  4 +-
 roles/opendkim/defaults/main.yml             | 10 +--
 roles/opendkim/handlers/main.yml             |  4 +-
 roles/opendkim/tasks/config.yml              | 26 ++++----
 roles/opendkim/tasks/install.yml             |  8 +--
 roles/opendkim/tasks/main.yml                |  4 +-
 roles/postfix/defaults/main/global.yml       | 18 +++---
 roles/postfix/defaults/main/master.yml       | 62 +++++++++----------
 roles/postfix/defaults/main/policyd_spf.yml  |  4 +-
 roles/postfix/defaults/main/restrictions.yml |  2 +-
 roles/postfix/defaults/main/virtual.yml      |  4 +-
 roles/postfix/handlers/main.yml              |  9 +--
 roles/postfix/tasks/config.yml               | 16 ++---
 roles/postfix/tasks/install.yml              |  2 +-
 roles/postfix/tasks/main.yml                 |  8 +--
 roles/postfix/tasks/setup.yml                | 10 +--
 roles/postfix/tasks/tables.yml               | 14 ++---
 roles/postfixadmin/defaults/main.yml         | 40 ++++++------
 roles/postfixadmin/handlers/main.yml         |  4 +-
 roles/postfixadmin/tasks/bootstrap.yml       | 18 +++---
 roles/postfixadmin/tasks/config.yml          |  8 +--
 roles/postfixadmin/tasks/dovecot.yml         |  6 +-
 roles/postfixadmin/tasks/install.yml         | 28 ++++-----
 roles/postfixadmin/tasks/main.yml            | 12 ++--
 roles/postfixadmin/tasks/postfix.yml         | 10 +--
 roles/postfixadmin/tasks/setup.yml           | 10 +--
 roles/postsrsd/handlers/main.yml             |  2 +-
 roles/postsrsd/tasks/config.yml              |  6 +-
 roles/postsrsd/tasks/install.yml             |  6 +-
 roles/postsrsd/tasks/main.yml                |  4 +-
 roles/schleuder/defaults/main.yml            |  4 +-
 roles/schleuder/handlers/main.yml            |  8 +--
 roles/schleuder/tasks/cli_apitokens.yml      | 10 +--
 roles/schleuder/tasks/config.yml             | 12 ++--
 roles/schleuder/tasks/install.yml            |  2 +-
 roles/schleuder/tasks/install_schleuder.yml  | 18 +++---
 roles/schleuder/tasks/install_web.yml        | 64 ++++++++++----------
 roles/schleuder/tasks/main.yml               |  8 +--
 roles/spamassassin/defaults/main.yml         | 18 +++---
 roles/spamassassin/handlers/main.yml         |  6 +-
 roles/spamassassin/tasks/config.yml          | 24 ++++----
 roles/spamassassin/tasks/install.yml         | 18 +++---
 roles/spamassassin/tasks/main.yml            |  4 +-
 75 files changed, 542 insertions(+), 446 deletions(-)
 create mode 100644 .ansible-lint
 create mode 100644 .forgejo/workflows/ansible-galaxy.yml
 create mode 100644 .forgejo/workflows/ansible-lint.yml
 delete mode 100644 .gitlab-ci.yml
 create mode 100644 meta/runtime.yml

diff --git a/.ansible-lint b/.ansible-lint
new file mode 100644
index 0000000..098eff3
--- /dev/null
+++ b/.ansible-lint
@@ -0,0 +1,6 @@
+---
+
+skip_list:
+  - galaxy[no-changelog]
+  - galaxy[version-incorrect]
+  - var-naming[no-role-prefix]
diff --git a/.forgejo/workflows/ansible-galaxy.yml b/.forgejo/workflows/ansible-galaxy.yml
new file mode 100644
index 0000000..648f8c2
--- /dev/null
+++ b/.forgejo/workflows/ansible-galaxy.yml
@@ -0,0 +1,29 @@
+---
+
+name: Ansible Galaxy
+
+on:  # noqa yaml[truthy]
+  push:
+    tags:
+      - 'v*'
+
+jobs:
+  deploy:
+    runs-on: docker
+    steps:
+
+      - uses: actions/checkout@v4
+
+      - name: Set version in galaxy.yml
+        run: |
+          VERSION=${GITHUB_REF#refs/tags/v}
+          sed -re "s/^version:.*$/version: ${VERSION}/" -i galaxy.yml
+
+      - name: Upload collection to Ansible Galaxy
+        env:
+          GALAXY_API_KEY: ${{ secrets.GALAXY_API_KEY }}
+        run: |
+          apt update; apt install --yes python3-pip
+          pip3 install --break-system-packages ansible
+          ansible-galaxy collection build
+          ansible-galaxy collection publish --api-key=${GALAXY_API_KEY} s3lph-mailserver*tar.gz
diff --git a/.forgejo/workflows/ansible-lint.yml b/.forgejo/workflows/ansible-lint.yml
new file mode 100644
index 0000000..b42b17b
--- /dev/null
+++ b/.forgejo/workflows/ansible-lint.yml
@@ -0,0 +1,17 @@
+---
+
+name: Ansible Lint
+on: [push, pull_request]  # noqa yaml[truthy]
+
+jobs:
+  build:
+    runs-on: docker
+
+    steps:
+
+      - uses: actions/checkout@v4
+
+      - run: |
+          apt update; apt install --yes python3-pip
+          pip3 install --break-system-packages ansible-lint
+          ansible-lint
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index b00156a..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-
-image: docker.io/yokogawa/ansible-lint@sha256:2603476e7f8c111bdf4a186d84a077c156bc3d12d07cc1c632adc9949d4f0b9d
-
-stages:
-  - test
-
-lint:
-  stage: test
-  script:
-    - ansible-lint --force-color
diff --git a/galaxy.yml b/galaxy.yml
index 960fe3a..16387de 100644
--- a/galaxy.yml
+++ b/galaxy.yml
@@ -8,7 +8,7 @@ namespace: s3lph
 name: mailserver
 
 # The version of the collection. Must be compatible with semantic versioning
-version: '0.4.7'
+version: '0.5.0'
 
 # The path to the Markdown (.md) readme file. This path is relative to the root of the collection
 readme: README.md
@@ -16,7 +16,7 @@ readme: README.md
 # A list of the collection's content authors. Can be just the name or in the format 'Full Name <email> (url)
 # @nicks:irc/im.site#channel'
 authors:
-  - s3lph <1375407-s3lph@users.noreply.gitlab.com>
+  - s3lph <s3lph@kabelsalat.ch>
 
 
 ### OPTIONAL but strongly recommended
@@ -31,6 +31,7 @@ license:
 # A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character
 # requirements as 'namespace' and 'name'
 tags:
+  - application
   - email
   - mailserver
   - postfix
@@ -50,16 +51,16 @@ dependencies:
   community.crypto: '1.5.0'
 
 # The URL of the originating SCM repository
-repository: https://gitlab.com/s3lph/ansible-collection-mailserver
+repository: https://git.kabelsalat.ch/s3lph/ansible-collection-mailserver
 
 # The URL to any online docs
-documentation: https://gitlab.com/s3lph/ansible-collection-mailserver
+documentation: https://git.kabelsalat.ch/s3lph/ansible-collection-mailserver
 
 # The URL to the homepage of the collection/project
-homepage: https://gitlab.com/s3lph/ansible-collection-mailserver
+homepage: https://git.kabelsalat.ch/s3lph/ansible-collection-mailserver
 
 # The URL to the collection issue tracker
-issues: https://gitlab.com/s3lph/ansible-collection-mailserver/-/issues
+issues: https://git.kabelsalat.ch/s3lph/ansible-collection-mailserver/issues
 
 # A list of file glob-like patterns used to filter any files or directories that should not be included in the build
 # artifact. A pattern is matched from the relative path of the file or directory of the collection directory. This
diff --git a/meta/runtime.yml b/meta/runtime.yml
new file mode 100644
index 0000000..f3589f4
--- /dev/null
+++ b/meta/runtime.yml
@@ -0,0 +1,52 @@
+---
+# Collections must specify a minimum required ansible version to upload
+# to galaxy
+requires_ansible: '>=2.15.0'
+
+# Content that Ansible needs to load from another location or that has
+# been deprecated/removed
+# plugin_routing:
+#   action:
+#     redirected_plugin_name:
+#       redirect: ns.col.new_location
+#     deprecated_plugin_name:
+#       deprecation:
+#         removal_version: "4.0.0"
+#         warning_text: |
+#           See the porting guide on how to update your playbook to
+#           use ns.col.another_plugin instead.
+#     removed_plugin_name:
+#       tombstone:
+#         removal_version: "2.0.0"
+#         warning_text: |
+#           See the porting guide on how to update your playbook to
+#           use ns.col.another_plugin instead.
+#   become:
+#   cache:
+#   callback:
+#   cliconf:
+#   connection:
+#   doc_fragments:
+#   filter:
+#   httpapi:
+#   inventory:
+#   lookup:
+#   module_utils:
+#   modules:
+#   netconf:
+#   shell:
+#   strategy:
+#   terminal:
+#   test:
+#   vars:
+
+# Python import statements that Ansible needs to load from another location
+# import_redirection:
+#   ansible_collections.ns.col.plugins.module_utils.old_location:
+#     redirect: ansible_collections.ns.col.plugins.module_utils.new_location
+
+# Groups of actions/modules that take a common set of options
+# action_groups:
+#   group_name:
+#     - module1
+#     - module2
diff --git a/roles/dovecot/defaults/main/sieve.yml b/roles/dovecot/defaults/main/sieve.yml
index 13b8e2a..a50c39e 100644
--- a/roles/dovecot/defaults/main/sieve.yml
+++ b/roles/dovecot/defaults/main/sieve.yml
@@ -1,5 +1,5 @@
 ---
 
-dovecot_enable_pigeonhole: no
-dovecot_enable_pigeonhole_managesieve: no
+dovecot_enable_pigeonhole: false
+dovecot_enable_pigeonhole_managesieve: false
 dovecot_pigeonhole_sieve: "file:~/sieve;active=~/.dovecot.sieve"
diff --git a/roles/dovecot/defaults/main/userdb.yml b/roles/dovecot/defaults/main/userdb.yml
index 8dd4403..3a51e1c 100644
--- a/roles/dovecot/defaults/main/userdb.yml
+++ b/roles/dovecot/defaults/main/userdb.yml
@@ -6,6 +6,6 @@ dovecot_passdb_scheme: BLF-CRYPT
 dovecot_passdb_filename: /etc/dovecot/userdb/%d
 dovecot_passdb_user_format: "%u"
 
-dovecot_master_passdb_enable: no
+dovecot_master_passdb_enable: false
 dovecot_master_passdb: {}
 dovecot_master_user_separator: ";"
diff --git a/roles/dovecot/defaults/main/virtual.yml b/roles/dovecot/defaults/main/virtual.yml
index b51ce9e..2b9b2ff 100644
--- a/roles/dovecot/defaults/main/virtual.yml
+++ b/roles/dovecot/defaults/main/virtual.yml
@@ -2,6 +2,6 @@
 
 virtual_mail_uid: virtual
 virtual_mail_gid: virtual
-virutal_mail_home: /home/virtual
+virtual_mail_home: /home/virtual
 virtual_mail_user_home: /home/virtual/%d/%n
 virtual_mail_location: maildir:/home/virtual/%d/%n/Maildir
diff --git a/roles/dovecot/handlers/main.yml b/roles/dovecot/handlers/main.yml
index a7e4465..b00caf9 100644
--- a/roles/dovecot/handlers/main.yml
+++ b/roles/dovecot/handlers/main.yml
@@ -1,11 +1,11 @@
 ---
 
-- name: reload dovecot
+- name: Reload dovecot
   ansible.builtin.service:
     name: dovecot
     state: reloaded
 
-- name: restart dovecot
+- name: Restart dovecot
   ansible.builtin.service:
     name: dovecot
     state: restarted
diff --git a/roles/dovecot/tasks/config.yml b/roles/dovecot/tasks/config.yml
index 8549993..9622ec2 100644
--- a/roles/dovecot/tasks/config.yml
+++ b/roles/dovecot/tasks/config.yml
@@ -1,21 +1,21 @@
 ---
 
-- name: render /etc/dovecot/dovecot.conf
+- name: Render /etc/dovecot/dovecot.conf
   ansible.builtin.template:
     src: etc/dovecot/dovecot.conf.j2
     dest: /etc/dovecot/dovecot.conf
     owner: root
     group: dovecot
-    mode: 0640
-  notify: restart dovecot
+    mode: "0640"
+  notify: Restart dovecot
 
-- name: render /etc/dovecot/master.passwd
+- name: Render /etc/dovecot/master.passwd
   ansible.builtin.template:
     src: etc/dovecot/passwd-file.j2
     dest: /etc/dovecot/master.passwd
     owner: root
     group: dovecot
-    mode: 0640
+    mode: "0640"
   vars:
     passwd: "{{ dovecot_master_passdb | dict2items(key_name='username', value_name='password') }}"
-    passdb_only: yes
+    passdb_only: true
diff --git a/roles/dovecot/tasks/install.yml b/roles/dovecot/tasks/install.yml
index 6aba5d5..7b7d93e 100644
--- a/roles/dovecot/tasks/install.yml
+++ b/roles/dovecot/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install dovecot packages
+- name: Install dovecot packages
   ansible.builtin.apt:
     name: "{{ item }}"
     state: present
@@ -11,15 +11,15 @@
     - dovecot-sieve
     - dovecot-managesieved
 
-- name: add dovecot user to virtual mail group
+- name: Add dovecot user to virtual mail group
   ansible.builtin.user:
     name: dovecot
     groups: "{{ virtual_mail_gid }}"
-    append: yes
-  notify: restart dovecot
+    append: true
+  notify: Restart dovecot
 
-- name: start and enable dovecot
+- name: Start and enable dovecot
   ansible.builtin.service:
     name: dovecot
     state: started
-    enabled: yes
+    enabled: true
diff --git a/roles/dovecot/tasks/main.yml b/roles/dovecot/tasks/main.yml
index 25de52f..26f70f4 100644
--- a/roles/dovecot/tasks/main.yml
+++ b/roles/dovecot/tasks/main.yml
@@ -1,18 +1,18 @@
 ---
 
-- name: create virtual user/group
+- name: Create virtual user/group
   ansible.builtin.import_tasks: virtual.yml
   tags:
     - "role::dovecot"
     - "role::dovecot:virtual"
 
-- name: install dovecot
+- name: Install dovecot
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::dovecot"
     - "role::dovecot:install"
 
-- name: configure dovecot
+- name: Configure dovecot
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::dovecot"
diff --git a/roles/dovecot/tasks/virtual.yml b/roles/dovecot/tasks/virtual.yml
index bda1a12..84d50b1 100644
--- a/roles/dovecot/tasks/virtual.yml
+++ b/roles/dovecot/tasks/virtual.yml
@@ -1,16 +1,16 @@
 ---
 
-- name: create virtual mail group
+- name: Create virtual mail group
   ansible.builtin.group:
     name: "{{ virtual_mail_gid }}"
-    system: yes
+    system: true
 
-- name: create virtual mail user
+- name: Create virtual mail user
   ansible.builtin.user:
     name: "{{ virtual_mail_uid }}"
     group: "{{ virtual_mail_gid }}"
     home: "{{ virtual_mail_home }}"
     password: '!'
     shell: /usr/sbin/nologin
-    system: yes
+    system: true
     comment: Virtual Mail User
diff --git a/roles/easywks/defaults/main.yml b/roles/easywks/defaults/main.yml
index 3363553..3984687 100644
--- a/roles/easywks/defaults/main.yml
+++ b/roles/easywks/defaults/main.yml
@@ -1,8 +1,8 @@
 ---
 
-easywks_download: yes
+easywks_download: true
 
 easywks_config: ""
-easywks_service_http_enabled: yes
-easywks_service_lmtp_enabled: yes
-easywks_service_dnsd_enabled: yes
+easywks_service_http_enabled: true
+easywks_service_lmtp_enabled: true
+easywks_service_dnsd_enabled: true
diff --git a/roles/easywks/handlers/main.yml b/roles/easywks/handlers/main.yml
index a6be791..fa5d0d2 100644
--- a/roles/easywks/handlers/main.yml
+++ b/roles/easywks/handlers/main.yml
@@ -1,16 +1,16 @@
 ---
 
-- name: restart easywks-http
+- name: Restart easywks-http
   ansible.builtin.service:
     name: easywks-http
     state: restarted
 
-- name: restart easywks-lmtp
+- name: Restart easywks-lmtp
   ansible.builtin.service:
     name: easywks-lmtp
     state: restarted
 
-- name: restart easywks-dnsd
+- name: Restart easywks-dnsd
   ansible.builtin.service:
     name: easywks-dnsd
     state: restarted
diff --git a/roles/easywks/tasks/config.yml b/roles/easywks/tasks/config.yml
index 2add4ca..d4ed950 100644
--- a/roles/easywks/tasks/config.yml
+++ b/roles/easywks/tasks/config.yml
@@ -1,30 +1,30 @@
 ---
 
-- name: render easywks config file
+- name: Render easywks config file
   ansible.builtin.template:
     src: etc/easywks.yml.j2
     dest: /etc/easywks.yml
     owner: root
     group: root
-    mode: 0644
+    mode: "0644"
   notify:
-    - restart easywks-http
-    - restart easywks-lmtp
-    - restart easywks-dnsd
+    - Restart easywks-http
+    - Restart easywks-lmtp
+    - Restart easywks-dnsd
 
-- name: start and enable easywks-http
+- name: Start and enable easywks-http
   ansible.builtin.service:
     name: easywks-http
     state: started
     enabled: "{{ easywks_service_http_enabled }}"
 
-- name: start and enable easywks-lmtp
+- name: Start and enable easywks-lmtp
   ansible.builtin.service:
     name: easywks-lmtp
     state: started
     enabled: "{{ easywks_service_lmtp_enabled }}"
 
-- name: start and enable easywks-dnsd
+- name: Start and enable easywks-dnsd
   ansible.builtin.service:
     name: easywks-dnsd
     state: started
diff --git a/roles/easywks/tasks/install.yml b/roles/easywks/tasks/install.yml
index 4556a26..cb96250 100644
--- a/roles/easywks/tasks/install.yml
+++ b/roles/easywks/tasks/install.yml
@@ -1,23 +1,24 @@
 ---
 
-- name: install easywks from system package sources
+- name: Install easywks from system package sources
   ansible.builtin.apt:
     name: easywks
   notify:
-    - restart easywks-http
-    - restart easywks-lmtp
+    - Restart easywks-http
+    - Restart easywks-lmtp
+    - Restart easywks-dnsd
   when: "not easywks_download"
 
-- name: get easywks package url
+- name: Get easywks package url
   ansible.builtin.uri:
     # https://gitlab.com/s3lph/easywks
     url: "https://gitlab.com/api/v4/projects/29907182/releases"
-    return_content: yes
+    return_content: true
   register: "register_easywks_gitlab_releases"
-  changed_when: no
+  changed_when: false
   when: "easywks_download"
 
-- name: install easywks from upstream release
+- name: Install easywks from upstream release
   ansible.builtin.apt:
     deb: "{{ url }}"
   vars:
diff --git a/roles/easywks/tasks/main.yml b/roles/easywks/tasks/main.yml
index a423332..c153abe 100644
--- a/roles/easywks/tasks/main.yml
+++ b/roles/easywks/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install easywks
+- name: Install easywks
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::easywks"
     - "role::easywks:install"
 
-- name: configure easywks
+- name: Configure easywks
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::easywks"
diff --git a/roles/getaddrinfo/tasks/config.yml b/roles/getaddrinfo/tasks/config.yml
index f1ea001..c26556a 100644
--- a/roles/getaddrinfo/tasks/config.yml
+++ b/roles/getaddrinfo/tasks/config.yml
@@ -6,4 +6,4 @@
     dest: /etc/gai.conf
     owner: root
     group: root
-    mode: 0644
+    mode: "0644"
diff --git a/roles/getaddrinfo/tasks/lookup.yml b/roles/getaddrinfo/tasks/lookup.yml
index 0a893f4..1fd0d17 100644
--- a/roles/getaddrinfo/tasks/lookup.yml
+++ b/roles/getaddrinfo/tasks/lookup.yml
@@ -4,18 +4,18 @@
   ansible.builtin.uri:
     url: https://rdap.arin.net/registry/entity/GOGL
   register: gai_register_gogl_rdap
-  
+
 - name: Initialize precedence list
   ansible.builtin.set_fact:
     getaddrinfo_precedence: "{{ getaddrinfo_precedence | default({}) }}"
 
 - name: Add all Google v4 nets to precedence list
   ansible.builtin.debug:
-    msg: "{%- set _ = getaddrinfo_precedence[cidr] = 100 -%}{{- cidr -}}"
+    msg: "{%- set getaddrinfo_precedence = getaddrinfo_precedence + {cidr: 100} -%}{{- cidr -}}"
   vars:
     cidr: "{{ item.v4prefix }}/{{ item.length }}"
   loop: "{{ gai_register_gogl_rdap.json.networks | selectattr('ipVersion', 'eq', 'v4') | map(attribute='cidr0_cidrs') | flatten }}"
-      
+
 - name: Add all Google v4 nets to precedence list
   ansible.builtin.debug:
     var: getaddrinfo_precedence
diff --git a/roles/mailman/defaults/main.yml b/roles/mailman/defaults/main.yml
index 6787c04..d582618 100644
--- a/roles/mailman/defaults/main.yml
+++ b/roles/mailman/defaults/main.yml
@@ -59,11 +59,11 @@ mailman_mta_smtp_pass: ""
 mailman_mta_lmtp_host: 127.0.0.1
 mailman_mta_lmtp_port: 8024
 mailman_mta_configuration: python:mailman.config.postfix
-mailman_mta_remove_dkim_headers: yes
+mailman_mta_remove_dkim_headers: true
 mailman_mta_additional_config: ""
 
 
-mailman_hyperkitty_enabled: yes
+mailman_hyperkitty_enabled: true
 mailman_hyperkitty_localhost_base_url: http://localhost/hyperkitty/
 mailman_hyperkitty_api_acl:
   - "127.0.0.1"
@@ -84,11 +84,11 @@ mailman_web_auth_socialaccounts: []
 mailman_web_language: en-us
 mailman_web_timezone: UTC
 mailman_web_emailname: "{{ mailman_sitename }}"
-mailman_web_compress_online: yes
+mailman_web_compress_online: true
 mailman_web_base_url: http://localhost/
 mailman_web_static_url: /static/
-mailman_web_disable_gravatar: yes
-mailman_web_disable_web_posting: yes
+mailman_web_disable_gravatar: true
+mailman_web_disable_web_posting: true
 # django.db.backends.sqlite3
 # django.db.backends.mysql
 # django.db.backends.postgresql_psycopg2
@@ -116,8 +116,8 @@ mailman_mariadb_bootstrap_login_user: root
 mailman_mariadb_bootstrap_login_password: ''
 mailman_superuser_name: root
 
-mailman_web_override_templates: no
+mailman_web_override_templates: false
 mailman_web_override_templates_path: "{{ playbook_dir }}/templates/override"
 mailman_web_override_static_path: "{{ playbook_dir }}/static/override"
 mailman_web_hyperkitty_cleanup_cron: '0 * * * *'
-mailman_web_privacy_enhancements: no
+mailman_web_privacy_enhancements: false
diff --git a/roles/mailman/handlers/main.yml b/roles/mailman/handlers/main.yml
index 61bb1fa..99d800b 100644
--- a/roles/mailman/handlers/main.yml
+++ b/roles/mailman/handlers/main.yml
@@ -1,20 +1,20 @@
 ---
 
-- name: systemctl daemon-reload
+- name: Systemctl daemon-reload
   ansible.builtin.systemd:
-    daemon_reload: yes
+    daemon_reload: true
 
-- name: restart mailman3
+- name: Restart mailman3
   ansible.builtin.service:
     name: mailman3
     state: restarted
 
-- name: restart mailman3-web
+- name: Restart mailman3-web
   ansible.builtin.service:
     name: mailman3-web
     state: restarted
 
-- name: reload postfix
+- name: Reload postfix
   ansible.builtin.service:
     name: postfix
     state: reloaded
diff --git a/roles/mailman/tasks/bootstrap.yml b/roles/mailman/tasks/bootstrap.yml
index 192a4b8..0b3a0be 100644
--- a/roles/mailman/tasks/bootstrap.yml
+++ b/roles/mailman/tasks/bootstrap.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: create mariadb mailman database
+- name: Create mariadb mailman database
   community.mysql.mysql_db:
     name: '{{ mailman_mariadb_database }}'
     login_host: '{{ mailman_mariadb_bootstrap_host }}'
@@ -8,9 +8,9 @@
     login_unix_socket: '{{ mailman_mariadb_bootstrap_socket }}'
     login_user: '{{ mailman_mariadb_bootstrap_login_user }}'
     login_password: '{{ mailman_mariadb_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create mariadb mailman-web database
+- name: Create mariadb mailman-web database
   community.mysql.mysql_db:
     name: '{{ mailman_web_database_name }}'
     login_host: '{{ mailman_mariadb_bootstrap_host }}'
@@ -18,9 +18,9 @@
     login_unix_socket: '{{ mailman_mariadb_bootstrap_socket }}'
     login_user: '{{ mailman_mariadb_bootstrap_login_user }}'
     login_password: '{{ mailman_mariadb_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create mailman database user
+- name: Create mailman database user
   community.mysql.mysql_user:
     name: "{{ mailman_mariadb_user }}"
     host: "{{ mailman_mariadb_user_host }}"
@@ -31,9 +31,9 @@
     login_unix_socket: '{{ mailman_mariadb_bootstrap_socket }}'
     login_user: '{{ mailman_mariadb_bootstrap_login_user }}'
     login_password: '{{ mailman_mariadb_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create mailman-web database user
+- name: Create mailman-web database user
   community.mysql.mysql_user:
     name: "{{ mailman_web_database_user }}"
     host: "{{ mailman_web_database_user_host }}"
@@ -44,9 +44,9 @@
     login_unix_socket: '{{ mailman_mariadb_bootstrap_socket }}'
     login_user: '{{ mailman_mariadb_bootstrap_login_user }}'
     login_password: '{{ mailman_mariadb_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create mailman-postfix database user
+- name: Create mailman-postfix database user
   community.mysql.mysql_user:
     name: "{{ mailman_database_postfix_user }}"
     host: "{{ mailman_database_postfix_user_host }}"
@@ -57,26 +57,26 @@
     login_unix_socket: '{{ mailman_mariadb_bootstrap_socket }}'
     login_user: '{{ mailman_mariadb_bootstrap_login_user }}'
     login_password: '{{ mailman_mariadb_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: apply mailman-web migrations
+- name: Apply mailman-web migrations
   become_user: www-data
-  become_method: sudo
+  become: true
   ansible.builtin.command: /usr/share/mailman3-web/manage.py migrate
-  changed_when: yes
+  changed_when: true
 
-- name: change django default site
+- name: Change django default site
   become_user: www-data
-  become_method: sudo
+  become: true
   ansible.builtin.command: >-
     /usr/share/mailman3-web/manage.py set_default_site
     --name {{ mailman_sitename }}
     --domain {{ mailman_sitename }}
-  changed_when: yes
+  changed_when: true
 
-- name: create mailman-web superuser
+- name: Create mailman-web superuser
   become_user: www-data
-  become_method: sudo
+  become: true
   ansible.builtin.command: /usr/share/mailman3-web/manage.py shell
   args:
     stdin: |
@@ -86,4 +86,4 @@
           '{{ mailman_superuser_email }}',
           '{{ mailman_superuser_password }}'
       )
-  changed_when: yes
+  changed_when: true
diff --git a/roles/mailman/tasks/config.yml b/roles/mailman/tasks/config.yml
index a56476e..1a5ba5b 100644
--- a/roles/mailman/tasks/config.yml
+++ b/roles/mailman/tasks/config.yml
@@ -1,53 +1,53 @@
 ---
 
-- name: render /etc/mailman3/mailman.cfg
+- name: Render /etc/mailman3/mailman.cfg
   ansible.builtin.template:
     src: etc/mailman3/mailman.cfg.j2
     dest: /etc/mailman3/mailman.cfg
     owner: root
     group: list
-    mode: 0640
-  notify: restart mailman3
+    mode: "0640"
+  notify: Restart mailman3
 
-- name: render /etc/mailman3/mailman-hyperkitty.cfg
+- name: Render /etc/mailman3/mailman-hyperkitty.cfg
   ansible.builtin.template:
     src: etc/mailman3/mailman-hyperkitty.cfg.j2
     dest: /etc/mailman3/mailman-hyperkitty.cfg
     owner: root
     group: list
-    mode: 0640
-  notify: restart mailman3
+    mode: "0640"
+  notify: Restart mailman3
 
-- name: render /etc/mailman3/mailman-web.py
+- name: Render /etc/mailman3/mailman-web.py
   ansible.builtin.template:
     src: etc/mailman3/mailman-web.py.j2
     dest: /etc/mailman3/mailman-web.py
     owner: root
     group: www-data
-    mode: 0640
-  notify: restart mailman3-web
+    mode: "0640"
+  notify: Restart mailman3-web
 
-- name: create /etc/postfix/sql directory
+- name: Create /etc/postfix/sql directory
   ansible.builtin.file:
     path: /etc/postfix/sql
     state: directory
     owner: root
     group: root
-    mode: 0755
+    mode: "0755"
 
-- name: render postfix sql config file
+- name: Render postfix sql config file
   ansible.builtin.template:
     src: etc/postfix/sql/mailman_mysql_virtual_domains.cf.j2
     dest: /etc/postfix/sql/mailman_mysql_virtual_domains.cf
     owner: root
     group: postfix
-    mode: 0640
-  notify: reload postfix
+    mode: "0640"
+  notify: Reload postfix
 
   # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1037358
-- name: disable gatenews cronjob
+- name: Disable gatenews cronjob
   ansible.builtin.lineinfile:
-    file: /etc/cron.d/mailman3
+    path: /etc/cron.d/mailman3
     regexp: '^#(?/*/usr/bin/mailman gatenews.*)$'
     line: '#\1'
   when:
diff --git a/roles/mailman/tasks/install.yml b/roles/mailman/tasks/install.yml
index dbf742f..94dddf2 100644
--- a/roles/mailman/tasks/install.yml
+++ b/roles/mailman/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install packages
+- name: Install packages
   ansible.builtin.apt:
     name: "{{ item }}"
     state: present
@@ -12,47 +12,47 @@
     - mariadb-client
     - acl
 
-- name: fix permissions on /var/lib/mailman3/data
+- name: Fix permissions on /var/lib/mailman3/data
   ansible.builtin.file:
     path: /var/lib/mailman3/data
     state: directory
     owner: list
     group: list
-    mode: 0755
+    mode: "0755"
 
-- name: create mailman3 servive override directory
+- name: Create mailman3 servive override directory
   ansible.builtin.file:
     path: /etc/systemd/system/mailman3.service.d
     state: directory
     owner: root
     group: root
-    mode: 0755
+    mode: "0755"
 
-- name: override mailman3 service dependencies
+- name: Override mailman3 service dependencies
   ansible.builtin.template:
     src: etc/systemd/system/mailman3.service.d/override.conf.j2
     dest: /etc/systemd/system/mailman3.service.d/override.conf
     owner: root
     group: root
-    mode: 0644
-  notify: systemctl daemon-reload
+    mode: "0644"
+  notify: Systemctl daemon-reload
   when: mailman3_service_dependencies is defined
 
-- name: remove mailman3 service dependencies override
+- name: Remove mailman3 service dependencies override
   ansible.builtin.file:
     path: /etc/systemd/system/mailman3.service.d/override.conf
     state: absent
-  notify: systemctl daemon-reload
+  notify: Systemctl daemon-reload
   when: mailman3_service_dependencies is not defined
 
-- name: systemctl daemon-reload
+- name: Systemctl daemon-reload
   ansible.builtin.meta: flush_handlers
 
-- name: start and enable mailman
+- name: Start and enable mailman
   ansible.builtin.service:
     name: "{{ item }}"
     state: started
-    enabled: yes
+    enabled: true
   loop:
     - mailman3
     - mailman3-web
diff --git a/roles/mailman/tasks/main.yml b/roles/mailman/tasks/main.yml
index 702636a..e4b84a3 100644
--- a/roles/mailman/tasks/main.yml
+++ b/roles/mailman/tasks/main.yml
@@ -1,30 +1,30 @@
 ---
 
-- name: install mailman3
+- name: Install mailman3
   ansible.builtin.import_tasks: install.yml  # todo: wtf dependencies
   tags:
     - "role::mailman"
     - "role::mailman:install"
 
-- name: configure mailman3
+- name: Configure mailman3
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::mailman"
     - "role::mailman:config"
 
-- name: override mailman3-web django templates
+- name: Override mailman3-web django templates
   ansible.builtin.import_tasks: templates.yml
   tags:
     - "role::mailman"
     - "role::mailman:templates"
 
-- name: create mailman3 databases and admin users
+- name: Create mailman3 databases and admin users
   ansible.builtin.import_tasks: bootstrap.yml
   tags:
     - "role::mailman:bootstrap"
     - "never"
 
-- name: create hyperkitty cleanup cronjob
+- name: Create hyperkitty cleanup cronjob
   ansible.builtin.import_tasks: privacy.yml
   tags:
     - "role::mailman:privacy"
diff --git a/roles/mailman/tasks/privacy.yml b/roles/mailman/tasks/privacy.yml
index f31cb12..6403baf 100644
--- a/roles/mailman/tasks/privacy.yml
+++ b/roles/mailman/tasks/privacy.yml
@@ -1,19 +1,19 @@
 ---
 
-- name: render mysql client config for cleanup cronjob
+- name: Render mysql client config for cleanup cronjob
   ansible.builtin.template:
     src: root/.mysql.hyperkitty-cleanup.cnf.j2
     dest: /root/.mysql.hyperkitty-cleanup.cnf
     owner: root
     group: root
-    mode: 0600
+    mode: "0600"
   when: mailman_web_privacy_enhancements
 
-- name: render privacy-enhancing hyperkitty cleanup cronjob
+- name: Render privacy-enhancing hyperkitty cleanup cronjob
   ansible.builtin.template:
     src: etc/cron.d/hyperkitty-cleanup.j2
     dest: /etc/cron.d/hyperkitty-cleanup
     owner: root
     group: root
-    mode: 0640
+    mode: "0640"
   when: mailman_web_privacy_enhancements
diff --git a/roles/mailman/tasks/templates.yml b/roles/mailman/tasks/templates.yml
index 0ff4ea3..a6be2f6 100644
--- a/roles/mailman/tasks/templates.yml
+++ b/roles/mailman/tasks/templates.yml
@@ -1,59 +1,59 @@
 ---
 
-- name: create /var/lib/mailman3/web/templates
+- name: Create /var/lib/mailman3/web/templates
   ansible.builtin.file:
     path: /var/lib/mailman3/web/templates
     state: directory
     owner: www-data
     group: www-data
-    mode: 0755
+    mode: "0755"
 
-- name: create template override directories
+- name: Create template override directories
   ansible.builtin.file:
     path: "/var/lib/mailman3/web/templates/{{ item.path }}"
     owner: www-data
     group: www-data
-    mode: 0755
+    mode: "0755"
   when: "item.state == 'directory'"
-  with_filetree: "{{ mailman_web_override_templates_path }}"
-  notify: restart mailman3-web
+  with_community.general.filetree: "{{ mailman_web_override_templates_path }}"
+  notify: Restart mailman3-web
 
-- name: render template overrides
+- name: Render template overrides
   ansible.builtin.copy:
     src: "{{ item.root }}/{{ item.path }}"
     dest: "/var/lib/mailman3/web/templates/{{ item.path }}"
     owner: www-data
     group: www-data
-    mode: 0644
+    mode: "0644"
   when: "item.state != 'directory'"
-  with_filetree: "{{ mailman_web_override_templates_path }}"
-  notify: restart mailman3-web
+  with_community.general.filetree: "{{ mailman_web_override_templates_path }}"
+  notify: Restart mailman3-web
 
-- name: create /var/lib/mailman3/web/static
+- name: Create /var/lib/mailman3/web/static
   ansible.builtin.file:
     path: /var/lib/mailman3/web/static
     state: directory
     owner: www-data
     group: www-data
-    mode: 0755
+    mode: "0755"
 
-- name: create static override directories
+- name: Create static override directories
   ansible.builtin.file:
     path: "/var/lib/mailman3/web/static/{{ item.path }}"
     owner: www-data
     group: www-data
-    mode: 0755
+    mode: "0755"
   when: "item.state == 'directory'"
-  with_filetree: "{{ mailman_web_override_static_path }}"
-  notify: restart mailman3-web
+  with_community.general.filetree: "{{ mailman_web_override_static_path }}"
+  notify: Restart mailman3-web
 
-- name: render static overrides
+- name: Render static overrides
   ansible.builtin.copy:
     src: "{{ item.root }}/{{ item.path }}"
     dest: "/var/lib/mailman3/web/static/{{ item.path }}"
     owner: www-data
     group: www-data
-    mode: 0644
+    mode: "0644"
   when: "item.state != 'directory'"
-  with_filetree: "{{ mailman_web_override_static_path }}"
-  notify: restart mailman3-web
+  with_community.general.filetree: "{{ mailman_web_override_static_path }}"
+  notify: Restart mailman3-web
diff --git a/roles/multischleuder/defaults/main.yml b/roles/multischleuder/defaults/main.yml
index 4db2017..bf3fea8 100644
--- a/roles/multischleuder/defaults/main.yml
+++ b/roles/multischleuder/defaults/main.yml
@@ -1,7 +1,7 @@
 ---
 
-multischleuder_download: yes
-multischleuder_service_enabled: yes
+multischleuder_download: true
+multischleuder_service_enabled: true
 
 multischleuder_config: |
 
diff --git a/roles/multischleuder/tasks/config.yml b/roles/multischleuder/tasks/config.yml
index 46af695..ee31ddc 100644
--- a/roles/multischleuder/tasks/config.yml
+++ b/roles/multischleuder/tasks/config.yml
@@ -1,14 +1,14 @@
 ---
 
-- name: render easywks config file
+- name: Render easywks config file
   ansible.builtin.template:
     src: etc/multischleuder/multischleuder.yml.j2
     dest: /etc/multischleuder/multischleuder.yml
     owner: root
     group: root
-    mode: 0644
+    mode: "0644"
 
-- name: start and enable multischleuder.timer
+- name: Start and enable multischleuder.timer
   ansible.builtin.service:
     name: multischleuder.timer
     state: started
diff --git a/roles/multischleuder/tasks/install.yml b/roles/multischleuder/tasks/install.yml
index 549a9cd..f7a76fc 100644
--- a/roles/multischleuder/tasks/install.yml
+++ b/roles/multischleuder/tasks/install.yml
@@ -1,20 +1,20 @@
 ---
 
-- name: install multischleuder from system package sources
+- name: Install multischleuder from system package sources
   ansible.builtin.apt:
     name: multischleuder
   when: "not multischleuder_download"
 
-- name: get multischleuder package url
+- name: Get multischleuder package url
   ansible.builtin.uri:
     # https://gitlab.com/s3lph/multischleuder
     url: "https://gitlab.com/api/v4/projects/35309982/releases"
-    return_content: yes
+    return_content: true
   register: "register_multischleuder_gitlab_releases"
-  changed_when: no
+  changed_when: false
   when: "multischleuder_download"
 
-- name: install multischleuder from upstream release
+- name: Install multischleuder from upstream release
   ansible.builtin.apt:
     deb: "{{ url }}"
   vars:
diff --git a/roles/multischleuder/tasks/main.yml b/roles/multischleuder/tasks/main.yml
index 7f3347a..174a807 100644
--- a/roles/multischleuder/tasks/main.yml
+++ b/roles/multischleuder/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install multischleuder
+- name: Install multischleuder
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::multischleuder"
     - "role::multischleuder:install"
 
-- name: configure multischleuder
+- name: Configure multischleuder
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::multischleuder"
diff --git a/roles/opendkim/defaults/main.yml b/roles/opendkim/defaults/main.yml
index eda008e..bbf5dfd 100644
--- a/roles/opendkim/defaults/main.yml
+++ b/roles/opendkim/defaults/main.yml
@@ -1,14 +1,14 @@
 ---
 
-opendkim_testmode: no
+opendkim_testmode: false
 
-opendkim_syslog: yes
-opendkim_syslog_success: yes
-opendkim_log_why: no
+opendkim_syslog: true
+opendkim_syslog_success: true
+opendkim_log_why: false
 
 opendkim_canonicalization: relaxed/relaxed
 opendkim_mode: sv
-opendkim_subdomains: no
+opendkim_subdomains: false
 opendkim_oversign_headers: From
 
 opendkim_selector: mail
diff --git a/roles/opendkim/handlers/main.yml b/roles/opendkim/handlers/main.yml
index e48a5fe..49d759d 100644
--- a/roles/opendkim/handlers/main.yml
+++ b/roles/opendkim/handlers/main.yml
@@ -1,11 +1,11 @@
 ---
 
-- name: restart opendkim
+- name: Restart opendkim
   ansible.builtin.service:
     name: opendkim
     state: restarted
 
-- name: restart postfix
+- name: Restart postfix
   ansible.builtin.service:
     name: postfix
     state: restarted
diff --git a/roles/opendkim/tasks/config.yml b/roles/opendkim/tasks/config.yml
index e36e071..5906a44 100644
--- a/roles/opendkim/tasks/config.yml
+++ b/roles/opendkim/tasks/config.yml
@@ -1,44 +1,44 @@
 ---
 
-- name: create /etc/dkimkeys diretory
+- name: Create /etc/dkimkeys diretory
   ansible.builtin.file:
     path: /etc/dkimkeys
     state: directory
     owner: opendkim
     group: opendkim
-    mode: 0700
+    mode: "0700"
 
-- name: create dkim key
+- name: Create dkim key
   ansible.builtin.command: >-
     /usr/sbin/opendkim-genkey
     --directory=/etc/dkimkeys
     --selector={{ opendkim_selector }}
   args:
     creates: "/etc/dkimkeys/{{ opendkim_selector }}.private"
-  become: yes
+  become: true
   become_user: opendkim
-  notify: restart opendkim
+  notify: Restart opendkim
 
-- name: create postfix spool socket directory
+- name: Create postfix spool socket directory
   ansible.builtin.file:
     path: /var/spool/postfix/opendkim
     state: directory
     owner: opendkim
     group: postfix
-    mode: 0770
-  notify: restart opendkim
+    mode: "0770"
+  notify: Restart opendkim
 
-- name: render /etc/opendkim.conf
+- name: Render /etc/opendkim.conf
   ansible.builtin.template:
     src: etc/opendkim.conf.j2
     dest: /etc/opendkim.conf
     owner: root
     group: root
-    mode: 0644
-  notify: restart opendkim
+    mode: "0644"
+  notify: Restart opendkim
 
-- name: start and enable opendkim
+- name: Start and enable opendkim
   ansible.builtin.service:
     name: opendkim
     state: started
-    enabled: yes
+    enabled: true
diff --git a/roles/opendkim/tasks/install.yml b/roles/opendkim/tasks/install.yml
index 19e6137..53787e1 100644
--- a/roles/opendkim/tasks/install.yml
+++ b/roles/opendkim/tasks/install.yml
@@ -1,14 +1,14 @@
 ---
 
-- name: install opendkim
+- name: Install opendkim
   ansible.builtin.package:
     name:
       - opendkim
       - opendkim-tools
 
-- name: add postfix to opendkim group
+- name: Add postfix to opendkim group
   ansible.builtin.user:
     name: postfix
     groups: opendkim
-    append: yes
-  notify: restart postfix
+    append: true
+  notify: Restart postfix
diff --git a/roles/opendkim/tasks/main.yml b/roles/opendkim/tasks/main.yml
index 44a5c4c..e657583 100644
--- a/roles/opendkim/tasks/main.yml
+++ b/roles/opendkim/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install opendkim
+- name: Install opendkim
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::opendkim"
     - "role::opendkim:install"
 
-- name: configure opendkim
+- name: Configure opendkim
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::opendkim"
diff --git a/roles/postfix/defaults/main/global.yml b/roles/postfix/defaults/main/global.yml
index 0338245..f6695d3 100644
--- a/roles/postfix/defaults/main/global.yml
+++ b/roles/postfix/defaults/main/global.yml
@@ -16,15 +16,15 @@ postfix_mydestination:
 postfix_additional_transport_maps: []
 postfix_additional_relay_domains: []
 
-postfix_postfixadmin_enable: no
-postfix_mailman_enable: no
-postfix_schleuder_enable: no
-postfix_policyd_spf_enable: no
-postfix_srsd_enable: no
-postfix_srsd_nodefault: no
-postfix_spamassassin_enable: no
-postfix_easywks_pipe_transport: no
-postfix_opendkim_enable: no
+postfix_postfixadmin_enable: false
+postfix_mailman_enable: false
+postfix_schleuder_enable: false
+postfix_policyd_spf_enable: false
+postfix_srsd_enable: false
+postfix_srsd_nodefault: false
+postfix_spamassassin_enable: false
+postfix_easywks_pipe_transport: false
+postfix_opendkim_enable: false
 postfix_srsd_forward_lookup: "tcp:localhost:10001"
 postfix_srsd_reverse_lookup: "tcp:localhost:10002"
 
diff --git a/roles/postfix/defaults/main/master.yml b/roles/postfix/defaults/main/master.yml
index 02c255b..482e6bc 100644
--- a/roles/postfix/defaults/main/master.yml
+++ b/roles/postfix/defaults/main/master.yml
@@ -7,7 +7,7 @@ postfix_default_master_processes:
   smtp:
     name: smtp
     type: inet
-    private: no
+    private: false
     command: smtpd
     options:
       - '-o syslog_name=postfix/smtp'
@@ -17,7 +17,7 @@ postfix_default_master_processes:
   submission:
     name: submission
     type: inet
-    private: no
+    private: false
     command: smtpd
     options:
       - '-o syslog_name=postfix/submission'
@@ -32,81 +32,81 @@ postfix_default_master_processes:
   pickup:
     name: pickup
     type: unix
-    private: no
-    chroot: no
+    private: false
+    chroot: false
     wakeup: 60
     maxproc: 1
 
   cleanup:
     name: cleanup
     type: unix
-    private: no
+    private: false
     maxproc: 0
 
   qmgr:
     name: qmgr
     type: unix
-    private: no
-    chroot: no
+    private: false
+    chroot: false
     wakeup: 300
     maxproc: 1
 
   tlsmgr:
     name: tlsmgr
     type: unix
-    chroot: no
+    chroot: false
     wakeup: '1000?'
     maxproc: 1
 
   rewrite:
     name: rewrite
     type: unix
-    chroot: no
+    chroot: false
     command: trivial-rewrite
 
   bounce:
     name: bounce
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 0
 
   defer:
     name: defer
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 0
     command: bounce
 
   trace:
     name: trace
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 0
     command: bounce
 
   verify:
     name: verify
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 1
 
   flush:
     name: flush
     type: unix
-    private: no
-    chroot: no
+    private: false
+    chroot: false
     wakeup: '1000?'
     maxproc: 0
 
   proxymap:
     name: proxymap
     type: unix
-    chroot: no
+    chroot: false
 
   proxywrite:
     name: proxywrite
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 1
     command: proxymap
 
@@ -125,59 +125,59 @@ postfix_default_master_processes:
   showq:
     name: showq
     type: unix
-    private: no
-    chroot: no
+    private: false
+    chroot: false
 
   error:
     name: error
     type: unix
-    chroot: no
+    chroot: false
 
   retry:
     name: retry
     type: unix
-    chroot: no
+    chroot: false
     command: error
 
   discard:
     name: discard
     type: unix
-    chroot: no
+    chroot: false
 
   local:
     name: local
     type: unix
-    unpriv: no
-    chroot: no
+    unpriv: false
+    chroot: false
 
   virtual:
     name: virtual
     type: unix
-    unpriv: no
-    chroot: no
+    unpriv: false
+    chroot: false
 
   lmtp:
     name: lmtp
     type: unix
-    chroot: no
+    chroot: false
 
   anvil:
     name: anvil
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 1
 
   scache:
     name: scache
     type: unix
-    chroot: no
+    chroot: false
     maxproc: 1
 
   postlog:
     name: postlog
     type: unix-dgram
-    private: no
-    chroot: no
+    private: false
+    chroot: false
     maxproc: 1
     command: postlogd
 
diff --git a/roles/postfix/defaults/main/policyd_spf.yml b/roles/postfix/defaults/main/policyd_spf.yml
index 639e937..8126eaf 100644
--- a/roles/postfix/defaults/main/policyd_spf.yml
+++ b/roles/postfix/defaults/main/policyd_spf.yml
@@ -6,8 +6,8 @@ postfix_policyd_spf_testonly: 0
 postfix_policyd_spf_helo_reject: Fail
 postfix_policyd_spf_mail_from_reject: Fail
 
-postfix_policyd_spf_permerror_reject: False
-postfix_policyd_spf_temperror_reject: False
+postfix_policyd_spf_permerror_reject: "False"
+postfix_policyd_spf_temperror_reject: "False"
 
 postfix_policyd_spf_skip_addresses:
   - "127.0.0.0/8"
diff --git a/roles/postfix/defaults/main/restrictions.yml b/roles/postfix/defaults/main/restrictions.yml
index f4b350e..31f9f11 100644
--- a/roles/postfix/defaults/main/restrictions.yml
+++ b/roles/postfix/defaults/main/restrictions.yml
@@ -48,6 +48,6 @@ postfix_body_checks: []
 
 postfix_smtpd_sender_login_maps: []
 
-postfix_always_add_missing_headers: no
+postfix_always_add_missing_headers: false
 postfix_local_header_rewrite_clients:
   - permit_inet_interfaces
diff --git a/roles/postfix/defaults/main/virtual.yml b/roles/postfix/defaults/main/virtual.yml
index 36056bb..e9837ac 100644
--- a/roles/postfix/defaults/main/virtual.yml
+++ b/roles/postfix/defaults/main/virtual.yml
@@ -1,9 +1,9 @@
 ---
 
-postfix_enable_virtual_mail: yes
+postfix_enable_virtual_mail: true
 
 virtual_mail_uid: virtual
 virtual_mail_gid: virtual
-virutal_mail_home: /home/virtual
+virtual_mail_home: /home/virtual
 
 virtual_minimum_uid: 100
diff --git a/roles/postfix/handlers/main.yml b/roles/postfix/handlers/main.yml
index 17b582e..98bb3bd 100644
--- a/roles/postfix/handlers/main.yml
+++ b/roles/postfix/handlers/main.yml
@@ -1,19 +1,20 @@
 ---
 
-- name: restart postfix
+- name: Restart postfix
   ansible.builtin.service:
     name: postfix
     state: restarted
 
-- name: reload postfix
+- name: Reload postfix
   ansible.builtin.service:
     name: postfix
     state: reloaded
 
-- name: restart postfix-mta-sts-resolver
+- name: Restart postfix-mta-sts-resolver
   ansible.builtin.service:
     name: postfix-mta-sts-resolver
     state: restarted
 
-- name: postalias /etc/aliases
+- name: Postalias /etc/aliases
   ansible.builtin.command: postalias /etc/aliases
+  changed_when: true
diff --git a/roles/postfix/tasks/config.yml b/roles/postfix/tasks/config.yml
index 8abce74..4812ce2 100644
--- a/roles/postfix/tasks/config.yml
+++ b/roles/postfix/tasks/config.yml
@@ -6,8 +6,8 @@
     dest: /etc/postfix/main.cf
     owner: root
     group: root
-    mode: 0644
-  notify: restart postfix
+    mode: "0644"
+  notify: Restart postfix
 
 - name: Render /etc/postfix/master.cf
   ansible.builtin.template:
@@ -15,8 +15,8 @@
     dest: /etc/postfix/master.cf
     owner: root
     group: root
-    mode: 0644
-  notify: restart postfix
+    mode: "0644"
+  notify: Restart postfix
 
 - name: Render /etc/postfix-policyd-spf-python/policyd-spf.conf
   ansible.builtin.template:
@@ -24,8 +24,8 @@
     dest: /etc/postfix-policyd-spf-python/policyd-spf.conf
     owner: root
     group: root
-    mode: 0644
-  notify: restart postfix
+    mode: "0644"
+  notify: Restart postfix
 
 - name: Render /etc/mta-sts-daemon.yml
   ansible.builtin.template:
@@ -33,8 +33,8 @@
     dest: /etc/mta-sts-daemon.yml
     owner: root
     group: root
-    mode: 0644
-  notify: restart postfix-mta-sts-resolver
+    mode: "0644"
+  notify: Restart postfix-mta-sts-resolver
 
 - name: Start and enable postfix-mta-sts-resolver
   ansible.builtin.service:
diff --git a/roles/postfix/tasks/install.yml b/roles/postfix/tasks/install.yml
index 0cce1da..e5f2e74 100644
--- a/roles/postfix/tasks/install.yml
+++ b/roles/postfix/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install packages
+- name: Install packages
   ansible.builtin.apt:
     name:
       - postfix
diff --git a/roles/postfix/tasks/main.yml b/roles/postfix/tasks/main.yml
index 4ef2c1c..1484643 100644
--- a/roles/postfix/tasks/main.yml
+++ b/roles/postfix/tasks/main.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: create postfix virtual users/group
+- name: Create postfix virtual users/group
   ansible.builtin.import_tasks: setup.yml
   tags:
     - "role::postfix"
@@ -8,19 +8,19 @@
     - "role::postfix:config"
     - "role::postfix:tables"
 
-- name: install postfix
+- name: Install postfix
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::postfix"
     - "role::postfix:install"
 
-- name: configure postfix
+- name: Configure postfix
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::postfix"
     - "role::postfix:config"
 
-- name: render postfix lookup tables
+- name: Render postfix lookup tables
   ansible.builtin.import_tasks: tables.yml
   tags:
     - "role::postfix"
diff --git a/roles/postfix/tasks/setup.yml b/roles/postfix/tasks/setup.yml
index ee3f26f..d040028 100644
--- a/roles/postfix/tasks/setup.yml
+++ b/roles/postfix/tasks/setup.yml
@@ -1,25 +1,25 @@
 ---
 
-- name: create virtual mail group
+- name: Create virtual mail group
   ansible.builtin.group:
     name: "{{ virtual_mail_gid }}"
-    system: yes
+    system: true
   register: postfix_register_vmail_group
   when: postfix_enable_virtual_mail
 
-- name: create virtual mail user
+- name: Create virtual mail user
   ansible.builtin.user:
     name: "{{ virtual_mail_uid }}"
     group: "{{ virtual_mail_gid }}"
     home: "{{ virtual_mail_home }}"
     password: '!'
     shell: /usr/sbin/nologin
-    system: yes
+    system: true
     comment: Virtual Mail User
   register: postfix_register_vmail_user
   when: postfix_enable_virtual_mail
 
-- name: set vmail uid and gid facts
+- name: Set vmail uid and gid facts
   ansible.builtin.set_fact:
     virtual_mail_numeric_uid: "{{ postfix_register_vmail_user.uid }}"
     virtual_mail_numeric_gid: "{{ postfix_register_vmail_group.gid }}"
diff --git a/roles/postfix/tasks/tables.yml b/roles/postfix/tasks/tables.yml
index e1036c3..cb70b8c 100644
--- a/roles/postfix/tasks/tables.yml
+++ b/roles/postfix/tasks/tables.yml
@@ -1,26 +1,26 @@
 ---
 
-- name: render /etc/aliases
+- name: Render /etc/aliases
   ansible.builtin.template:
     src: etc/aliases.j2
     dest: /etc/aliases
     owner: root
     group: root
-    mode: 0644
-  notify: postalias /etc/aliases
+    mode: "0644"
+  notify: Postalias /etc/aliases
 
-- name: render additional hash lookup tables
+- name: Render additional hash lookup tables
   ansible.builtin.template:
     src: etc/postfix/table.j2
     dest: "/etc/postfix/{{ item.key }}"
     owner: root
     group: root
-    mode: 0644
+    mode: "0644"
   register: postfix_register_additional_lookup_tables
   loop: "{{ postfix_additional_tables | dict2items }}"
 
-- name: postmap additional lookup tables
+- name: Postmap additional lookup tables
   ansible.builtin.command: >-
     postmap /etc/postfix/{{ item.item.key }}
-  changed_when: yes
+  changed_when: true
   loop: "{{ postfix_register_additional_lookup_tables.results }}"
diff --git a/roles/postfixadmin/defaults/main.yml b/roles/postfixadmin/defaults/main.yml
index 307bc7b..6bb6f59 100644
--- a/roles/postfixadmin/defaults/main.yml
+++ b/roles/postfixadmin/defaults/main.yml
@@ -24,8 +24,8 @@ postfixadmin_password_validation:
   '/([a-zA-Z].*){3}/': 'password_no_characters 3'
   '/([0-9].*){2}/': 'password_no_digits 2'
 
-postfixadmin_generate_password: no
-postfixadmin_show_password: no
+postfixadmin_generate_password: false
+postfixadmin_show_password: false
 postfixadmin_page_size: 25
 
 postfixadmin_default_aliases:
@@ -34,33 +34,33 @@ postfixadmin_default_aliases:
   postmaster: 'postmaster@{{ ansible_domain }}'
   webmaster: 'webmaster@{{ ansible_domain }}'
 
-postfixadmin_domain_path: yes
-postfixadmin_domain_in_mailbox: no
+postfixadmin_domain_path: true
+postfixadmin_domain_in_mailbox: false
 
 postfixadmin_aliases: 10
 postfixadmin_mailboxes: 10
 postfixadmin_maxquota: 10
 postfixadmin_domain_quota_default: 2048
-postfixadmin_quota: no
-postfixadmin_domain_quota: yes
+postfixadmin_quota: false
+postfixadmin_domain_quota: true
 
-postfixadmin_transport: no
+postfixadmin_transport: false
 postfixadmin_transport_options:
   - lmtp:unix:private/dovecot-lmtp
-postfixadmin_alias_domain: yes
-postfixadmin_backup: no
-postfixadmin_sendmail: yes
-postfixadmin_sendmail_all_admins: no
-postfixadmin_fetchmail: yes
-postfixadmin_forgotten_user_password_reset: yes
-postfixadmin_forgotten_admin_password_reset: no
-postfixadmin_password_expiration: no
-postfixadmin_show_header_text: no
+postfixadmin_alias_domain: true
+postfixadmin_backup: false
+postfixadmin_sendmail: true
+postfixadmin_sendmail_all_admins: false
+postfixadmin_fetchmail: true
+postfixadmin_forgotten_user_password_reset: true
+postfixadmin_forgotten_admin_password_reset: false
+postfixadmin_password_expiration: false
+postfixadmin_show_header_text: false
 postfixadmin_header_text: ':: Postfix Admin ::'
-postfixadmin_show_footer_text: yes
+postfixadmin_show_footer_text: true
 postfixadmin_footer_text: 'Return to change-this-to-your.domain.tld'
 postfixadmin_footer_link: 'http://change-this-to-your.domain.tld'
-postfixadmin_emailcheck_resolve_domain: yes
+postfixadmin_emailcheck_resolve_domain: true
 postfixadmin_welcome_text: |
   Hi,
 
@@ -85,10 +85,10 @@ postfixadmin_database_postfix_hosts: 'unix:/run/mysqld/mysqld.sock'
 postfixadmin_database_dovecot_user: postfix
 postfixadmin_database_dovecot_hosts: '/run/mysqld/mysqld.sock'
 # This permits disabled users to still read their mail, but will not allow them to send mail.
-postfixadmin_permit_inactive_user_nosmtp: no
+postfixadmin_permit_inactive_user_nosmtp: false
 # allow login as <user> in addition to <user>@<domain>
 # Only set this when when you're only serving a single domain or can otherwise avoid conflicts
-postfixadmin_permit_localpart_login: no
+postfixadmin_permit_localpart_login: false
 
 postfixadmin_additional_config: ''
 
diff --git a/roles/postfixadmin/handlers/main.yml b/roles/postfixadmin/handlers/main.yml
index 8f58c04..f481f51 100644
--- a/roles/postfixadmin/handlers/main.yml
+++ b/roles/postfixadmin/handlers/main.yml
@@ -1,11 +1,11 @@
 ---
 
-- name: reload postfix
+- name: Reload postfix
   ansible.builtin.service:
     name: postfix
     state: reloaded
 
-- name: reload dovecot
+- name: Reload dovecot
   ansible.builtin.service:
     name: dovecot
     state: reloaded
diff --git a/roles/postfixadmin/tasks/bootstrap.yml b/roles/postfixadmin/tasks/bootstrap.yml
index 3e59425..0910014 100644
--- a/roles/postfixadmin/tasks/bootstrap.yml
+++ b/roles/postfixadmin/tasks/bootstrap.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: create mariadb database
+- name: Create mariadb database
   community.mysql.mysql_db:
     name: '{{ postfixadmin_database_name }}'
     login_host: '{{ postfixadmin_database_host }}'
@@ -8,9 +8,9 @@
     login_unix_socket: '{{ postfixadmin_database_socket }}'
     login_user: '{{ postfixadmin_bootstrap_login_user }}'
     login_password: '{{ postfixadmin_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create postfixadmin database user
+- name: Create postfixadmin database user
   community.mysql.mysql_user:
     name: "{{ postfixadmin_database_user }}"
     host: "{{ postfixadmin_database_user_host }}"
@@ -21,9 +21,9 @@
     login_unix_socket: '{{ postfixadmin_database_socket }}'
     login_user: '{{ postfixadmin_bootstrap_login_user }}'
     login_password: '{{ postfixadmin_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: create postfix database user
+- name: Create postfix database user
   community.mysql.mysql_user:
     name: "{{ postfixadmin_database_postfix_user }}"
     host: "{{ postfixadmin_database_postfix_user_host }}"
@@ -34,9 +34,9 @@
     login_unix_socket: '{{ postfixadmin_database_socket }}'
     login_user: '{{ postfixadmin_bootstrap_login_user }}'
     login_password: '{{ postfixadmin_bootstrap_login_password }}'
-    check_implicit_admin: yes
+    check_implicit_admin: true
 
-- name: request setup.php to create database and admin user
+- name: Request setup.php to create database and admin user
   ansible.builtin.uri:
     url: '{{ postfixadmin_bootstrap_base_url }}/setup.php'
     method: POST
@@ -48,7 +48,7 @@
       password: '{{ postfixadmin_bootstrap_admin_password }}'
       password2: '{{ postfixadmin_bootstrap_admin_password }}'
       submit: 'createadmin'
-    return_content: yes
+    return_content: true
   register: postfixadmin_register_boostrap_create_admin
-  changed_when: yes
+  changed_when: true
   failed_when: '"Admin addition failed" in postfixadmin_register_boostrap_create_admin.content or postfixadmin_register_boostrap_create_admin.status != 200'
diff --git a/roles/postfixadmin/tasks/config.yml b/roles/postfixadmin/tasks/config.yml
index c87e153..477a95e 100644
--- a/roles/postfixadmin/tasks/config.yml
+++ b/roles/postfixadmin/tasks/config.yml
@@ -1,17 +1,17 @@
 ---
 
-- name: create config.local.php
+- name: Create config.local.php
   ansible.builtin.template:
     src: config.local.php.j2
     dest: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/config.local.php"
     owner: root
     group: www-data
-    mode: 0640
+    mode: "0640"
 
-- name: call setup.php to run database migrations
+- name: Call setup.php to run database migrations
   ansible.builtin.uri:
     url: "{{ postfixadmin_bootstrap_base_url }}/setup.php"
-    return_content: yes
+    return_content: true
   register: postfixadmin_register_setup_upgrade
   changed_when:
     - "'Database is up to date' not in postfixadmin_register_setup_upgrade.content"
diff --git a/roles/postfixadmin/tasks/dovecot.yml b/roles/postfixadmin/tasks/dovecot.yml
index 9c91fe0..20768e0 100644
--- a/roles/postfixadmin/tasks/dovecot.yml
+++ b/roles/postfixadmin/tasks/dovecot.yml
@@ -1,10 +1,10 @@
 ---
 
-- name: render /etc/dovecot/dovecot-sql.conf
+- name: Render /etc/dovecot/dovecot-sql.conf
   ansible.builtin.template:
     src: etc/dovecot/dovecot-sql.conf.j2
     dest: /etc/dovecot/dovecot-sql.conf
     owner: root
     group: root
-    mode: 0640
-  notify: reload dovecot
+    mode: "0640"
+  notify: Reload dovecot
diff --git a/roles/postfixadmin/tasks/install.yml b/roles/postfixadmin/tasks/install.yml
index bf2de6d..d281a10 100644
--- a/roles/postfixadmin/tasks/install.yml
+++ b/roles/postfixadmin/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install php dependencies
+- name: Install php dependencies
   ansible.builtin.apt:
     name:
       - php-imap
@@ -8,55 +8,55 @@
       - php-mbstring
       - python3-pymysql  # required by ansible
 
-- name: create postfixadmin installation directory
+- name: Create postfixadmin installation directory
   ansible.builtin.file:
     path: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}"
     state: directory
     owner: root
     group: www-data
-    mode: 0755
+    mode: "0755"
 
-- name: download and unpack postfixadmin release
+- name: Download and unpack postfixadmin release
   ansible.builtin.unarchive:
-    remote_src: yes
+    remote_src: true
     src: "https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-{{ postfixadmin_version }}.tar.gz"
     dest: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}"
     creates: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/config.inc.php"
     extra_opts: ["--strip-components=1"]
     owner: root
     group: www-data
-    mode: 0755
+    mode: "0755"
 
-- name: create templates_c directory
+- name: Create templates_c directory
   ansible.builtin.file:
     path: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/templates_c"
     state: directory
     owner: root
     group: www-data
-    mode: 0775
+    mode: "0775"
 
-- name: create config.local.php
+- name: Create config.local.php
   ansible.builtin.template:
     src: config.local.php.j2
     dest: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/config.local.php"
     owner: root
     group: www-data
-    mode: 0640
+    mode: "0640"
 
-- name: change config.inc.php permissions
+- name: Change config.inc.php permissions
   ansible.builtin.file:
     path: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/config.inc.php"
     owner: root
     group: www-data
-    mode: 0640
+    mode: "0640"
 
-- name: symlink postfixadmin-cli to /usr/local/bin
+- name: Symlink postfixadmin-cli to /usr/local/bin
   ansible.builtin.file:
     path: "/usr/local/bin/postfixadmin-cli"
     src: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}/scripts/postfixadmin-cli"
     state: link
 
-- name: symlink to new installation directory
+- name: Symlink to new installation directory
   ansible.builtin.file:
     path: "{{ postfixadmin_installation_prefix }}/postfixadmin"
     src: "{{ postfixadmin_installation_prefix }}/postfixadmin-{{ postfixadmin_version }}"
diff --git a/roles/postfixadmin/tasks/main.yml b/roles/postfixadmin/tasks/main.yml
index a6895ec..3120b06 100644
--- a/roles/postfixadmin/tasks/main.yml
+++ b/roles/postfixadmin/tasks/main.yml
@@ -1,36 +1,36 @@
 ---
 
-- name: create virtual user/group
+- name: Create virtual user/group
   ansible.builtin.import_tasks: setup.yml
   tags:
     - "role::postfixadmin"
     - "role::postfixadmin:dovecot"
 
-- name: install postfixadmin
+- name: Install postfixadmin
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::postfixadmin"
     - "role::postfixadmin:install"
 
-- name: configure postfixadmin
+- name: Configure postfixadmin
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::postfixadmin"
     - "role::postfixadmin:config"
 
-- name: create postfixadmin database and admin users
+- name: Create postfixadmin database and admin users
   ansible.builtin.import_tasks: bootstrap.yml
   tags:
     - "role::postfixadmin:bootstrap"
     - "never"
 
-- name: hook postfix up to postfixadmin
+- name: Hook postfix up to postfixadmin
   ansible.builtin.import_tasks: postfix.yml
   tags:
     - "role::postfixadmin"
     - "role::postfixadmin:postfix"
 
-- name: hook dovecot up to postfixadmin
+- name: Hook dovecot up to postfixadmin
   ansible.builtin.import_tasks: dovecot.yml
   tags:
     - "role::postfixadmin"
diff --git a/roles/postfixadmin/tasks/postfix.yml b/roles/postfixadmin/tasks/postfix.yml
index f88481d..77fe14f 100644
--- a/roles/postfixadmin/tasks/postfix.yml
+++ b/roles/postfixadmin/tasks/postfix.yml
@@ -1,20 +1,20 @@
 ---
 
-- name: create /etc/postfix/sql directory
+- name: Create /etc/postfix/sql directory
   ansible.builtin.file:
     path: /etc/postfix/sql
     state: directory
     owner: root
     group: root
-    mode: 0755
+    mode: "0755"
 
-- name: render postfix sql config files
+- name: Render postfix sql config files
   ansible.builtin.template:
     src: etc/postfix/sql/{{ item }}.cf.j2
     dest: /etc/postfix/sql/{{ item }}.cf
     owner: root
     group: postfix
-    mode: 0640
+    mode: "0640"
   loop:
     - mysql_relay_domains
     - mysql_transport_maps
@@ -25,4 +25,4 @@
     - mysql_virtual_domains_maps
     - mysql_virtual_mailbox_limit_maps
     - mysql_virtual_mailbox_maps
-  notify: reload postfix
+  notify: Reload postfix
diff --git a/roles/postfixadmin/tasks/setup.yml b/roles/postfixadmin/tasks/setup.yml
index 5aa366c..03ab162 100644
--- a/roles/postfixadmin/tasks/setup.yml
+++ b/roles/postfixadmin/tasks/setup.yml
@@ -1,23 +1,23 @@
 ---
 
-- name: create virtual mail group
+- name: Create virtual mail group
   ansible.builtin.group:
     name: "{{ virtual_mail_gid }}"
-    system: yes
+    system: true
   register: postfixadmin_register_vmail_group
 
-- name: create virtual mail user
+- name: Create virtual mail user
   ansible.builtin.user:
     name: "{{ virtual_mail_uid }}"
     group: "{{ virtual_mail_gid }}"
     home: "{{ virtual_mail_home }}"
     password: '!'
     shell: /usr/sbin/nologin
-    system: yes
+    system: true
     comment: Virtual Mail User
   register: postfixadmin_register_vmail_user
 
-- name: set vmail uid and gid facts
+- name: Set vmail uid and gid facts
   ansible.builtin.set_fact:
     virtual_mail_numeric_uid: "{{ postfixadmin_register_vmail_user.uid }}"
     virtual_mail_numeric_gid: "{{ postfixadmin_register_vmail_group.gid }}"
diff --git a/roles/postsrsd/handlers/main.yml b/roles/postsrsd/handlers/main.yml
index 9620b2f..8a370e8 100644
--- a/roles/postsrsd/handlers/main.yml
+++ b/roles/postsrsd/handlers/main.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: restart postsrsd
+- name: Restart postsrsd
   ansible.builtin.service:
     name: postsrsd
     state: restarted
diff --git a/roles/postsrsd/tasks/config.yml b/roles/postsrsd/tasks/config.yml
index 0d38e95..3512b87 100644
--- a/roles/postsrsd/tasks/config.yml
+++ b/roles/postsrsd/tasks/config.yml
@@ -1,10 +1,10 @@
 ---
 
-- name: render /etc/default/postsrsd
+- name: Render /etc/default/postsrsd
   ansible.builtin.template:
     src: etc/default/postsrsd.j2
     dest: /etc/default/postsrsd
     owner: root
     group: root
-    mode: 0644
-  notify: restart postsrsd
+    mode: "0644"
+  notify: Restart postsrsd
diff --git a/roles/postsrsd/tasks/install.yml b/roles/postsrsd/tasks/install.yml
index 006a0f1..b4df389 100644
--- a/roles/postsrsd/tasks/install.yml
+++ b/roles/postsrsd/tasks/install.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install postsrsd
+- name: Install postsrsd
   ansible.builtin.apt:
     name: postsrsd
     state: present
 
-- name: start and enable postsrsd
+- name: Start and enable postsrsd
   ansible.builtin.service:
     name: postsrsd
     state: started
-    enabled: yes
+    enabled: true
diff --git a/roles/postsrsd/tasks/main.yml b/roles/postsrsd/tasks/main.yml
index 45ea642..3dd0338 100644
--- a/roles/postsrsd/tasks/main.yml
+++ b/roles/postsrsd/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install postsrsd
+- name: Install postsrsd
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::postsrsd"
     - "role::postsrsd:install"
 
-- name: configure postsrsd
+- name: Configure postsrsd
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::postsrsd"
diff --git a/roles/schleuder/defaults/main.yml b/roles/schleuder/defaults/main.yml
index 1ba54f0..e2cdf5d 100644
--- a/roles/schleuder/defaults/main.yml
+++ b/roles/schleuder/defaults/main.yml
@@ -50,7 +50,7 @@ schleuder_defaults_subject_prefix_in: ""
 schleuder_defaults_subject_prefix_out: ""
 schleuder_defaults_bounces_drop_all: false
 schleuder_defaults_bounces_drop_on_headers:
-  x-spam-flag: yes
+  x-spam-flag: true
 schleuder_defaults_bounces_notify_admins: true
 schleuder_defaults_include_list_headers: true
 schleuder_defaults_include_openpgpg_header: true
@@ -62,7 +62,7 @@ schleuder_defaults_language: en
 schleuder_defaults_forward_all_incoming_to_admins: false
 
 # This is the last commit before schleuder 3.5 was required
-schleuder_web_install: no
+schleuder_web_install: false
 schleuder_web_commitish: main
 schleuder_web_hostname: schleuder.example.org
 schleuder_web_mailfrom: noreply@schleuder.example.org
diff --git a/roles/schleuder/handlers/main.yml b/roles/schleuder/handlers/main.yml
index 80e2d4e..f6b6ac9 100644
--- a/roles/schleuder/handlers/main.yml
+++ b/roles/schleuder/handlers/main.yml
@@ -1,15 +1,15 @@
 ---
 
-- name: systemctl daemon-reload
+- name: Systemctl daemon-reload
   ansible.builtin.systemd:
-    daemon_reload: yes
+    daemon_reload: true
 
-- name: systemctl restart schleuder-web
+- name: Systemctl restart schleuder-web
   ansible.builtin.service:
     name: schleuder-web
     state: restarted
 
-- name: systemctl restart schleuder-api-daemon
+- name: Systemctl restart schleuder-api-daemon
   ansible.builtin.service:
     name: schleuder-api-daemon
     state: restarted
diff --git a/roles/schleuder/tasks/cli_apitokens.yml b/roles/schleuder/tasks/cli_apitokens.yml
index 6ca3471..cadbc27 100644
--- a/roles/schleuder/tasks/cli_apitokens.yml
+++ b/roles/schleuder/tasks/cli_apitokens.yml
@@ -1,24 +1,24 @@
 ---
 
-- name: get schleuder api tls fingerprint
+- name: Get schleuder api tls fingerprint
   community.crypto.x509_certificate_info:
     path: /etc/schleuder/schleuder-certificate.pem
   register: schleuder_register_apicert_info
 
-- name: create the ~/.schleuder-cli/ directory
+- name: Create the ~/.schleuder-cli/ directory
   ansible.builtin.file:
     path: "{{ item.value.home }}/.schleuder-cli"
     state: directory
     owner: "{{ item.key }}"
-    mode: 0700
+    mode: "0700"
   loop: "{{ schleuder_cli_users | dict2items }}"
 
-- name: render ~/.schleuder-cli/schleuder-cli.yml
+- name: Render ~/.schleuder-cli/schleuder-cli.yml
   ansible.builtin.template:
     src: root/.schleuder-cli/schleuder-cli.yml.j2
     dest: "{{ item.value.home }}/.schleuder-cli/schleuder-cli.yml"
     owner: "{{ item.key }}"
-    mode: 0600
+    mode: "0600"
   vars:
     fingerprint: "{{ schleuder_register_apicert_info.fingerprints.sha256 | replace(':', '') }}"
     token: "{{ item.value.token }}"
diff --git a/roles/schleuder/tasks/config.yml b/roles/schleuder/tasks/config.yml
index 6c8175e..088e0f2 100644
--- a/roles/schleuder/tasks/config.yml
+++ b/roles/schleuder/tasks/config.yml
@@ -1,19 +1,19 @@
 ---
 
-- name: render /etc/schleuder/schleuder.yml
+- name: Render /etc/schleuder/schleuder.yml
   ansible.builtin.template:
     src: etc/schleuder/schleuder.yml.j2
     dest: /etc/schleuder/schleuder.yml
     owner: root
     group: schleuder
-    mode: 0640
-  notify: systemctl restart schleuder-api-daemon
+    mode: "0640"
+  notify: Systemctl restart schleuder-api-daemon
 
-- name: render /etc/schleuder/list-defaults.yml
+- name: Render /etc/schleuder/list-defaults.yml
   ansible.builtin.template:
     src: etc/schleuder/list-defaults.yml.j2
     dest: /etc/schleuder/list-defaults.yml
     owner: root
     group: schleuder
-    mode: 0640
-  notify: systemctl restart schleuder-api-daemon
+    mode: "0640"
+  notify: Systemctl restart schleuder-api-daemon
diff --git a/roles/schleuder/tasks/install.yml b/roles/schleuder/tasks/install.yml
index d16b3ad..7fb2e1b 100644
--- a/roles/schleuder/tasks/install.yml
+++ b/roles/schleuder/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install schleuder packages
+- name: Install schleuder packages
   ansible.builtin.apt:
     name:
       - schleuder
diff --git a/roles/schleuder/tasks/install_schleuder.yml b/roles/schleuder/tasks/install_schleuder.yml
index 6e6bc5c..7f280f1 100644
--- a/roles/schleuder/tasks/install_schleuder.yml
+++ b/roles/schleuder/tasks/install_schleuder.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install schleuder-web dependencies
+- name: Install schleuder dependencies
   ansible.builtin.apt:
     name:
       - ruby
@@ -10,30 +10,30 @@
       - libssl-dev
       - acl  # only needed so ansible can become_user=schleuder
 
-- name: create schleuder group
+- name: Create schleuder group
   ansible.builtin.group:
     name: schleuder
-    system: yes
+    system: true
 
-- name: create schleuder user
+- name: Create schleuder user
   ansible.builtin.user:
     name: schleuder
     group: schleuder
     home: /var/lib/schleuder
-    system: yes
+    system: true
     shell: /usr/sbin/nologin
 
-- name: gather service facts
+- name: Gather service facts
   ansible.builtin.service_facts:
 
-- name: stop schleuder service
+- name: Stop schleuder service
   ansible.builtin.service:
     name: schleuder
     state: stopped
   when: "'schleuder.service' in ansible_facts.services"
 
-- name: install schleuder gem
-  become: yes
+- name: Install schleuder gem
+  become: true
   become_user: schleuder
   ansible.builtin.command:
     cmd: gem install schleuder
diff --git a/roles/schleuder/tasks/install_web.yml b/roles/schleuder/tasks/install_web.yml
index de0a2c6..5bb2d50 100644
--- a/roles/schleuder/tasks/install_web.yml
+++ b/roles/schleuder/tasks/install_web.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install schleuder-web dependencies
+- name: Install schleuder-web dependencies
   ansible.builtin.apt:
     name:
       - bundler
@@ -10,99 +10,99 @@
       - git
       - acl  # only needed so ansible can become_user=schleuder-web
 
-- name: create schleuder-web user
+- name: Create schleuder-web user
   ansible.builtin.user:
     name: schleuder-web
     group: nogroup
     home: /var/lib/schleuder-web
-    system: yes
+    system: true
     shell: /usr/sbin/nologin
 
-- name: gather service facts
+- name: Gather service facts
   ansible.builtin.service_facts:
 
-- name: stop schleuder-web service
+- name: Stop schleuder-web service
   ansible.builtin.service:
     name: schleuder-web
     state: stopped
   when: "'schleuder-web.service' in ansible_facts.services"
 
-- name: clone schleuder-web git repo
-  become: yes
+- name: Clone schleuder-web git repo
+  become: true
   become_user: schleuder-web
   ansible.builtin.command:
     # git module would reset working directory
     cmd: git clone https://0xacab.org/schleuder/schleuder-web /var/lib/schleuder-web/schleuder-web  # noqa command-instead-of-module
     creates: /var/lib/schleuder-web/schleuder-web
 
-- name: fetch schleuder-web upstream
-  become: yes
+- name: Fetch schleuder-web upstream
+  become: true
   become_user: schleuder-web
   ansible.builtin.command:
     cmd: git fetch origin  # noqa command-instead-of-module
     chdir: /var/lib/schleuder-web/schleuder-web
-  changed_when: yes
+  changed_when: true
 
-- name: checkout requested schleuder-web version
-  become: yes
+- name: Checkout requested schleuder-web version
+  become: true
   become_user: schleuder-web
   ansible.builtin.command:
     cmd: git checkout "{{ schleuder_web_commitish }}"  # noqa command-instead-of-module
     chdir: /var/lib/schleuder-web/schleuder-web
-  changed_when: yes
+  changed_when: true
 
-- name: render /var/lib/schleuder-web/schleuder-web/config/schleuder-web.yml
+- name: Render /var/lib/schleuder-web/schleuder-web/config/schleuder-web.yml
   ansible.builtin.template:
     src: var/lib/schleuder-web/schleuder-web/config/schleuder-web.yml.j2
     dest: /var/lib/schleuder-web/schleuder-web/config/schleuder-web.yml
     owner: schleuder-web
     group: root
-    mode: 0600
-  notify: systemctl restart schleuder-web
+    mode: "0600"
+  notify: Systemctl restart schleuder-web
 
-- name: render /var/lib/schleuder-web/schleuder-web/config/database.yml
+- name: Render /var/lib/schleuder-web/schleuder-web/config/database.yml
   ansible.builtin.template:
     src: var/lib/schleuder-web/schleuder-web/config/database.yml.j2
     dest: /var/lib/schleuder-web/schleuder-web/config/database.yml
     owner: schleuder-web
     group: nogroup
-    mode: 0644
+    mode: "0644"
 
-- name: get schleuder api tls fingerprint
+- name: Get schleuder api tls fingerprint
   community.crypto.x509_certificate_info:
     path: /etc/schleuder/schleuder-certificate.pem
   register: schleuder_register_apicert_info
 
-- name: render /etc/default/schleuder-web
+- name: Render /etc/default/schleuder-web
   ansible.builtin.template:
     src: etc/default/schleuder-web.j2
     dest: /etc/default/schleuder-web
     owner: root
     group: root
-    mode: 0600
+    mode: "0600"
   vars:
     tls_fingerprint: "{{ schleuder_register_apicert_info.fingerprints.sha256 | replace(':', '') }}"
-  notify: systemctl restart schleuder-web
+  notify: Systemctl restart schleuder-web
 
-- name: render systemd service unit
+- name: Render systemd service unit
   ansible.builtin.template:
     src: etc/systemd/system/schleuder-web.service.j2
     dest: /etc/systemd/system/schleuder-web.service
     owner: root
     group: root
-    mode: 0644
-  notify: systemctl daemon-reload
+    mode: "0644"
+  notify: Systemctl daemon-reload
 
-- name: run bundle install ... this may take a few minutes
-  become: yes
+- name: Run bundle install ... this may take a few minutes
+  become: true
   become_user: schleuder-web
   ansible.builtin.command:
     cmd: /usr/bin/bundle install --path /var/lib/schleuder-web/.gem --without deployment
     chdir: /var/lib/schleuder-web/schleuder-web
-  changed_when: yes
+  changed_when: true
 
-- name: run bundle db setup
-  become: yes
+- name: Run bundle db setup
+  become: true
   become_user: schleuder-web
   ansible.builtin.command:
     cmd: /usr/bin/bundle exec rake db:setup
@@ -111,10 +111,10 @@
   environment:
     RAILS_ENV: production
 
-- name: flush systemd daemon-reload
+- name: Flush systemd daemon-reload
   ansible.builtin.meta: flush_handlers
 
-- name: start and enable schleuder-web
+- name: Start and enable schleuder-web
   ansible.builtin.service:
     name: schleuder-web
     state: started
diff --git a/roles/schleuder/tasks/main.yml b/roles/schleuder/tasks/main.yml
index c10125c..7139cf7 100644
--- a/roles/schleuder/tasks/main.yml
+++ b/roles/schleuder/tasks/main.yml
@@ -1,25 +1,25 @@
 ---
 
-- name: install schleuder
+- name: Install schleuder
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::schleuder"
     - "role::schleuder:install"
 
-- name: configure schleuder
+- name: Configure schleuder
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::schleuder"
     - "role::schleuder:config"
 
-- name: install and configure schleuder-web
+- name: Install and configure schleuder-web
   ansible.builtin.import_tasks: install_web.yml
   when: schleuder_web_install
   tags:
     - "role::schleuder"
     - "role::schleuder:install_web"
 
-- name: create schleuder-api-daemon tokens for admin users
+- name: Create schleuder-api-daemon tokens for admin users
   ansible.builtin.import_tasks: cli_apitokens.yml
   tags:
     - "role::schleuder"
diff --git a/roles/spamassassin/defaults/main.yml b/roles/spamassassin/defaults/main.yml
index 3bfdfb2..4569896 100644
--- a/roles/spamassassin/defaults/main.yml
+++ b/roles/spamassassin/defaults/main.yml
@@ -2,20 +2,20 @@
 
 spamassassin_pidfile: /var/run/spamd.pid
 spamassassin_niceness: 15
-spamassassin_enable_cron: no
-spamassassin_nouser_config: no
+spamassassin_enable_cron: false
+spamassassin_nouser_config: false
 
 spamassassin_rewrite_header_subject: "[*****SPAM*****]"
-spamassassin_report_safe: yes
+spamassassin_report_safe: true
 spamassassin_trusted_networks: []
 spamassassin_internal_networks: []
 spamassassin_lock_method: flock
 spamassassin_required_score: "5.0"
-spamassassin_normalize_charset: yes
+spamassassin_normalize_charset: true
 spamassassin_body_part_scan_size: 50000
 spamassassin_rawbody_part_scan_size: 500000
-spamassassin_use_bayes: yes
-spamassassin_bayes_auto_learn: yes
+spamassassin_use_bayes: true
+spamassassin_bayes_auto_learn: true
 spamassassin_bayes_path: /var/lib/spamassassin/.spamassassin/bayes
 spamassassin_bayes_file_mode: "0644"
 spamassassin_bayes_ignore_header:
@@ -37,14 +37,14 @@ spamassassin_additional_config: ""
 
 
 spamass_milter_user: spamass-milter
-spamass_milter_nomodify: no
-spamass_milter_postfix_socket_override: no
+spamass_milter_nomodify: false
+spamass_milter_postfix_socket_override: false
 spamass_milter_postfix_socket_path: /var/spool/postfix/spamass/spamass.sock
 spamass_milter_postfix_socket_owner: postfix
 spamass_milter_postfix_socket_group: postfix
 spamass_milter_postfix_socket_mode: "0600"
 
-spamassassin_salearncron_enable: no
+spamassassin_salearncron_enable: false
 spamassassin_salearncron_cronexpr: '0 3 * * *'
 spamassassin_salearncron_dbpath: /var/lib/spamassassin/.spamassassin/
 spamassassin_salearncron_spambox: .INBOX.sa-learn-spam
diff --git a/roles/spamassassin/handlers/main.yml b/roles/spamassassin/handlers/main.yml
index 800db5b..a67ce81 100644
--- a/roles/spamassassin/handlers/main.yml
+++ b/roles/spamassassin/handlers/main.yml
@@ -1,16 +1,16 @@
 ---
 
-- name: restart spamd
+- name: Restart spamd
   ansible.builtin.service:
     name: spamd
     state: restarted
 
-- name: restart spamass-milter
+- name: Restart spamass-milter
   ansible.builtin.service:
     name: spamass-milter
     state: restarted
 
-- name: reload spamd
+- name: Reload spamd
   ansible.builtin.service:
     name: spamassassin
     state: reloaded
diff --git a/roles/spamassassin/tasks/config.yml b/roles/spamassassin/tasks/config.yml
index 064255e..85c5758 100644
--- a/roles/spamassassin/tasks/config.yml
+++ b/roles/spamassassin/tasks/config.yml
@@ -1,37 +1,37 @@
 ---
 
-- name: render /etc/default/spamassassin
+- name: Render /etc/default/spamassassin
   ansible.builtin.template:
     src: etc/default/spamassassin.j2
     dest: /etc/default/spamassassin
     owner: root
     group: root
-    mode: 0644
-  notify: restart spamd
+    mode: "0644"
+  notify: Restart spamd
 
-- name: render /etc/default/spamass-milter
+- name: Render /etc/default/spamass-milter
   ansible.builtin.template:
     src: etc/default/spamass-milter.j2
     dest: /etc/default/spamass-milter
     owner: root
     group: root
-    mode: 0644
-  notify: restart spamass-milter
+    mode: "0644"
+  notify: Restart spamass-milter
 
-- name: render /etc/default/spamd
+- name: Render /etc/default/spamd
   ansible.builtin.template:
     src: etc/default/spamd.j2
     dest: /etc/default/spamd
     owner: root
     group: root
-    mode: 0644
-  notify: restart spamd
+    mode: "0644"
+  notify: Restart spamd
 
-- name: render /etc/spamassassin/local.cf
+- name: Render /etc/spamassassin/local.cf
   ansible.builtin.template:
     src: etc/spamassassin/local.cf.j2
     dest: /etc/spamassassin/local.cf
     owner: root
     group: root
-    mode: 0644
-  notify: restart spamd
+    mode: "0644"
+  notify: Restart spamd
diff --git a/roles/spamassassin/tasks/install.yml b/roles/spamassassin/tasks/install.yml
index 7744af5..4946150 100644
--- a/roles/spamassassin/tasks/install.yml
+++ b/roles/spamassassin/tasks/install.yml
@@ -1,6 +1,6 @@
 ---
 
-- name: install spamassassin
+- name: Install spamassassin
   ansible.builtin.apt:
     name:
       - spamassassin
@@ -11,30 +11,30 @@
       - pyzor
       - razor
 
-- name: start and enable spamassassin spamd
+- name: Start and enable spamassassin spamd
   ansible.builtin.service:
     name: spamd
     state: started
-    enabled: yes
+    enabled: true
 
-- name: start and enable spamass-milter spamd
+- name: Start and enable spamass-milter spamd
   ansible.builtin.service:
     name: spamass-milter
     state: started
-    enabled: yes
+    enabled: true
 
-- name: render auto sa-learn script
+- name: Render auto sa-learn script
   ansible.builtin.template:
     src: usr/local/bin/sa-learn.sh.j2
     dest: /usr/local/bin/sa-learn.sh
     owner: root
     group: root
-    mode: 0755
+    mode: "0755"
 
-- name: render auto sa-learn cronjonb
+- name: Render auto sa-learn cronjonb
   ansible.builtin.template:
     src: etc/cron.d/sa-learn.j2
     dest: /etc/cron.d/sa-learn
     owner: root
     group: root
-    mode: 0644
+    mode: "0644"
diff --git a/roles/spamassassin/tasks/main.yml b/roles/spamassassin/tasks/main.yml
index fbdb1a1..dd15b2e 100644
--- a/roles/spamassassin/tasks/main.yml
+++ b/roles/spamassassin/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 
-- name: install spamassassin
+- name: Install spamassassin
   ansible.builtin.import_tasks: install.yml
   tags:
     - "role::spamassassin"
     - "role::spamassassin:install"
 
-- name: configure spamassassin
+- name: Configure spamassassin
   ansible.builtin.import_tasks: config.yml
   tags:
     - "role::spamassassin"