diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ae36b76688a1cda93e56847a400faef2013610a2..8cfd10417d1bec227f37e01918308a2cfc203ef4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,6 +8,7 @@
 #
 # You should have received a copy of the GNU General Public License along with the Webarchitects Valkey Ansible role. If not, see <https://www.gnu.org/licenses/>.
 ---
+variables:
   ANSIBLE_ANY_ERRORS_FATAL: "1"
   ANSIBLE_CALLBACK_RESULT_FORMAT: "yaml"
   ANSIBLE_DIFF_ALWAYS: "1"
diff --git a/.yamllint b/.yamllint
new file mode 100644
index 0000000000000000000000000000000000000000..9a4611f3da22d942bba84febf453149a8f9c49bf
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,30 @@
+# Copyright 2025 Chris Croome
+#
+# This file is part of the Webarchitects Valkey Ansible role.
+#
+# The Webarchitects Valkey Ansible role is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+#
+# The Webarchitects Valkey Ansible role is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with the Webarchitects Valkey Ansible role. If not, see <https://www.gnu.org/licenses/>.
+---
+extends: default
+yaml-files:
+  - '*.yaml'
+  - '*.yml'
+rules:
+  braces:
+    max-spaces-inside: 1
+    level: error
+  brackets:
+    max-spaces-inside: 1
+    level: error
+  line-length: disable
+  comments-indentation: disable
+  comments:
+    min-spaces-from-content: 1
+  octal-values:
+    forbid-implicit-octal: true
+    forbid-explicit-octal: true
+# vim: syntax=yaml
+...
diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml
index d0c729970ddfd066cdb57d03a46f7fdcd1a20354..daf11152d866a67459fc5e389905280c3587b3b3 100644
--- a/meta/argument_specs.yml
+++ b/meta/argument_specs.yml
@@ -18,6 +18,10 @@ argument_specs:
         type: bool
         required: true
         description: Run the tasks in this role.
+      valkey_apt_backports:
+        type: str
+        required: true
+        description: String that will be present in the apt cache policy when backports are enabled.
       valkey_pkgs:
         type: list
         elements: dict
@@ -44,4 +48,8 @@ argument_specs:
             type: list
             required: false
             description: A list of deb packages that should be present from backports.
+      valkey_verify:
+        type: bool
+        required: true
+        description: Use the argument specification to verify the variables that start with valkey_.
 ...
diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml
index 888bb525bb09aa4d26dd2e2f1b59416b2750faaf..abb2ab60289c710954f179008321e02965bc6f30 100644
--- a/molecule/default/molecule.yml
+++ b/molecule/default/molecule.yml
@@ -8,7 +8,7 @@
 #
 # You should have received a copy of the GNU General Public License along with the Webarchitects Valkey Ansible role. If not, see <https://www.gnu.org/licenses/>.
 ---
-dependency: 
+dependency:
   name: galaxy
 platforms:
   - name: instance
@@ -18,7 +18,7 @@ provisioner:
     defaults:
       ansible_managed: Ansible managed
     # host_vars:
-    #   instance: 
+    #   instance:
     #     ansible_user: ansible
   options:
     D: true
@@ -28,4 +28,3 @@ verifier:
     #   instance:
     #     ansible_user: ansible
 ...
-
diff --git a/molecule/default/verify.yml b/molecule/default/verify.yml
index aa0b711c2343cc83062f89b9ce3cbf70c278b6de..a79810bcef6ce49ccebace0f76325887d1555aff 100644
--- a/molecule/default/verify.yml
+++ b/molecule/default/verify.yml
@@ -17,11 +17,11 @@
   vars:
     ansible_python_interpreter: /usr/bin/python3
   tasks:
-   
+
     - name: Gather service facts
       ansible.builtin.service_facts:
       register: molecule_service_facts
-    
+
     - name: Debug valkey service status
       ansible.builtin.debug:
         msg: "{{ molecule_service_facts | community.general.json_query(molecule_service_jpq) }}"
diff --git a/tasks/pkg.yml b/tasks/pkg.yml
index 6aeff6b61a52d586aba802f1b14294a9d9242a38..f4aaf6bc5114418bfe373e7edf5bdbb5b7d090aa 100644
--- a/tasks/pkg.yml
+++ b/tasks/pkg.yml
@@ -81,10 +81,10 @@
           - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports)) | type_debug == "list"
         quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
 
-     - name: Check that backports are available when backports packages are specified
-       ansible.builtin.assert:
-         that:
-           - valkey_apt_backports in valkey_apt_cache_policy.stdout
+    - name: Check that backports are available when backports packages are specified
+      ansible.builtin.assert:
+        that:
+          - valkey_apt_backports in valkey_apt_cache_policy.stdout
         quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
       when: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) != []