diff --git a/docs/about.rst b/docs/about.rst
index 97897c530682a2ae179ecf89c9ca527c39d1f5f8..65124907f3c8dbf896834289e2ad624322e3c8a4 100644
--- a/docs/about.rst
+++ b/docs/about.rst
@@ -15,7 +15,7 @@ Roles are written for use with *Debian GNU/Linux*. For more details on
 supported releases, see :ref:`rolereference`.
 
 At the moment, the roles have been written for and tested against **Ansible
-10.3.x**.
+10.4.x**.
 
 The roles also utilise the ``ipv4/ipv6`` lookup plugins which require
 ``netaddr`` package to be installed. The ``passlib`` package is used
diff --git a/docs/index.rst b/docs/index.rst
index 8b49cb4762b4789038fe4e07296d0191d7114a2c..1614e1ed0645a0d36f91669d35b1b082f4c3cd8f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -15,7 +15,7 @@ Roles are written for use with *Debian GNU/Linux*. For more details on
 supported releases, see :ref:`rolereference`.
 
 At the moment, the roles have been written for and tested against **Ansible
-10.3.x**.
+10.4.x**.
 
 The roles also utilise the ``ipv4/ipv6`` lookup plugins which require
 ``netaddr`` package to be installed. The ``passlib`` package is used
diff --git a/docs/releasenotes.rst b/docs/releasenotes.rst
index 2023e568015da2b1efc9a119a7438abca5b06b1a..ac35a7561245d39800d84f1411892263d6d0fc2a 100644
--- a/docs/releasenotes.rst
+++ b/docs/releasenotes.rst
@@ -5,14 +5,14 @@ Release notes
 x.y.z
 -----
 
-Supported Ansible version bumped to 10.3.x. Dropped support for Debian
+Supported Ansible version bumped to 10.x. Dropped support for Debian
 11 (Bullseye). Minor fixes and improvements.
 
 **Breaking changes:**
 
 * All roles
 
-  * Supported Ansible version bumped to 10.3.x.
+  * Supported Ansible version bumped to 10.x.
   * Dropped support for Debian 11 (Bullseye).
   * ``passlib`` Python package is now (explicitly) required for using
     the roles.
diff --git a/docs/usage.rst b/docs/usage.rst
index bf49bbbef72fe4f401ca571cb6180b09b7bef17f..a38d3a0fbb4aed7280278bbe201a1441384e6b72 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -135,7 +135,7 @@ packages, and to prepare the environment a bit on the Ansible server:
      mkdir ~/mysite/
      mkvirtualenv -a ~/mysite/ mysite
      pip install -U pip setuptools
-     pip install 'ansible~=10.3.0' netaddr passlib
+     pip install 'ansible~=10.4.0' netaddr passlib
 
 .. warning::
    The ``netaddr`` package is needed for ``ipv4/ipv6`` lookup plugins
diff --git a/requirements.in b/requirements.in
index d65319405eb2847fa57fdca0e7502bef1c50fe3f..1a0b8f33e8814fd34f26bc1555f72374b1f0c5e7 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,5 +1,5 @@
 # Ansible and role runtime.
-ansible~=10.3
+ansible~=10.4.0
 netaddr
 passlib
 python-ldap
diff --git a/requirements.txt b/requirements.txt
index e73b04c34fc3730b33c55e52a7cc9ec2b1b96906..e0865a42fed91ba89464561d8c2d50298e315efe 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,19 +6,19 @@
 #
 alabaster==0.7.16
     # via sphinx
-ansible==10.3.0
+ansible==10.4.0
     # via -r requirements.in
-ansible-compat==24.8.0
+ansible-compat==24.9.0
     # via
     #   ansible-lint
     #   molecule
-ansible-core==2.17.3
+ansible-core==2.17.4
     # via
     #   ansible
     #   ansible-compat
     #   ansible-lint
     #   molecule
-ansible-lint==24.7.0
+ansible-lint==24.9.0
     # via -r requirements.in
 attrs==24.2.0
     # via
@@ -32,11 +32,11 @@ black==24.8.0
     # via ansible-lint
 bracex==2.5
     # via wcmatch
-build==1.2.1
+build==1.2.2
     # via pip-tools
 certifi==2024.8.30
     # via requests
-cffi==1.17.0
+cffi==1.17.1
     # via
     #   cryptography
     #   pynacl
@@ -63,17 +63,17 @@ docutils==0.20.1
     #   sphinx-rtd-theme
 enrich==1.2.7
     # via molecule
-filelock==3.15.4
+filelock==3.16.1
     # via ansible-lint
 flake8==7.1.1
     # via -r requirements.in
 gimmecert==1.0.0
     # via -r requirements.in
-idna==3.8
+idna==3.10
     # via requests
 imagesize==1.4.1
     # via sphinx
