Skip to content

Commit 556d25b

Browse files
authoredJun 24, 2025··
PMM-7: Fixes for PMM 3.3.0 (#148) (#149)
* PMM-7: Fix pmm server port * PMM-7: Fix pmm server port * PMM-7: 8.4 as default ps * PMM-7: 8.4 as default ps * PMM-7: road on pdpgsql * PMM-7: road on pdpgsql * PMM-7: road on pdpgsql * PMM-7: load on pdpgsql * PMM-7: load on pdpgsql * PMM-7: load on pdpgsql * PMM-7: load on pdpgsql * PMM-7: load on pdpgsql * PMM-7: Correct name for client instalation file * PMM-7: minio credentials * PMM-7: minio credentials * PMM-7: minio credentials * PMM-7: minio credentials * PMM-7: minio credentials * PMM-7: minio credentials * PMM-7: New buckets * PMM-7: Configure agents * PMM-7: Configure agents * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Minio * PMM-7: Code cleanup * PMM-7: Code cleanup * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Default value for bucket * PMM-7: Add load to pgsql replication * PMM-7: Add load to pgsql replication * PMM-7: Add load to pgsql replication * PMM-7: Add load to pgsql replication * PMM-7: Add load to pgsql replication * PMM-7: Add load to pgsql replication * PMM-7: background load * PMM-7: background load * PMM-7: background load * PMM-7: background load * PMM-7: background load * PMM-7: background load * PMM-7: background load * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: cluster and env * PMM-7: install pgsm * PMM-7: install pgsm * PMM-7: install pgsm * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: log * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup * PMM-7: cleanup

File tree

7 files changed

+201
-51
lines changed

7 files changed

+201
-51
lines changed
 

‎pmm_psmdb_diffauth_setup/test-auth.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server systemctl re
5555
set +e
5656
i=1
5757
while [ $i -le 3 ]; do
58-
output=$(docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server pmm-agent setup 2>&1)
58+
output=$(docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server pmm-agent setup --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml --server-address=pmm-server:8443 --metrics-mode=auto --server-username=admin --server-password=admin --server-insecure-tls)
5959
exit_code=$?
6060

6161
if [ $exit_code -ne 0 ] && [[ $output == *"500 Internal Server Error"* ]]; then

‎pmm_qa/data/load_pgsql.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-- Step 1: Show initial buffers_alloc value
2+
SELECT 'Initial buffers_alloc' AS info, buffers_alloc FROM pg_stat_bgwriter;
3+
4+
-- Step 2: Drop and create a large test table (~500MB+)
5+
DROP TABLE IF EXISTS buffer_test;
6+
7+
CREATE TABLE buffer_test AS
8+
SELECT
9+
generate_series(1, 1_000_000) AS id,
10+
md5(random()::text) AS filler;
11+
12+
ANALYZE buffer_test;
13+
14+
-- Step 3: Perform repeated full-table scans to stress buffer allocation
15+
DO $$
16+
BEGIN
17+
FOR i IN 1..10 LOOP
18+
RAISE NOTICE 'Running scan iteration %', i;
19+
PERFORM COUNT(*) FROM buffer_test;
20+
END LOOP;
21+
END $$;
22+
23+
---- Step 4: Show final buffers_alloc value
24+
--SELECT 'Final buffers_alloc' AS info, buffers_alloc FROM pg_stat_bgwriter;
25+
VACUUM;
26+
SELECT pg_switch_wal();
27+
28+
-- Step 5: Query the data
29+
SELECT * FROM buffer_test;
30+
31+
-- Step 6: Delete the data
32+
DELETE FROM buffer_test;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
-- Step 1: Create a test table
2+
CREATE TABLE IF NOT EXISTS test_users (
3+
id SERIAL PRIMARY KEY,
4+
name VARCHAR(100),
5+
email VARCHAR(150),
6+
created_at TIMESTAMP DEFAULT NOW(),
7+
bio TEXT
8+
);
9+
10+
-- Step 2: Insert 10,000 rows
11+
INSERT INTO test_users (name, email, bio)
12+
SELECT
13+
'User_' || gs::TEXT AS name,
14+
'user_' || gs::TEXT || '@example.com' AS email,
15+
'This is a generated bio for user #' || gs::TEXT
16+
FROM generate_series(1, 10000) AS gs;
17+
18+
-- Step 3: Query the data
19+
SELECT * FROM test_users;
20+
21+
-- Step 4: Delete the data
22+
DELETE FROM test_users;
23+
24+
-- Step 5: Drop the table
25+
DROP TABLE test_users;

‎pmm_qa/percona-distribution-postgresql/data/postgresql-primary.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
wal_level = replica
1+
wal_level = logical
22
max_wal_senders = 10
33
wal_keep_size = 64MB
44
hot_standby = on

‎pmm_qa/percona-distribution-postgresql/tasks/percona-distribution-postgres-patroni-setup.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
set_fact:
33
nodes_count: 3
44
when: nodes_count | int < 3
5+
- name: Set external facing port in patroni setup
6+
set_fact:
7+
pdpgsql_port: 6432
58

69
- name: Remove old data folders
710
shell: 'rm -fr {{ data_dir }}'
@@ -173,14 +176,19 @@
173176
- name: Add service to pmm server
174177
community.docker.docker_container_exec:
175178
container: "pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}"
176-
command: pmm-admin add postgresql --username=postgres --password=postgres --query-source=pgstatmonitor pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:5432
179+
command: pmm-admin add postgresql --username=postgres --cluster=pdpgsql_patroni_cluster --environment=pdpgsql_patroni_environment --password=postgres --query-source=pgstatmonitor pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:5432
177180
loop: "{{ range(1, nodes_count | int + 1) | list }}"
178181

182+
- name: Add patroni service to pmm server
183+
community.docker.docker_container_exec:
184+
container: "pdpgsql_pmm_patroni_{{ pg_version }}_1"
185+
command: pmm-admin add external --listen-port=8008 --service-name=patroni_service_1{{ random_service_name_value }}
186+
179187
- name: Add patroni service to pmm server
180188
community.docker.docker_container_exec:
181189
container: "pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}"
182-
command: pmm-admin add external --listen-port=8008 --service-name=patroni_service_{{ item }}{{ random_service_name_value }}
183-
loop: "{{ range(1, nodes_count | int + 1) | list }}"
190+
command: pmm-admin add external --listen-port=8008 --cluster=pdpgsql_patroni_service_cluster --environment=pdpgsql_patroni_service_environment --service-name=patroni_service_{{ item }}{{ random_service_name_value }}
191+
loop: "{{ range(2, nodes_count | int + 1) | list }}"
184192

185193
- name: Log Patroni cluster
186194
community.docker.docker_container_exec:

‎pmm_qa/percona-distribution-postgresql/tasks/percona-distribution-postgres-replication-setup.yml

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@
3636

3737
- name: Remove old PostgreSQL primary container
3838
community.docker.docker_container:
39-
name: "pdpgsql_pmm_{{ pg_version }}_1"
39+
name: "pdpgsql_pmm_replication_{{ pg_version }}_1"
4040
image: "{{ docker_repo }}:{{ pg_version }}"
4141
restart_policy: always
4242
state: absent
4343
ignore_errors: yes
4444

4545
- name: Start PostgreSQL primary container
4646
community.docker.docker_container:
47-
name: "pdpgsql_pmm_{{ pg_version }}_1"
47+
name: "pdpgsql_pmm_replication_{{ pg_version }}_1"
4848
image: "{{ docker_repo }}:{{ pg_version }}"
4949
restart_policy: always
5050
state: started
@@ -70,7 +70,7 @@
7070

7171
- name: Create replication user
7272
community.docker.docker_container_exec:
73-
container: "pdpgsql_pmm_{{ pg_version }}_1"
73+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
7474
user: postgres
7575
command: >
7676
psql -c "
@@ -79,14 +79,14 @@
7979
8080
- name: Stop and remove replica if exists
8181
community.docker.docker_container:
82-
name: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
82+
name: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
8383
state: absent
8484
loop: "{{ range(2, nodes_count | int + 1) | list }}"
8585
ignore_errors: yes
8686

8787
- name: Start Percona Distribution PostgreSQL replica container
8888
community.docker.docker_container:
89-
name: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
89+
name: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
9090
image: "{{ docker_repo }}:{{ pg_version }}"
9191
restart_policy: "no"
9292
state: started
@@ -104,14 +104,14 @@
104104

105105
- name: Wipe replica data directory before basebackup
106106
community.docker.docker_container_exec:
107-
container: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
107+
container: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
108108
user: root
109109
command: rm -rf /data/db/*
110110
loop: "{{ range(2, nodes_count | int + 1) | list }}"
111111

112112
- name: Create PostgreSQL user 'pmm' with password
113113
community.docker.docker_container_exec:
114-
container: "pdpgsql_pmm_{{ pg_version }}_1"
114+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
115115
user: postgres
116116
command: >
117117
bash -c '
@@ -121,16 +121,16 @@
121121
"
122122
'
123123
124-
- name: Create custom database for pgbench
124+
- name: Create custom database
125125
community.docker.docker_container_exec:
126-
container: "pdpgsql_pmm_{{ pg_version }}_1"
126+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
127127
user: postgres
128128
command: >
129129
bash -c "
130130
echo \"
131-
CREATE DATABASE pgbench;
132-
\\c pgbench
133-
GRANT CONNECT ON DATABASE pgbench TO pmm;
131+
CREATE DATABASE test_database;
132+
\\c test_database
133+
GRANT CONNECT ON DATABASE test_database TO pmm;
134134
GRANT USAGE ON SCHEMA public TO pmm;
135135
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO pmm;
136136
ALTER DEFAULT PRIVILEGES IN SCHEMA public
@@ -140,20 +140,20 @@
140140
141141
- name: Run pg_basebackup from primary to replica
142142
community.docker.docker_container_exec:
143-
container: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
143+
container: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
144144
user: root
145145
command: >
146146
bash -c "
147147
export PGPASSWORD='{{ replication_password }}' && \
148148
timeout 120s \
149149
pg_basebackup --pgdata=/data/db -R -v -Fp -Xs -P \
150-
--host=pdpgsql_pmm_{{ pg_version }}_1 --port=5432 -U {{ replication_user }} > /tmp/pg_basebackup.log 2>&1
150+
--host=pdpgsql_pmm_replication_{{ pg_version }}_1 --port=5432 -U {{ replication_user }} > /tmp/pg_basebackup.log 2>&1
151151
"
152152
loop: "{{ range(2, nodes_count | int + 1) | list }}"
153153

154154
- name: Remove temporary backup container
155155
docker_container:
156-
name: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
156+
name: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
157157
state: absent
158158
loop: "{{ range(2, nodes_count | int + 1) | list }}"
159159

@@ -168,7 +168,7 @@
168168

169169
- name: Restart Percona Distribution PostgreSQL container with custom command
170170
community.docker.docker_container:
171-
name: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
171+
name: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
172172
image: "{{ docker_repo }}:{{ pg_version }}"
173173
restart: true
174174
state: started
@@ -188,17 +188,17 @@
188188
- name: Install pg stat monitor.
189189
include_tasks: ./tasks/install_pg_stat-monitor.yml
190190
vars:
191-
container_name: "pdpgsql_pmm_{{ pg_version }}"
191+
container_name: "pdpgsql_pmm_replication_{{ pg_version }}"
192192

193193
- name: Install and add pmm client.
194194
include_tasks: ../tasks/install_pmm_client.yml
195195
vars:
196-
container_name: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
196+
container_name: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
197197
loop: "{{ range(1, nodes_count | int + 1) | list }}"
198198

199199
- name: Get already connected services to pmm server
200200
community.docker.docker_container_exec:
201-
container: "pdpgsql_pmm_{{ pg_version }}_1"
201+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
202202
command: >
203203
sh -c 'curl --location --insecure -u"admin:{{ admin_password }}" -s --request GET "http://{{ pmm_server_ip }}:{{ '80' if pmm_server_ip is ansible.utils.ipv4 else '8080' }}/v1/management/services" | jq -r ".services[].service_name"'
204204
register: pmm_server_services
@@ -217,20 +217,57 @@
217217

218218
- name: Add service to pmm server
219219
community.docker.docker_container_exec:
220-
container: "pdpgsql_pmm_{{ pg_version }}_{{ item }}"
221-
command: pmm-admin add postgresql --username=pmm --password=pmm --query-source=pgstatmonitor pdpgsql_pmm_{{ pg_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:5432
220+
container: "pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}"
221+
command: pmm-admin add postgresql --username=pmm --password=pmm --cluster=pdpgsql_replication_cluster --environment=pdpgsql_replication_environment --query-source=pgstatmonitor pdpgsql_pmm_replication_{{ pg_version }}_{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:5432
222222
loop: "{{ range(1, nodes_count | int + 1) | list }}"
223223

224-
- name: Run load on primary node.
225-
include_tasks: ../postgresql/tasks/run_load_pgsql.yml
226-
vars:
227-
node_name: "pdpgsql_pmm_{{ pg_version }}_1"
228-
pgbench_clients: 10
229-
pgbench_time: 120
230-
pgbench_scale: 1000
224+
- name: Create pg_custom_publication view using psql
225+
community.docker.docker_container_exec:
226+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
227+
user: postgres
228+
command: >
229+
bash -c 'psql -U postgres -d postgres <<SQL
230+
CREATE OR REPLACE VIEW pg_custom_publication AS
231+
SELECT
232+
pubname,
233+
puballtables,
234+
pubinsert,
235+
pubupdate,
236+
pubdelete
237+
FROM
238+
pg_publication;
239+
SQL'
240+
241+
- name: Create pg_stat_statements extension
242+
community.docker.docker_container_exec:
243+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
244+
user: postgres
245+
command: >
246+
psql -U postgres -d test_database -c "
247+
CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;
248+
SELECT pg_stat_monitor_version();
249+
"
250+
251+
- name: Copy sample load into container
252+
community.docker.docker_container_copy_into:
253+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
254+
path: ../data/load_pgsql.sql
255+
container_path: /load_pgsql.sql
256+
257+
- name: Start permanent SQL load in background
258+
community.docker.docker_container_exec:
259+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
260+
command: >
261+
sh -c "nohup bash -c 'while true; do echo Starting insert at $(date +\"%Y-%m-%d %H:%M:%S\"); psql -U postgres -d test_database -f /load_pgsql.sql; sleep 30; done' > /tmp/sql_loop.log 2>&1 &"
262+
263+
- name: Create logical replication slots
264+
community.docker.docker_container_exec:
265+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
266+
user: postgres
267+
command: psql -U postgres -d postgres -c "SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');"
231268

232269
- name: Check replication status on primary
233270
community.docker.docker_container_exec:
234-
container: "pdpgsql_pmm_{{ pg_version }}_1"
271+
container: "pdpgsql_pmm_replication_{{ pg_version }}_1"
235272
user: postgres
236273
command: psql -c "SELECT * FROM pg_stat_replication;"

‎pmm_qa/pmm-framework.py

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import sys
55
import requests
66
import re
7+
import shutil
8+
import yaml
79
from scripts.get_env_value import get_value
810
from scripts.database_options import database_options as database_configs
911
from scripts.run_ansible_playbook import run_ansible_playbook
@@ -591,6 +593,7 @@ def mongo_ssl_setup(script_filename, args):
591593
# Temporary docker compose filename
592594
compose_filename = f'docker-compose-psmdb.yml'
593595
compose_file_path = scripts_path + compose_filename
596+
compose_file_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/pmm_psmdb_diffauth_setup/'
594597

595598
# Create pmm-qa n/w used in workaround
596599
result = subprocess.run(['docker', 'network', 'inspect', 'pmm-qa'], capture_output=True)
@@ -601,27 +604,72 @@ def mongo_ssl_setup(script_filename, args):
601604
# Add workaround (copy files) till sharding only support is ready.
602605
try:
603606
if no_server:
604-
# Search & Replace content in the temporary compose files
605-
subprocess.run(
606-
['cp', f'{scripts_path}docker-compose-pmm-psmdb.yml', f'{compose_file_path}'])
607+
shutil.copy(compose_file_folder + 'docker-compose-pmm-psmdb.yml', compose_file_folder + compose_filename)
608+
print(f'File location is: {compose_file_folder + compose_filename}')
607609
admin_password = os.getenv('ADMIN_PASSWORD') or args.pmm_server_password or 'admin'
608-
subprocess.run(['sed', '-i', f's/PMM_AGENT_SERVER_PASSWORD=admin/PMM_AGENT_SERVER_PASSWORD={admin_password}/g', f'{compose_file_path}'])
609-
subprocess.run(['sed', '-i', '/container_name/a\\ networks:\\\\n \\\\- pmm-qa', f'{compose_file_path}'])
610-
subprocess.run(['sed', '-i', '$a\\\nnetworks:\\\n pmm-qa:\\\n name: pmm-qa\\\n external: true',
611-
f'{compose_file_path}'])
612-
subprocess.run(['sed', '-i',
613-
'/ depends_on:/{N;N;N;/ depends_on:\\\n pmm-server:\\\n condition: service_healthy/d;}',
614-
f'{compose_file_path}'])
615-
subprocess.run(['sed', '-i', '/^ pmm-server:/,/^$/{/^ ldap-server:/!d}', f'{compose_file_path}'])
610+
with open(compose_file_folder + compose_filename, 'r') as f:
611+
data = yaml.safe_load(f)
612+
613+
if 'services' in data and 'pmm-server' in data['services']:
614+
del data['services']['pmm-server']
615+
616+
if 'services' in data and 'kerberos' in data['services']:
617+
del data['services']['kerberos']
618+
619+
if 'pmm-agent setup 2' in data:
620+
data = data.replace('pmm-agent setup 2', 'pmm-agent setup --server-insecure-tls 2')
621+
622+
for service in data.get('services', {}).values():
623+
networks = service.get('networks', [])
624+
if isinstance(networks, list):
625+
if 'pmm-qa' not in networks:
626+
networks.append('pmm-qa')
627+
service['networks'] = networks
628+
elif isinstance(networks, dict):
629+
networks['pmm-qa'] = {}
630+
else:
631+
service['networks'] = ['pmm-qa']
616632

617-
# Search replace content in-line in shell file
618-
subprocess.run(['sed', '-i', f's/pmm-agent setup 2/pmm-agent setup --server-insecure-tls 2/g',
619-
f'{shellscript_file_path}'])
620-
subprocess.run(['sed', '-i', f's/docker-compose-pmm-psmdb.yml/{compose_filename}/g',
621-
f'{shellscript_file_path}'])
622-
except subprocess.CalledProcessError as e:
633+
# Ensure the network is declared globally
634+
if 'networks' not in data:
635+
data['networks'] = {}
636+
637+
data['networks']['pmm-qa'] = {'external': True, 'name': 'pmm-qa'}
638+
639+
psmdb_service = data.get('services', {}).get('psmdb-server')
640+
if psmdb_service:
641+
env = psmdb_service.get('environment', [])
642+
643+
# If environment is a list (common in Docker Compose)
644+
if isinstance(env, list):
645+
for i, entry in enumerate(env):
646+
if entry.startswith('PMM_AGENT_SERVER_PASSWORD='):
647+
env[i] = f'PMM_AGENT_SERVER_PASSWORD={admin_password}'
648+
break
649+
else:
650+
env.append(f'PMM_AGENT_SERVER_PASSWORD={admin_password}')
651+
psmdb_service['environment'] = env
652+
653+
# If environment is a dict (less common but valid)
654+
elif isinstance(env, dict):
655+
env['PMM_AGENT_SERVER_PASSWORD'] = admin_password
656+
psmdb_service['environment'] = env
657+
658+
depends_on = psmdb_service.get('depends_on')
659+
print(f'Service depends on: {depends_on}')
660+
if 'pmm-server' in depends_on or 'kerberos' in depends_on:
661+
del psmdb_service['depends_on']
662+
663+
# Save it back
664+
with open(compose_file_path, 'w') as f:
665+
yaml.dump(data, f, sort_keys=False, default_flow_style=False)
666+
except yaml.YAMLError as e:
623667
print(f"Error occurred: {e}")
624668

669+
try:
670+
subprocess.run(['sed', '-i', f's/docker-compose-pmm-psmdb.yml/{compose_filename}/g', f'{shellscript_file_path}'])
671+
except subprocess.CalledProcessError as e:
672+
print(f"Error occurred: {e}")
625673

626674
def setup_ssl_psmdb(db_type, db_version=None, db_config=None, args=None):
627675
# Check if PMM server is running

0 commit comments

Comments
 (0)
Please sign in to comment.