From 662a987b2d74665207ff2fb725158b1845b416be Mon Sep 17 00:00:00 2001
From: Chris Croome <chris@webarchitects.co.uk>
Date: Mon, 3 Feb 2025 15:44:03 +0000
Subject: [PATCH] updates

---
 tasks/instance.yml       | 115 +++++++++++++++++++++++++++++----------
 templates/valkey.conf.j2 |   4 ++
 2 files changed, 90 insertions(+), 29 deletions(-)

diff --git a/tasks/instance.yml b/tasks/instance.yml
index 18f9f08..034418b 100644
--- a/tasks/instance.yml
+++ b/tasks/instance.yml
@@ -14,7 +14,7 @@
     - name: Debug valkey_instance
       ansible.builtin.debug:
         var: valkey_instance
-        verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}"
+        verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}1{% else %}2{% endif %}"
 
     - name: Debug valkey_instance.config
       ansible.builtin.debug:
@@ -34,6 +34,20 @@
         verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}"
       when: valkey_instance.config.unixsocket is defined
 
+    - name: "Set a fact for the systemd service name for {{ valkey_instance.name }}"
+      ansible.builtin.set_fact:
+        valkey_instance_service: >-
+          {%- if valkey_instance.name == "server" -%}
+          valkey-server.service
+          {%- else -%}
+          valkey-server@{{ valkey_instance.name }}.service
+          {%- endif -%}
+
+    - name: Debug valkey_instance_service
+      ansible.builtin.debug:
+        var: valkey_instance_service
+        verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}"
+
     - name: "Stat the Valkey instance config for {{ valkey_instance.name }}"
       ansible.builtin.stat:
         path: "{{ valkey_instance.config_file }}"
@@ -45,10 +59,15 @@
         # ansible.builtin.tempfile can't be used in check mode
         - name: "Set a fact for a random string for a TMP directory for {{ valkey_instance.name }}"
           ansible.builtin.set_fact:
-            valkey_random: "{{ lookup('community.general.random_string', length=12) }}"
+            valkey_random: "{{ lookup('community.general.random_string', length=12, special=false) }}"
           check_mode: false
           changed_when: false
 
+        - name: Debug valkey_random
+          ansible.builtin.debug:
+            var: valkey_random
+            verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}2{% else %}3{% endif %}"
+
         - name: "TMP directory present for {{ valkey_instance.name }}"
           ansible.builtin.file:
             path: "/tmp/{{ valkey_random }}"
@@ -116,40 +135,78 @@
     - name: Valkey enabled and started
       block:
 
-        - name: "Valkey enabled for {{ valkey_instance.name }}"
+        - name: "Valkey enabled {{ valkey_instance_service }}"
           ansible.builtin.systemd_service:
-            name: "valkey-server@{{ valkey_instance.name }}.service"
+            name: "{{ valkey_instance_service }}"
             enabled: true
+          register: valkey_instance_enabled
 
-        - name: "Valkey started for {{ valkey_instance.name }}"
-          ansible.builtin.systemd_service:
-            name: "valkey-server@{{ valkey_instance.name }}.service"
-            state: started
-
-        - name: "Check Valkey info using a UNIX socket for {{ valkey_instance.name }}"
-          ansible.builtin.command: >-
-            valkey-cli
-            {% if valkey_instance.config.unixsocket is defined %}
-            -s {{ valkey_instance.config.unixsocket }}
-            {% else %}
-            -h localhost -p {{ valkey_instance.config.port }}
-            {% endif %}
-            INFO SERVER
-          check_mode: false
-          changed_when: false
-          register: valkey_instance_info_server
-
-        - name: Debug valkey_instance_info_server
+        - name: Debug valkey_instance_enabled
           ansible.builtin.debug:
-            var: valkey_instance_info_server
+            var: valkey_instance_enabled
+            verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}1{% else %}2{% endif %}"
 
-        - name: "Set a fact for the Valkey info for {{ valkey_instance.name }}"
-          ansible.builtin.set_fact:
-            valkey_instance_info: "{{ valkey_instance_info_server.stdout | string | community.general.jc('ini') }}"
+        - name: "Valkey started for {{ valkey_instance_service }}"
+          ansible.builtin.systemd_service:
+            name: "{{ valkey_instance_service }}"
+            state: started
+          register: valkey_instance_started
 
-        - name: Debug valkey_instance_info
+        - name: Debug valkey_instance_started
           ansible.builtin.debug:
-            var: valkey_instance_info
+            var: valkey_instance_started
+            verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}1{% else %}2{% endif %}"
+
+        - name: Check Valkey instance status
+          block:
+
+            - name: "When active check Valkey info using REDISCLI_AUTH for {{ valkey_instance.name }}"
+              ansible.builtin.command: >-
+                valkey-cli
+                {% if valkey_instance.config.unixsocket is defined %}
+                -s {{ valkey_instance.config.unixsocket }}
+                {% else %}
+                -h localhost -p {{ valkey_instance.config.port }}
+                {% endif %}
+                INFO SERVER
+              environment:
+                REDISCLI_AUTH: "{{ valkey_instance.config.requirepass }}"
+              check_mode: false
+              changed_when: false
+              register: valkey_instance_info_server
+              when:
+                - valkey_instance_enabled.enabled | bool
+                - valkey_instance.config.requirepass is defined
+
+            - name: "Check Valkey info for {{ valkey_instance.name }}"
+              ansible.builtin.command: >-
+                valkey-cli
+                {% if valkey_instance.config.unixsocket is defined %}
+                -s {{ valkey_instance.config.unixsocket }}
+                {% else %}
+                -h localhost -p {{ valkey_instance.config.port }}
+                {% endif %}
+                INFO SERVER
+              check_mode: false
+              changed_when: false
+              register: valkey_instance_info_server
+              when:
+                - valkey_instance_enabled.enabled | bool
+                - valkey_instance.config.requirepass is not defined
+
+            - name: Debug valkey_instance_info_server
+              ansible.builtin.debug:
+                var: valkey_instance_info_server
+
+            - name: "Set a fact for the Valkey info for {{ valkey_instance.name }}"
+              ansible.builtin.set_fact:
+                valkey_instance_info: "{{ valkey_instance_info_server.stdout | string | community.general.jc('ini') }}"
+
+            - name: Debug valkey_instance_info
+              ansible.builtin.debug:
+                var: valkey_instance_info
+
+          when: valkey_instance_started.status.ActiveState == "active"
 
       when: valkey_instance_config_templated.state == "file"
 
diff --git a/templates/valkey.conf.j2 b/templates/valkey.conf.j2
index ca71a84..b37506b 100644
--- a/templates/valkey.conf.j2
+++ b/templates/valkey.conf.j2
@@ -1089,7 +1089,11 @@ acllog-max-len 128
 # The requirepass is not compatible with aclfile option and the ACL LOAD
 # command, these will cause requirepass to be ignored.
 #
+{% if valkey_instance.config.requirepass is defined %}
+requirepass {{ valkey_instance.config.requirepass }}
+{% else %}
 # requirepass foobared
+{% endif %}
 
 # The default Pub/Sub channels permission for new users is controlled by the
 # acl-pubsub-default configuration directive, which accepts one of these values:
-- 
GitLab