-importlib-metadata==8.4.0
+importlib-metadata==8.5.0
     # via ansible-lint
 iniconfig==2.0.0
     # via pytest
@@ -117,7 +117,9 @@ packaging==24.1
     #   molecule
     #   pytest
     #   sphinx
-paramiko==3.4.1
+paramiko==3.5.0
+    # via -r requirements.in
+passlib==1.7.4
     # via -r requirements.in
 pathspec==0.12.1
     # via
@@ -126,17 +128,17 @@ pathspec==0.12.1
     #   yamllint
 pip-tools==7.4.1
     # via -r requirements.in
-platformdirs==4.2.2
+platformdirs==4.3.6
     # via black
 pluggy==1.5.0
     # via
     #   molecule
     #   pytest
-pyasn1==0.6.0
+pyasn1==0.6.1
     # via
     #   pyasn1-modules
     #   python-ldap
-pyasn1-modules==0.4.0
+pyasn1-modules==0.4.1
     # via python-ldap
 pycodestyle==2.12.1
     # via flake8
@@ -154,7 +156,7 @@ pyproject-hooks==1.1.0
     # via
     #   build
     #   pip-tools
-pytest==8.3.2
+pytest==8.3.3
     # via pytest-testinfra
 pytest-testinfra==10.1.1
     # via molecule
@@ -179,7 +181,7 @@ requests==2.32.3
     # via sphinx
 resolvelib==1.0.1
     # via ansible-core
-rich==13.8.0
+rich==13.8.1
     # via
     #   ansible-lint
     #   enrich
@@ -221,7 +223,7 @@ subprocess-tee==0.4.2
     # via
     #   ansible-compat
     #   ansible-lint
-urllib3==2.2.2
+urllib3==2.2.3
     # via requests
 wcmatch==9.0
     # via
@@ -231,7 +233,7 @@ wheel==0.44.0
     # via pip-tools
 yamllint==1.35.1
     # via ansible-lint
-zipp==3.20.1
+zipp==3.20.2
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
@@ -239,7 +241,7 @@ pip==24.2
     # via
     #   -r requirements.in
     #   pip-tools
-setuptools==74.1.1
+setuptools==75.1.0
     # via
     #   -r requirements.in
     #   pip-tools
