From f502058c79761dcab06e93bf25b5dbf113276d39 Mon Sep 17 00:00:00 2001 From: Chris Croome <chris@webarchitects.co.uk> Date: Mon, 3 Feb 2025 16:24:22 +0000 Subject: [PATCH] Add checks --- defaults/main.yml | 20 ++++----- meta/argument_specs.yml | 4 ++ tasks/check.yml | 92 ++++++++++++++++++++++++++++++++++------- tasks/instance.yml | 20 +++++---- tasks/main.yml | 8 ++-- 5 files changed, 109 insertions(+), 35 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index ce5ebff..65fbb73 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -21,16 +21,16 @@ valkey_instances: logfile: /var/log/valkey/valkey-server.log dbfilename: dump.rdb config_file: /etc/valkey/valkey.conf - - name: cloud - state: enabled - config: - port: 0 - unixsocket: /run/valkey-cloud/valkey-server.sock - unixsocketperm: 770 - pidfile: /run/valkey-cloud/valkey-server.pid - logfile: /var/log/valkey/valkey-server-cloud.log - dbfilename: dump-cloud.rdb - config_file: /etc/valkey/valkey-cloud.conf + # - name: cloud + # state: enabled + # config: + # port: 0 + # unixsocket: /run/valkey-cloud/valkey-server.sock + # unixsocketperm: 770 + # pidfile: /run/valkey-cloud/valkey-server.pid + # logfile: /var/log/valkey/valkey-server-cloud.log + # dbfilename: dump-cloud.rdb + # CONFIg_file: /etc/valkey/valkey-cloud.conf valkey_enabled: true valkey_pkgs: - name: bookworm diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml index 0bd7004..9ffeed3 100644 --- a/meta/argument_specs.yml +++ b/meta/argument_specs.yml @@ -65,6 +65,10 @@ argument_specs: type: str required: false description: Path to the pid file. + requirepass: + type: str + required: false + description: The instance default password. config_file: type: str required: true diff --git a/tasks/check.yml b/tasks/check.yml index 3bf0126..c60e90a 100644 --- a/tasks/check.yml +++ b/tasks/check.yml @@ -11,20 +11,84 @@ - name: Valkey Checks block: - - name: Get server information - community.general.redis_info: - login_host: /run/valkey/valkey-server.sock - # login_port: 0 - register: valkey_info - - - name: Debug valkey_info - ansible.builtin.debug: - var: valkey_info - verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}0{% else %}1{% endif %}" - - - name: Debug valkey_info.info.valkey_version - ansible.builtin.debug: - var: valkey_info.info.valkey_version + - name: Check Valkey instances server names are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].name') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server names have been duplicated + {{ valkey_instances | community.general.json_query('[].name') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') | join(', ') }} + + - name: Check Valkey config file names are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config_file') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config_files have been duplicated + {{ valkey_instances | community.general.json_query('[].config_file') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') | join(', ') }} + + - name: Check Valkey instances server ports are unique when not 0 + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config.port') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') | + reject('regex', '^0$') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config.ports have been duplicated + {{ valkey_instances | community.general.json_query('[].config.port') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') | + reject('regex', '^0$') | join(', ') }} + + - name: Check Valkey instances pidfiles are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config.pidfile') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config.pidfiles have been duplicated + {{ valkey_instances | community.general.json_query('[].config.pidfile') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') | join(', ') }} + + - name: Check Valkey instances unixsockets are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config.unixsocket') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config.unixsockets have been duplicated + {{ valkey_instances | community.general.json_query('[].config.unixsocket') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] | join(', ') }} + + - name: Check Valkey instances logfiles are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config.logfile') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config.logfiles have been duplicated + {{ valkey_instances | community.general.json_query('[].name') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] | join(', ') }} + + - name: Check Valkey instances dbfilenames are unique + ansible.builtin.assert: + that: >- + valkey_instances | community.general.json_query('[].config.dbfilename') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] + quiet: "{% if ansible_verbosity == 0 %}true{% else %}false{% endif %}" + fail_msg: >- + The following Valkey server config.dbfilenames have been duplicated + {{ valkey_instances | community.general.json_query('[].config.dbfilename') | community.general.counter | + ansible.builtin.dict2items | selectattr('value', '>', 1) | map(attribute='key') == [] | join(', ') }} tags: - valkey diff --git a/tasks/instance.yml b/tasks/instance.yml index 034418b..e9309d2 100644 --- a/tasks/instance.yml +++ b/tasks/instance.yml @@ -157,6 +157,12 @@ var: valkey_instance_started verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}1{% else %}2{% endif %}" + - name: Debug valkey_instance_started.status.ActiveState + ansible.builtin.debug: + var: valkey_instance_started.status.ActiveState + # verbosity: "{% if ansible_check_mode | bool or ansible_diff_mode | bool %}1{% else %}2{% endif %}" + when: valkey_instance_started.status.ActiveState is defined + - name: Check Valkey instance status block: @@ -174,9 +180,7 @@ check_mode: false changed_when: false register: valkey_instance_info_server - when: - - valkey_instance_enabled.enabled | bool - - valkey_instance.config.requirepass is defined + when: valkey_instance.config.requirepass is defined - name: "Check Valkey info for {{ valkey_instance.name }}" ansible.builtin.command: >- @@ -190,9 +194,7 @@ check_mode: false changed_when: false register: valkey_instance_info_server - when: - - valkey_instance_enabled.enabled | bool - - valkey_instance.config.requirepass is not defined + when: valkey_instance.config.requirepass is not defined - name: Debug valkey_instance_info_server ansible.builtin.debug: @@ -201,12 +203,16 @@ - 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') }}" + when: valkey_instance_info_server.stdout is defined - name: Debug valkey_instance_info ansible.builtin.debug: var: valkey_instance_info + when: valkey_instance_info is defined - when: valkey_instance_started.status.ActiveState == "active" + when: + - valkey_instance_enabled.enabled | bool + - valkey_instance_started.status.ActiveState == "active" when: valkey_instance_config_templated.state == "file" diff --git a/tasks/main.yml b/tasks/main.yml index a64e3d6..8e91089 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -32,10 +32,10 @@ - valkey_install - valkey_pkg - # - name: Include Valkey checks - # ansible.builtin.include_tasks: check.yml - # tags: - # - valkey_check + - name: Include Valkey checks + ansible.builtin.include_tasks: check.yml + tags: + - valkey_check - name: Valkey instance config absent ansible.builtin.command: -- GitLab