From f723f282466fea3bbf4083ab340544f720976f55 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Mon, 28 Jul 2025 09:48:38 +0100 Subject: [PATCH 01/14] PMM-14170: Add Valkey setup and configuration scripts --- pmm_qa/pmm-framework.py | 27 ++++ pmm_qa/scripts/database_options.py | 4 + pmm_qa/valkey/cleanup.sh | 15 ++ pmm_qa/valkey/sentinel.conf.j2 | 22 +++ pmm_qa/valkey/valkey-primary.conf.j2 | 27 ++++ pmm_qa/valkey/valkey-replica.conf.j2 | 28 ++++ pmm_qa/valkey/valkey.yml | 209 +++++++++++++++++++++++++++ 7 files changed, 332 insertions(+) create mode 100644 pmm_qa/valkey/cleanup.sh create mode 100644 pmm_qa/valkey/sentinel.conf.j2 create mode 100644 pmm_qa/valkey/valkey-primary.conf.j2 create mode 100644 pmm_qa/valkey/valkey-replica.conf.j2 create mode 100644 pmm_qa/valkey/valkey.yml diff --git a/pmm_qa/pmm-framework.py b/pmm_qa/pmm-framework.py index 84d02e1..e662571 100755 --- a/pmm_qa/pmm-framework.py +++ b/pmm_qa/pmm-framework.py @@ -788,6 +788,31 @@ def setup_dockerclients(db_type, db_version=None, db_config=None, args=None): # Call the function to run the setup_docker_client_images script execute_shell_scripts(shell_scripts, shell_scripts_path, env_vars, args) +def setup_valkey(db_type, db_version=None, db_config=None, args=None): + + # Check if PMM server is running + container_name = get_running_container_name() + if container_name is None and args.pmm_server_ip is None: + print(f"Check if PMM Server is Up and Running..Exiting") + exit() + + # Gather Version details + valkey_version = os.getenv('VALKEY_VERSION') or db_version or database_configs[db_type]["versions"][-1] + + # Define environment variables for playbook + env_vars = { + 'PMM_SERVER_IP': args.pmm_server_ip or container_name or '127.0.0.1', + 'VALKEY_VERSION': valkey_version, + 'CLIENT_VERSION': get_value('CLIENT_VERSION', db_type, args, db_config), + 'ADMIN_PASSWORD': os.getenv('ADMIN_PASSWORD') or args.pmm_server_password or 'admin', + 'PMM_QA_GIT_BRANCH': os.getenv('PMM_QA_GIT_BRANCH') or 'v3' + } + + # Ansible playbook filename + playbook_filename = 'valkey/valkey.yml' + + # Call the function to run the Ansible playbook + run_ansible_playbook(playbook_filename, env_vars, args) # Set up databases based on arguments received def setup_database(db_type, db_version=None, db_config=None, args=None): @@ -834,6 +859,8 @@ def setup_database(db_type, db_version=None, db_config=None, args=None): setup_ssl_mlaunch(db_type, db_version, db_config, args) elif db_type == 'BUCKET': setup_bucket(db_type, db_version, db_config, args) + elif db_type == 'VALKEY': + setup_valkey(db_type, db_version, db_config, args) else: print(f"Database type {db_type} is not recognised, Exiting...") exit(1) diff --git a/pmm_qa/scripts/database_options.py b/pmm_qa/scripts/database_options.py index 444fed5..46028d6 100644 --- a/pmm_qa/scripts/database_options.py +++ b/pmm_qa/scripts/database_options.py @@ -76,5 +76,9 @@ }, "BUCKET": { "configurations": {"BUCKET_NAMES": 'bcp'} + }, + "VALKEY": { + "versions": ["7-alpine", "8-bookworm"], + "configurations": {"CLIENT_VERSION": "3-dev-latest", "SETUP_TYPE": "", "TARBALL": ""} } } diff --git a/pmm_qa/valkey/cleanup.sh b/pmm_qa/valkey/cleanup.sh new file mode 100644 index 0000000..9f11258 --- /dev/null +++ b/pmm_qa/valkey/cleanup.sh @@ -0,0 +1,15 @@ +#!/bin/bash -e + +docker exec -it pmm-server pmm-admin remove valkey valkey-primary-svc || : +docker exec -it pmm-server pmm-admin remove valkey valkey-replica1-svc || : +docker exec -it pmm-server pmm-admin remove valkey valkey-replica2-svc || : +docker exec -it pmm-server pmm-admin remove valkey sentinel1-svc || : +docker exec -it pmm-server pmm-admin remove valkey sentinel2-svc || : +docker exec -it pmm-server pmm-admin remove valkey sentinel3-svc || : + +docker rm -vf valkey-primary valkey-replica-1 valkey-replica-2 || : +docker rm -vf sentinel-1 sentinel-2 sentinel-3 || : + +docker volume rm -f valkey-primary-data valkey-replica-1-data valkey-replica-2-data || : + +rm -rf "$HOME/valkey" \ No newline at end of file diff --git a/pmm_qa/valkey/sentinel.conf.j2 b/pmm_qa/valkey/sentinel.conf.j2 new file mode 100644 index 0000000..9137777 --- /dev/null +++ b/pmm_qa/valkey/sentinel.conf.j2 @@ -0,0 +1,22 @@ +# sentinel.conf +bind 0.0.0.0 + +port 26379 + +# Monitor the master +sentinel monitor valkey-primary valkey-primary 6379 {{ sentinel_quorum }} +sentinel auth-user valkey-primary default +sentinel auth-pass valkey-primary "{{ valkey_password }}" +sentinel resolve-hostnames yes + +# Failover timeouts +sentinel down-after-milliseconds valkey-primary 5000 +sentinel failover-timeout valkey-primary 10000 +sentinel parallel-syncs valkey-primary 1 + +# Security +protected-mode no + +# Logging +loglevel notice +logfile "" \ No newline at end of file diff --git a/pmm_qa/valkey/valkey-primary.conf.j2 b/pmm_qa/valkey/valkey-primary.conf.j2 new file mode 100644 index 0000000..40fcff2 --- /dev/null +++ b/pmm_qa/valkey/valkey-primary.conf.j2 @@ -0,0 +1,27 @@ +# Basic Valkey configuration for primary +bind 0.0.0.0 +port 6379 + +requirepass "{{ valkey_password }}" +masterauth "{{ valkey_password }}" + +# Persistence +save 900 1 +save 300 10 +save 60 10000 + +# Replication +replica-serve-stale-data yes +replica-read-only yes +repl-diskless-sync no +repl-diskless-sync-delay 5 + +# Security +protected-mode no + +# Logging +loglevel notice +logfile "" + +# Memory management +maxmemory-policy allkeys-lru \ No newline at end of file diff --git a/pmm_qa/valkey/valkey-replica.conf.j2 b/pmm_qa/valkey/valkey-replica.conf.j2 new file mode 100644 index 0000000..d794973 --- /dev/null +++ b/pmm_qa/valkey/valkey-replica.conf.j2 @@ -0,0 +1,28 @@ +# Basic Valkey configuration for replica +bind 0.0.0.0 +port 6379 + +requirepass "{{ valkey_password }}" +masterauth "{{ valkey_password }}" + +# Replication +replicaof valkey-primary 6379 +replica-serve-stale-data yes +replica-read-only yes +repl-diskless-sync no +repl-diskless-sync-delay 5 + +# Persistence +save 900 1 +save 300 10 +save 60 10000 + +# Security +protected-mode no + +# Logging +loglevel notice +logfile "" + +# Memory management +maxmemory-policy allkeys-lru \ No newline at end of file diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml new file mode 100644 index 0000000..423df45 --- /dev/null +++ b/pmm_qa/valkey/valkey.yml @@ -0,0 +1,209 @@ +--- +- name: Deploy Valkey Cluster with Sentinel + hosts: localhost + gather_facts: false + vars: + valkey_version: "{{ lookup('env', 'VALKEY_VERSION') | default('7-alpine', true) }}" + valkey_image: "valkey/valkey:{{ valkey_version }}" + valkey_network_name: "pmm-qa" + valkey_password: "" + valkey_data_dir: "{{ lookup('env', 'HOME') }}/valkey/data" + valkey_config_dir: "{{ lookup('env', 'HOME') }}/valkey/config" + valkey_primary_port: 6379 + valkey_replica_count: 2 + valkey_replica_start_port: 6380 + sentinel_count: 3 + sentinel_start_port: 26379 + sentinel_quorum: 2 + + pmm_server_name: "pmm-server" + + tasks: + - name: Create Docker network + community.docker.docker_network: + name: "{{ valkey_network_name }}" + driver: bridge + state: present + + - name: Create config directory + file: + path: "{{ valkey_config_dir }}" + state: directory + mode: '0755' + + - name: Create a config directory per Sentinel + file: + path: "{{ valkey_config_dir }}/sentinel-{{ item }}" + state: directory + mode: '0755' + loop: "{{ range(1, sentinel_count + 1) | list }}" + + - name: Create data directory + file: + path: "{{ valkey_data_dir }}" + state: directory + mode: '0755' + + - name: Generate Valkey primary configuration + template: + src: valkey-primary.conf.j2 + dest: "{{ valkey_config_dir }}/valkey-primary.conf" + mode: '0644' + + - name: Generate Valkey replica configurations + template: + src: valkey-replica.conf.j2 + dest: "{{ valkey_config_dir }}/valkey-replica-{{ item }}.conf" + mode: '0644' + loop: "{{ range(1, valkey_replica_count + 1) | list }}" + + - name: Generate Sentinel configurations + template: + src: sentinel.conf.j2 + dest: "{{ valkey_config_dir }}/sentinel-{{ item }}/sentinel.conf" + mode: '0664' + loop: "{{ range(1, sentinel_count + 1) | list }}" + + - name: Generate a password if not provided + when: valkey_password == "" + set_fact: + valkey_password: "{{ lookup('community.general.random_string', length=20, min_special=5, min_upper=2, override_special='!?()[]{}:;/|@#$%&^*<>=_+-') }}" + + - name: Display generated Valkey password + debug: + msg: "Generated Valkey password: {{ valkey_password }}" + + - name: Create Docker volume for primary data + community.docker.docker_volume: + name: "valkey-primary-data" + state: present + + - name: Create Docker volumes for replica data + community.docker.docker_volume: + name: "valkey-replica-{{ item }}-data" + state: present + loop: "{{ range(1, valkey_replica_count + 1) | list }}" + + - name: Start Valkey primary container + community.docker.docker_container: + name: "valkey-primary" + image: "{{ valkey_image }}" + state: started + restart_policy: unless-stopped + networks: + - name: "{{ valkey_network_name }}" + ports: + - "{{ valkey_primary_port }}:6379" + volumes: + - "valkey-primary-data:/data" + - "{{ valkey_config_dir }}/valkey-primary.conf:/usr/local/etc/valkey/valkey.conf:ro" + command: ["valkey-server", "/usr/local/etc/valkey/valkey.conf"] + healthcheck: + test: ["CMD", "valkey-cli", "-a", "{{ valkey_password }}", "ping"] + interval: 10s + timeout: 5s + retries: 5 + + - name: Wait for the primary to be ready + wait_for: + host: localhost + port: "{{ valkey_primary_port }}" + timeout: 30 + delay: 1 + + - name: Start Valkey replica containers + community.docker.docker_container: + name: "valkey-replica-{{ item }}" + image: "{{ valkey_image }}" + state: started + restart_policy: unless-stopped + networks: + - name: "{{ valkey_network_name }}" + ports: + - "{{ valkey_replica_start_port + item - 1 }}:6379" + volumes: + - "valkey-replica-{{ item }}-data:/data" + - "{{ valkey_config_dir }}/valkey-replica-{{ item }}.conf:/usr/local/etc/valkey/valkey.conf:ro" + command: ["valkey-server", "/usr/local/etc/valkey/valkey.conf"] + healthcheck: + test: ["CMD", "valkey-cli", "-a", "{{ valkey_password }}", "ping"] + interval: 10s + timeout: 5s + retries: 5 + loop: "{{ range(1, valkey_replica_count + 1) | list }}" + + - name: Wait for replicas to be ready + wait_for: + host: localhost + port: "{{ valkey_replica_start_port + item - 1 }}" + timeout: 30 + delay: 1 + loop: "{{ range(1, valkey_replica_count + 1) | list }}" + + - name: Start Sentinel containers + community.docker.docker_container: + name: "sentinel-{{ item }}" + image: "{{ valkey_image }}" + state: started + restart_policy: unless-stopped + networks: + - name: "{{ valkey_network_name }}" + ports: + - "{{ sentinel_start_port + item - 1 }}:26379" + volumes: + - "{{ valkey_config_dir }}/sentinel-{{ item }}:/usr/local/etc/valkey" + command: ["valkey-sentinel", "/usr/local/etc/valkey/sentinel.conf"] + healthcheck: + test: ["CMD", "valkey-cli", "-p", "{{ sentinel_start_port }}", "ping"] + interval: 10s + timeout: 5s + retries: 5 + loop: "{{ range(1, sentinel_count + 1) | list }}" + + - name: Wait for Sentinels to be ready + wait_for: + host: localhost + port: "{{ sentinel_start_port + item - 1 }}" + timeout: 30 + delay: 1 + loop: "{{ range(1, sentinel_count + 1) | list }}" + + - name: Verify cluster status + community.docker.docker_container_exec: + container: "valkey-primary" + command: valkey-cli -a "{{ valkey_password }}" info replication + register: cluster_status + + - name: Display cluster status + debug: + msg: "{{ cluster_status.stdout_lines }}" + + - name: Run Sentinel status command + community.docker.docker_container_exec: + container: "sentinel-1" + command: valkey-cli -p {{ sentinel_start_port }} sentinel masters + register: sentinel_status + + - name: Display Sentinel status + debug: + msg: "{{ sentinel_status.stdout_lines }}" + + - name: Add the primary to monitoring + community.docker.docker_container_exec: + container: "{{ pmm_server_name }}" + command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-primary-svc --host=valkey-primary --port=6379 --custom-labels='role=primary' + ignore_errors: yes + + - name: Add the replicas to monitoring + community.docker.docker_container_exec: + container: "{{ pmm_server_name }}" + command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-replica{{ item }}-svc --host=valkey-replica-{{ item }} --port=6379 --custom-labels='role=replica' + loop: "{{ range(1, valkey_replica_count + 1) | list }}" + ignore_errors: yes + + - name: Add Sentinels to monitoring + community.docker.docker_container_exec: + container: "{{ pmm_server_name }}" + command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' + loop: "{{ range(1, sentinel_count + 1) | list }}" + ignore_errors: yes \ No newline at end of file From d96568dfb7c99106d3511861f78ffc09850d515b Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 09:22:48 +0100 Subject: [PATCH 02/14] PMM-14170 Fixes peter review --- pmm_qa/valkey/valkey.yml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 423df45..3b3f419 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -6,7 +6,7 @@ valkey_version: "{{ lookup('env', 'VALKEY_VERSION') | default('7-alpine', true) }}" valkey_image: "valkey/valkey:{{ valkey_version }}" valkey_network_name: "pmm-qa" - valkey_password: "" + valkey_password: "VKvl41568AsE" valkey_data_dir: "{{ lookup('env', 'HOME') }}/valkey/data" valkey_config_dir: "{{ lookup('env', 'HOME') }}/valkey/config" valkey_primary_port: 6379 @@ -64,15 +64,6 @@ mode: '0664' loop: "{{ range(1, sentinel_count + 1) | list }}" - - name: Generate a password if not provided - when: valkey_password == "" - set_fact: - valkey_password: "{{ lookup('community.general.random_string', length=20, min_special=5, min_upper=2, override_special='!?()[]{}:;/|@#$%&^*<>=_+-') }}" - - - name: Display generated Valkey password - debug: - msg: "Generated Valkey password: {{ valkey_password }}" - - name: Create Docker volume for primary data community.docker.docker_volume: name: "valkey-primary-data" @@ -188,22 +179,33 @@ debug: msg: "{{ sentinel_status.stdout_lines }}" + - name: Install PMM Client in each container + ansible.builtin.include_tasks: ../tasks/install_pmm_client.yml + loop: >- + {{ ['valkey-primary'] + + range(1, valkey_replica_count | int + 1) | map('format', 'valkey-replica-%d') | list + + range(1, sentinel_count | int + 1) | map('format', 'sentinel-%d') | list }} + loop_control: + loop_var: current_container_name + vars: + container_name: "{{ current_container_name }}" + - name: Add the primary to monitoring community.docker.docker_container_exec: - container: "{{ pmm_server_name }}" + container: "valkey-primary" command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-primary-svc --host=valkey-primary --port=6379 --custom-labels='role=primary' ignore_errors: yes - name: Add the replicas to monitoring community.docker.docker_container_exec: - container: "{{ pmm_server_name }}" + container: "valkey-replica-{{ item }}" command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-replica{{ item }}-svc --host=valkey-replica-{{ item }} --port=6379 --custom-labels='role=replica' loop: "{{ range(1, valkey_replica_count + 1) | list }}" ignore_errors: yes - name: Add Sentinels to monitoring community.docker.docker_container_exec: - container: "{{ pmm_server_name }}" + container: "sentinel-{{ item }}" command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' loop: "{{ range(1, sentinel_count + 1) | list }}" ignore_errors: yes \ No newline at end of file From 757685a50ab258130a521a7af17abe1d805361df Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 09:23:30 +0100 Subject: [PATCH 03/14] PMM-14170 Fix peter comments --- pmm_qa/valkey/valkey.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 3b3f419..19d72c6 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -208,4 +208,5 @@ container: "sentinel-{{ item }}" command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' loop: "{{ range(1, sentinel_count + 1) | list }}" - ignore_errors: yes \ No newline at end of file + ignore_errors: yes + \ No newline at end of file From 19f6607cce7187a152053f356f3875e37b4cc109 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 09:40:06 +0100 Subject: [PATCH 04/14] PMM-14170 Fix comments --- pmm_qa/valkey/valkey.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 19d72c6..8d154a9 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -183,8 +183,8 @@ ansible.builtin.include_tasks: ../tasks/install_pmm_client.yml loop: >- {{ ['valkey-primary'] + - range(1, valkey_replica_count | int + 1) | map('format', 'valkey-replica-%d') | list + - range(1, sentinel_count | int + 1) | map('format', 'sentinel-%d') | list }} + range(1, valkey_replica_count | int + 1) | map('format', 'valkey-replica-{}') | list + + range(1, sentinel_count | int + 1) | map('format', 'sentinel-{}') | list }} loop_control: loop_var: current_container_name vars: @@ -209,4 +209,3 @@ command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' loop: "{{ range(1, sentinel_count + 1) | list }}" ignore_errors: yes - \ No newline at end of file From 7f93196edcd4d86c5145e154b70a08adb86302bf Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:10:31 +0100 Subject: [PATCH 05/14] PMM-14170 Fix loop for pmm client --- pmm_qa/valkey/valkey.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 8d154a9..531ce2b 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -182,9 +182,10 @@ - name: Install PMM Client in each container ansible.builtin.include_tasks: ../tasks/install_pmm_client.yml loop: >- - {{ ['valkey-primary'] + - range(1, valkey_replica_count | int + 1) | map('format', 'valkey-replica-{}') | list + - range(1, sentinel_count | int + 1) | map('format', 'sentinel-{}') | list }} + {{ ['valkey-primary'] + + (lookup('ansible.builtin.sequence', 'count=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) + + (lookup('ansible.builtin.sequence', 'count=' + (sentinel_count | string), format='sentinel-%d') | list) + }} loop_control: loop_var: current_container_name vars: From ad93b342496a25398b6cc7c19b84edbd00d7779c Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:37:48 +0100 Subject: [PATCH 06/14] PMM-14170 Variables setup --- pmm_qa/valkey/valkey.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 531ce2b..66ff720 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -3,6 +3,9 @@ hosts: localhost gather_facts: false vars: + pmm_server_ip: "{{ lookup('vars', 'extra_pmm_server_ip', default=lookup('env','PMM_SERVER_IP') | default('127.0.0.1', true) ) }}" + metrics_mode: "{{ lookup('env', 'metrics_mode') }}" + client_version: "{{ lookup('vars', 'extra_client_version', default=lookup('env','CLIENT_VERSION') | default('3-dev-latest', true) ) }}" valkey_version: "{{ lookup('env', 'VALKEY_VERSION') | default('7-alpine', true) }}" valkey_image: "valkey/valkey:{{ valkey_version }}" valkey_network_name: "pmm-qa" From e7d79f88ad1b75f1e7548019ade91c27d2849d45 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:46:54 +0100 Subject: [PATCH 07/14] PMM-14170 Fix OL-10 Password --- pmm_qa/valkey/valkey.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 66ff720..da3c2ae 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -6,6 +6,7 @@ pmm_server_ip: "{{ lookup('vars', 'extra_pmm_server_ip', default=lookup('env','PMM_SERVER_IP') | default('127.0.0.1', true) ) }}" metrics_mode: "{{ lookup('env', 'metrics_mode') }}" client_version: "{{ lookup('vars', 'extra_client_version', default=lookup('env','CLIENT_VERSION') | default('3-dev-latest', true) ) }}" + admin_password: "{{ lookup('vars', 'extra_admin_password', default=lookup('env','ADMIN_PASSWORD') | default('admin', true) ) }}" valkey_version: "{{ lookup('env', 'VALKEY_VERSION') | default('7-alpine', true) }}" valkey_image: "valkey/valkey:{{ valkey_version }}" valkey_network_name: "pmm-qa" From b977b2376810948762393b5138160033d216a52c Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:02:17 +0100 Subject: [PATCH 08/14] PMM-14170 fix loop --- pmm_qa/valkey/valkey.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index da3c2ae..8d4f82f 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -183,13 +183,17 @@ debug: msg: "{{ sentinel_status.stdout_lines }}" + - name: Set container list for PMM client install + set_fact: + pmm_client_containers: >- + {{ ['valkey-primary'] + + (lookup('ansible.builtin.sequence', 'count=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) + + (lookup('ansible.builtin.sequence', 'count=' + (sentinel_count | string), format='sentinel-%d') | list) + }} + - name: Install PMM Client in each container ansible.builtin.include_tasks: ../tasks/install_pmm_client.yml - loop: >- - {{ ['valkey-primary'] - + (lookup('ansible.builtin.sequence', 'count=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) - + (lookup('ansible.builtin.sequence', 'count=' + (sentinel_count | string), format='sentinel-%d') | list) - }} + loop: "{{ pmm_client_containers }}" loop_control: loop_var: current_container_name vars: From ab8d42a06615d5a1ec2d12f05f90ae46919677f3 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:18:31 +0100 Subject: [PATCH 09/14] test --- pmm_qa/valkey/valkey.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 8d4f82f..1716eda 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -187,8 +187,8 @@ set_fact: pmm_client_containers: >- {{ ['valkey-primary'] - + (lookup('ansible.builtin.sequence', 'count=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) - + (lookup('ansible.builtin.sequence', 'count=' + (sentinel_count | string), format='sentinel-%d') | list) + + (lookup('ansible.builtin.sequence', 'start=1 end=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) + + (lookup('ansible.builtin.sequence', 'start=1 end=' + (sentinel_count | string), format='sentinel-%d') | list) }} - name: Install PMM Client in each container From a88c3d1bb05fd71c065e5f7a173db8c3a40574c4 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:34:10 +0100 Subject: [PATCH 10/14] test loop --- pmm_qa/valkey/valkey.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 1716eda..622444f 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -187,8 +187,8 @@ set_fact: pmm_client_containers: >- {{ ['valkey-primary'] - + (lookup('ansible.builtin.sequence', 'start=1 end=' + (valkey_replica_count | string), format='valkey-replica-%d') | list) - + (lookup('ansible.builtin.sequence', 'start=1 end=' + (sentinel_count | string), format='sentinel-%d') | list) + + (range(1, valkey_replica_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'valkey-replica-\\1') | list) + + (range(1, sentinel_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'sentinel-\\1') | list) }} - name: Install PMM Client in each container From 1f6ade24052d7ccd464b873da5478b6d396f56cf Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:07:38 +0100 Subject: [PATCH 11/14] test loop --- pmm_qa/valkey/valkey.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 622444f..d4ab3bf 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -183,17 +183,13 @@ debug: msg: "{{ sentinel_status.stdout_lines }}" - - name: Set container list for PMM client install - set_fact: - pmm_client_containers: >- - {{ ['valkey-primary'] - + (range(1, valkey_replica_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'valkey-replica-\\1') | list) - + (range(1, sentinel_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'sentinel-\\1') | list) - }} - - name: Install PMM Client in each container ansible.builtin.include_tasks: ../tasks/install_pmm_client.yml - loop: "{{ pmm_client_containers }}" + loop: >- + {{ ['valkey-primary'] + + (range(1, valkey_replica_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'valkey-replica-\1') | list) + + (range(1, sentinel_count + 1) | map('string') | map('regex_replace', '^(.*)$', 'sentinel-\1') | list) + }} loop_control: loop_var: current_container_name vars: From 978dd01de86ae322210191e02ccd1f2edcad53b0 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Thu, 11 Sep 2025 10:16:31 +0100 Subject: [PATCH 12/14] PMM-14170 Review of Peter --- pmm_qa/scripts/database_options.py | 2 +- pmm_qa/valkey/sentinel.conf.j2 | 2 +- pmm_qa/valkey/valkey-primary.conf.j2 | 2 +- pmm_qa/valkey/valkey-replica.conf.j2 | 2 +- pmm_qa/valkey/valkey.yml | 6 +++++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pmm_qa/scripts/database_options.py b/pmm_qa/scripts/database_options.py index 46028d6..c6dd7b1 100644 --- a/pmm_qa/scripts/database_options.py +++ b/pmm_qa/scripts/database_options.py @@ -78,7 +78,7 @@ "configurations": {"BUCKET_NAMES": 'bcp'} }, "VALKEY": { - "versions": ["7-alpine", "8-bookworm"], + "versions": ["7", "8"], "configurations": {"CLIENT_VERSION": "3-dev-latest", "SETUP_TYPE": "", "TARBALL": ""} } } diff --git a/pmm_qa/valkey/sentinel.conf.j2 b/pmm_qa/valkey/sentinel.conf.j2 index 9137777..d8d7536 100644 --- a/pmm_qa/valkey/sentinel.conf.j2 +++ b/pmm_qa/valkey/sentinel.conf.j2 @@ -19,4 +19,4 @@ protected-mode no # Logging loglevel notice -logfile "" \ No newline at end of file +logfile "" diff --git a/pmm_qa/valkey/valkey-primary.conf.j2 b/pmm_qa/valkey/valkey-primary.conf.j2 index 40fcff2..d492387 100644 --- a/pmm_qa/valkey/valkey-primary.conf.j2 +++ b/pmm_qa/valkey/valkey-primary.conf.j2 @@ -24,4 +24,4 @@ loglevel notice logfile "" # Memory management -maxmemory-policy allkeys-lru \ No newline at end of file +maxmemory-policy allkeys-lru diff --git a/pmm_qa/valkey/valkey-replica.conf.j2 b/pmm_qa/valkey/valkey-replica.conf.j2 index d794973..c1667da 100644 --- a/pmm_qa/valkey/valkey-replica.conf.j2 +++ b/pmm_qa/valkey/valkey-replica.conf.j2 @@ -25,4 +25,4 @@ loglevel notice logfile "" # Memory management -maxmemory-policy allkeys-lru \ No newline at end of file +maxmemory-policy allkeys-lru diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index d4ab3bf..314ea55 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -7,7 +7,11 @@ metrics_mode: "{{ lookup('env', 'metrics_mode') }}" client_version: "{{ lookup('vars', 'extra_client_version', default=lookup('env','CLIENT_VERSION') | default('3-dev-latest', true) ) }}" admin_password: "{{ lookup('vars', 'extra_admin_password', default=lookup('env','ADMIN_PASSWORD') | default('admin', true) ) }}" - valkey_version: "{{ lookup('env', 'VALKEY_VERSION') | default('7-alpine', true) }}" + valkey_version_input: "{{ lookup('env', 'VALKEY_VERSION') | default('7', true) }}" + valkey_version_map: + '7': '7-alpine' + '8': '8-bookworm' + valkey_version: "{{ valkey_version_map[valkey_version_input] }}" valkey_image: "valkey/valkey:{{ valkey_version }}" valkey_network_name: "pmm-qa" valkey_password: "VKvl41568AsE" From fc575ee5ee8e50fea064ed67236b8383fd88b8fe Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Thu, 11 Sep 2025 10:49:39 +0100 Subject: [PATCH 13/14] PMM-14170 Update cleanup.sh --- pmm_qa/valkey/cleanup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmm_qa/valkey/cleanup.sh b/pmm_qa/valkey/cleanup.sh index 9f11258..63be418 100644 --- a/pmm_qa/valkey/cleanup.sh +++ b/pmm_qa/valkey/cleanup.sh @@ -12,4 +12,4 @@ docker rm -vf sentinel-1 sentinel-2 sentinel-3 || : docker volume rm -f valkey-primary-data valkey-replica-1-data valkey-replica-2-data || : -rm -rf "$HOME/valkey" \ No newline at end of file +rm -rf "$HOME/valkey" From 9717f22670463a2fa6e12f6103e872aca2b80c96 Mon Sep 17 00:00:00 2001 From: travagliad <215686151+travagliad@users.noreply.github.com> Date: Thu, 11 Sep 2025 11:53:02 +0100 Subject: [PATCH 14/14] PMM-14170 Review from Vasyl --- pmm_qa/valkey/valkey.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pmm_qa/valkey/valkey.yml b/pmm_qa/valkey/valkey.yml index 314ea55..825e61c 100644 --- a/pmm_qa/valkey/valkey.yml +++ b/pmm_qa/valkey/valkey.yml @@ -23,6 +23,7 @@ sentinel_count: 3 sentinel_start_port: 26379 sentinel_quorum: 2 + random_number: "{{ lookup('pipe', 'shuf -i 1-99999 -n 1') }}" pmm_server_name: "pmm-server" @@ -202,19 +203,19 @@ - name: Add the primary to monitoring community.docker.docker_container_exec: container: "valkey-primary" - command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-primary-svc --host=valkey-primary --port=6379 --custom-labels='role=primary' + command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-primary-svc-{{ random_number }} --host=valkey-primary --port=6379 --custom-labels='role=primary' ignore_errors: yes - name: Add the replicas to monitoring community.docker.docker_container_exec: container: "valkey-replica-{{ item }}" - command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-replica{{ item }}-svc --host=valkey-replica-{{ item }} --port=6379 --custom-labels='role=replica' + command: pmm-admin add valkey --cluster=valkey-cluster --replication-set=valkey-repl --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=valkey-replica{{ item }}-svc-{{ random_number }} --host=valkey-replica-{{ item }} --port=6379 --custom-labels='role=replica' loop: "{{ range(1, valkey_replica_count + 1) | list }}" ignore_errors: yes - name: Add Sentinels to monitoring community.docker.docker_container_exec: container: "sentinel-{{ item }}" - command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' + command: pmm-admin add valkey --cluster=valkey-cluster --environment=valkey-test --username=default --password="{{ valkey_password }}" --service-name=sentinel{{ item }}-svc-{{ random_number }} --host=sentinel-{{ item }} --port={{ sentinel_start_port }} --custom-labels='role=sentinel' loop: "{{ range(1, sentinel_count + 1) | list }}" ignore_errors: yes