diff --git a/roles/backup/meta/main.yml b/roles/backup/meta/main.yml
index 04ef039039bca86c47977d93a6044007100b81a9..dd09c32783966d34aaac090ef8d4091257d0f9de 100644
--- a/roles/backup/meta/main.yml
+++ b/roles/backup/meta/main.yml
@@ -11,7 +11,7 @@ galaxy_info:
   author: Branko Majic
   description: Specify what files should be backed-up to the backup server.
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/backup_client/meta/main.yml b/roles/backup_client/meta/main.yml
index 78ff37d2a2cd858f7134adbfd0e5a5e7a781a111..f634405c04c27f5640a9654c7002d2b19940dba0 100644
--- a/roles/backup_client/meta/main.yml
+++ b/roles/backup_client/meta/main.yml
@@ -6,7 +6,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up backup client (using duplicity/duply)
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/backup_server/meta/main.yml b/roles/backup_server/meta/main.yml
index 1ce68bcf2fd62e529ad606d7c4352da0788eebe4..a1affa4be0eb0a333bdde5b465e7d308c67f28cf 100644
--- a/roles/backup_server/meta/main.yml
+++ b/roles/backup_server/meta/main.yml
@@ -9,7 +9,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up server to act as backup storage for the backup clients, exposing SFTP on dedicated port with dedicated OpenSSH server instance
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/bootstrap/meta/main.yml b/roles/bootstrap/meta/main.yml
index 7f88e8beef9d79195d94b65e3c0d5f069f642d6d..e260c22981603a75e84e9cd77a25cd513e972445 100644
--- a/roles/bootstrap/meta/main.yml
+++ b/roles/bootstrap/meta/main.yml
@@ -6,7 +6,7 @@ galaxy_info:
   author: Branko Majic
   description: Performs basic bootstrap of server for use with Ansible
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/common/meta/main.yml b/roles/common/meta/main.yml
index dee6bfd4b112e4cd457c12101247e0bfaa00f45b..9d4c1730a97d8b8cf204576f95163c91a93e3dbe 100644
--- a/roles/common/meta/main.yml
+++ b/roles/common/meta/main.yml
@@ -20,7 +20,7 @@ galaxy_info:
   author: Branko Majic
   description: Apply common configuration and hardening on server
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/database/meta/main.yml b/roles/database/meta/main.yml
index b75a5b1b115c9f0af00d1ea05da09671c0b8bfb3..2dba93e1588f6fe9ae77b66042b645621784baa9 100644
--- a/roles/database/meta/main.yml
+++ b/roles/database/meta/main.yml
@@ -16,7 +16,7 @@ galaxy_info:
   author: Branko Majic
   description: Creates MariaDB database and accompanying user to access it
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/database_server/meta/main.yml b/roles/database_server/meta/main.yml
index f80593dd9e9e064553b4a8d31506bf7415009e9b..cb3cd35a1bdcb0abc4b0cb530d76fcbb2a3a973a 100644
--- a/roles/database_server/meta/main.yml
+++ b/roles/database_server/meta/main.yml
@@ -9,7 +9,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up MariaDB database server
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/ldap_client/meta/main.yml b/roles/ldap_client/meta/main.yml
index e8ad84d6c0b4c158651ac00641b3088bb64a738b..e5f36db41f9ec6d0739ae19eadfdb4aa807e0aa5 100644
--- a/roles/ldap_client/meta/main.yml
+++ b/roles/ldap_client/meta/main.yml
@@ -6,7 +6,7 @@ galaxy_info:
   author: Branko Majic
   description: Configures OpenLDAP client (default configuration)
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/ldap_server/meta/main.yml b/roles/ldap_server/meta/main.yml
index f2bf6934a8f954f5b2df7712110d8c00ce533d94..d2c07b55a744a2a810762ec7fe2c5f262de46bed 100644
--- a/roles/ldap_server/meta/main.yml
+++ b/roles/ldap_server/meta/main.yml
@@ -15,7 +15,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up an OpenLDAP server
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/mail_forwarder/meta/main.yml b/roles/mail_forwarder/meta/main.yml
index 6e761349a0f61e933297e46883b00bab914a9368..0e3631c0b3dff1146e8a2ebba109f1381c40af7f 100644
--- a/roles/mail_forwarder/meta/main.yml
+++ b/roles/mail_forwarder/meta/main.yml
@@ -9,7 +9,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up local SMTP server for sending out mails and receiving mails for local users
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/mail_server/meta/main.yml b/roles/mail_server/meta/main.yml
index 912e399ff37102ca2c96d1b318be95aef118e3f4..0e5eb061ea3482d40c42495da9c00cbdc8d853c1 100644
--- a/roles/mail_server/meta/main.yml
+++ b/roles/mail_server/meta/main.yml
@@ -14,7 +14,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up mail server with SMTP and IMAP services, using LDAP as source of allowed destinations (domains, mail addresses)
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/php_website/meta/main.yml b/roles/php_website/meta/main.yml
index 3e16adb12a0d7243f63a379b46ea5a55205dfb57..daab7df4bc3b2e7bd2ee5b5924617747218582be 100644
--- a/roles/php_website/meta/main.yml
+++ b/roles/php_website/meta/main.yml
@@ -12,7 +12,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up a website powered by PHP application
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/preseed/meta/main.yml b/roles/preseed/meta/main.yml
index fa45aebe3ccfdc7adcdc9c7068942916c1ce8316..6261b732c0b350fee34da5fece1f1b4e28958779 100644
--- a/roles/preseed/meta/main.yml
+++ b/roles/preseed/meta/main.yml
@@ -6,7 +6,7 @@ galaxy_info:
   author: Branko Majic
   description: Generates preseed files for Debian
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/web_server/meta/main.yml b/roles/web_server/meta/main.yml
index 29b69681d3f7813e821c83fb1b063bb0e48e22f4..4f338d80aa52713b8676fa095e7eb4cbfe0c65be 100644
--- a/roles/web_server/meta/main.yml
+++ b/roles/web_server/meta/main.yml
@@ -9,7 +9,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up generic web server
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/wsgi_website/meta/main.yml b/roles/wsgi_website/meta/main.yml
index 52ac670e544c8b72cec554ff471db236cf2115a7..fc8bb899939e5140dc3a850c8873a354650dc239 100644
--- a/roles/wsgi_website/meta/main.yml
+++ b/roles/wsgi_website/meta/main.yml
@@ -12,7 +12,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up a website powered by WSGI application
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions:
diff --git a/roles/xmpp_server/meta/main.yml b/roles/xmpp_server/meta/main.yml
index c35faf85fb56ca7bf0551dcd59557c612fb18e3b..3f0acb7667dc725cfaf1a6fa49c2c7394df51e42 100644
--- a/roles/xmpp_server/meta/main.yml
+++ b/roles/xmpp_server/meta/main.yml
@@ -14,7 +14,7 @@ galaxy_info:
   author: Branko Majic
   description: Sets-up a Prosody XMPP server using LDAP directory as source of domain/user information
   license: BSD
-  min_ansible_version: "10.3"
+  min_ansible_version: "10.4"
   platforms:
     - name: Debian
       versions: