From 793cdcbaab533876ffab33c57e75a737b00f55e4 Mon Sep 17 00:00:00 2001
From: Chris Croome <chris@webarchitects.co.uk>
Date: Mon, 27 Jan 2025 10:51:34 +0000
Subject: [PATCH] require backports list

---
 defaults/main.yml       | 14 +++++-----
 meta/argument_specs.yml |  2 +-
 tasks/main.yml          |  1 +
 tasks/pkg.yml           | 57 +++++++++++++++++------------------------
 4 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/defaults/main.yml b/defaults/main.yml
index 01622b5..92723cb 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -12,25 +12,27 @@ valkey: false
 valkey_enabled: true
 valkey_pkgs:
   - name: bookworm
-    pkgs_present: []
+    pkgs_absent:
+      - redis-server
+      - redis-tools
     pkgs_present_backports:
       - valkey-server
       - valkey-tools
+    pkgs_present: []
+  - name: noble
     pkgs_absent:
       - redis-server
       - redis-tools
-  - name: noble
+    pkgs_present_backports: []
     pkgs_present:
       - valkey-server
       - valkey-tools
+  - name: trixie
     pkgs_absent:
       - redis-server
       - redis-tools
-  - name: trixie
+    pkgs_present_backports: []
     pkgs_present:
       - valkey-server
       - valkey-tools
-    pkgs_absent:
-      - redis-server
-      - redis-tools
 ...
diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml
index 68f2256..bb2eda5 100644
--- a/meta/argument_specs.yml
+++ b/meta/argument_specs.yml
@@ -50,7 +50,7 @@ argument_specs:
             description: A list of deb packages that should be present.
           pkgs_present_backports:
             type: list
-            required: false
+            required: true
             description: A list of deb packages that should be present from backports.
       valkey_verify:
         type: bool
diff --git a/tasks/main.yml b/tasks/main.yml
index 6174d63..ad548cf 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -29,6 +29,7 @@
     - name: Include Valkey package tasks
       ansible.builtin.include_tasks: pkg.yml
       tags:
+        - valkey_install
         - valkey_pkg
 
   when: valkey | bool
diff --git a/tasks/pkg.yml b/tasks/pkg.yml
index a9a78ea..a4603cc 100644
--- a/tasks/pkg.yml
+++ b/tasks/pkg.yml
@@ -11,6 +11,19 @@
 - name: Valkey packages present and absent
   block:
 
+    - name: Update apt cache
+      ansible.builtin.apt:
+        update_cache: true
+      check_mode: false
+      changed_when: false
+
+    - name: Requirements present
+      ansible.builtin.apt:
+        pkg:
+          - gnupg
+          - python3-debian
+        state: present
+
     - name: Update package facts
       ansible.builtin.package_facts:
         manager: apt
@@ -34,18 +47,6 @@
           The distro {{ ansible_facts.distribution_release }} needs to be listed in the valkey_pkgs array, currently the array contains
           {{ (valkey_pkgs | community.general.json_query('[].name')) | join(', ') }}
 
-    - name: Update apt cache
-      ansible.builtin.apt:
-        update_cache: true
-      check_mode: false
-      changed_when: false
-
-    - name: Run apt-cache policy
-      ansible.builtin.command: apt-cache policy
-      check_mode: false
-      changed_when: false
-      register: valkey_apt_cache_policy
-
     - name: Debug packages absent JMESPath query
       ansible.builtin.debug:
         var: valkey_jpq.pkgs_absent
@@ -81,30 +82,20 @@
         var: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present)
         verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}"
 
-    - name: Check that lists of packages present and absent are defined
+    - name: Run apt-cache policy
+      ansible.builtin.command: apt-cache policy
+      check_mode: false
+      changed_when: false
+      register: valkey_apt_cache_policy
+
+    - name: Check that backports are available when backports packages are specified
       ansible.builtin.assert:
         that:
-          - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_absent)) | type_debug == "list"
-          - (valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present)) | type_debug == "list"
+          - valkey_apt_backports in valkey_apt_cache_policy.stdout
         quiet: "{% if ansible_check_mode or ansible_verbosity >= 1 %}false{% else %}true{% endif %}"
-
-    - name: Backports checks
-      block:
-
-        - name: Check that backport packages present is a list when defined
-          ansible.builtin.assert:
-            that:
-              - (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
-            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) != []
-
-      when: valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) is defined
+      when:
+        - valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) is defined
+        - valkey_pkgs | community.general.json_query(valkey_jpq.pkgs_present_backports) != []
 
     - name: Valkey packages absent
       ansible.builtin.apt:
-- 
GitLab