diff --git a/build/crd/percona/generated/pgv2.percona.com_perconapgclusters.yaml b/build/crd/percona/generated/pgv2.percona.com_perconapgclusters.yaml index 1c42574ab..8667d110b 100644 --- a/build/crd/percona/generated/pgv2.percona.com_perconapgclusters.yaml +++ b/build/crd/percona/generated/pgv2.percona.com_perconapgclusters.yaml @@ -13633,6 +13633,8 @@ spec: - Never - IfNotPresent type: string + postgresParams: + type: string querySource: default: pgstatmonitor enum: diff --git a/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml b/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml index 9d73e1de3..9a3d3af3a 100644 --- a/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml +++ b/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml @@ -14038,6 +14038,8 @@ spec: - Never - IfNotPresent type: string + postgresParams: + type: string querySource: default: pgstatmonitor enum: diff --git a/deploy/bundle.yaml b/deploy/bundle.yaml index 25afa0bd5..ac94e5bd5 100644 --- a/deploy/bundle.yaml +++ b/deploy/bundle.yaml @@ -14331,6 +14331,8 @@ spec: - Never - IfNotPresent type: string + postgresParams: + type: string querySource: default: pgstatmonitor enum: diff --git a/deploy/cr.yaml b/deploy/cr.yaml index 43acd1b60..6a5d16faa 100644 --- a/deploy/cr.yaml +++ b/deploy/cr.yaml @@ -471,7 +471,8 @@ spec: # imagePullPolicy: IfNotPresent secret: cluster1-pmm-secret serverHost: monitoring-service -# customClusterName: "" +# customClusterName: "" +# postgresParams: "" # querySource: pgstatmonitor # patroni: # # Some values of the Liveness/Readiness probes of the patroni container are calculated using syncPeriodSeconds by the following formulas: diff --git a/deploy/crd.yaml b/deploy/crd.yaml index ae7048b33..e45f617a0 100644 --- a/deploy/crd.yaml +++ b/deploy/crd.yaml @@ -14331,6 +14331,8 @@ spec: - Never - IfNotPresent type: string + postgresParams: + type: string querySource: default: pgstatmonitor enum: diff --git a/deploy/cw-bundle.yaml b/deploy/cw-bundle.yaml index 70fed42ef..393d0e8b9 100644 --- a/deploy/cw-bundle.yaml +++ b/deploy/cw-bundle.yaml @@ -14331,6 +14331,8 @@ spec: - Never - IfNotPresent type: string + postgresParams: + type: string querySource: default: pgstatmonitor enum: diff --git a/e2e-tests/functions b/e2e-tests/functions index 7e257ee95..769f29967 100644 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -182,7 +182,8 @@ get_cr() { .spec.proxy.pgBouncer.image = "'$IMAGE_PGBOUNCER'" | .spec.pmm.image = "'$IMAGE_PMM_CLIENT'" | .spec.pmm.secret = "'${cr_name}'-pmm-secret" | - .spec.pmm.customClusterName = "'${cr_name}'-pmm-custom-name" + .spec.pmm.customClusterName = "'${cr_name}'-pmm-custom-name" | + .spec.pmm.postgresParams = "--environment=dev-postgres" ' $DEPLOY_DIR/cr.yaml >$TEMP_DIR/cr.yaml if [[ $OPENSHIFT ]]; then @@ -381,7 +382,7 @@ deploy_pmm3_server() { oc create rolebinding pmm-pg-operator-namespace-only --role percona-postgresql-operator --serviceaccount=$NAMESPACE:pmm-server -n "${NAMESPACE}" oc patch role/percona-postgresql-operator --type json -p='[{"op":"add","path": "/rules/-","value":{"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"verbs":["use"],"resourceNames":["privileged"]}}]' -n "$NAMESPACE" fi - helm install monitoring --set imageTag=${IMAGE_PMM3_SERVER#*:} --set imageRepo=${IMAGE_PMM3_SERVER%:*} --set platform=$platform --set sa=pmm-server --set supresshttp2=false https://percona-charts.storage.googleapis.com/pmm-server-${PMM3_SERVER_VERSION}.tgz -n "$NAMESPACE" + helm install monitoring --set imageTag=${IMAGE_PMM3_SERVER#*:} --set imageRepo=${IMAGE_PMM3_SERVER%:*} --set platform=$platform --set sa=pmm-server --set supresshttp2=false https://percona-charts.storage.googleapis.com/pmm-server-${PMM_SERVER_VERSION}.tgz -n "$NAMESPACE" else platform=kubernetes diff --git a/e2e-tests/tests/monitoring-pmm3/03-assert.yaml b/e2e-tests/tests/monitoring-pmm3/03-assert.yaml index 1814508fc..60da0cbc8 100644 --- a/e2e-tests/tests/monitoring-pmm3/03-assert.yaml +++ b/e2e-tests/tests/monitoring-pmm3/03-assert.yaml @@ -40,6 +40,7 @@ spec: secret: monitoring-pmm3-pmm-secret serverHost: monitoring-service customClusterName: monitoring-pmm3-pmm-custom-name + postgresParams: "--environment=dev-postgres" port: 5432 proxy: pgBouncer: diff --git a/e2e-tests/tests/monitoring/03-assert.yaml b/e2e-tests/tests/monitoring/03-assert.yaml index 495a7bf43..87a3a2bdc 100644 --- a/e2e-tests/tests/monitoring/03-assert.yaml +++ b/e2e-tests/tests/monitoring/03-assert.yaml @@ -40,6 +40,7 @@ spec: secret: monitoring-pmm-secret serverHost: monitoring-service customClusterName: monitoring-pmm-custom-name + postgresParams: "--environment=dev-postgres" port: 5432 proxy: pgBouncer: diff --git a/percona/pmm/pmm.go b/percona/pmm/pmm.go index cee351ba4..08ae2a31f 100644 --- a/percona/pmm/pmm.go +++ b/percona/pmm/pmm.go @@ -238,10 +238,16 @@ func sidecarContainerV2(pgc *v2.PerconaPGCluster) corev1.Container { if pgc.Spec.PMM.CustomClusterName != "" { clusterName = pgc.Spec.PMM.CustomClusterName } - container.Env = append(container.Env, corev1.EnvVar{ - Name: "CLUSTER_NAME", - Value: clusterName, - }) + container.Env = append(container.Env, + corev1.EnvVar{ + Name: "CLUSTER_NAME", + Value: clusterName, + }, + corev1.EnvVar{ + Name: "PMM_POSTGRES_PARAMS", + Value: pmmSpec.PostgresParams, + }, + ) } return container @@ -434,6 +440,10 @@ func sidecarContainerV3(pgc *v2.PerconaPGCluster) corev1.Container { Name: "CLUSTER_NAME", Value: clusterName, }, + { + Name: "PMM_POSTGRES_PARAMS", + Value: pmmSpec.PostgresParams, + }, }, } @@ -461,7 +471,7 @@ func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster) if pgc.CompareVersion("2.7.0") >= 0 { addServiceArgs = append(addServiceArgs, - "--cluster=$(CLUSTER_NAME)", + "--cluster=$(CLUSTER_NAME)", "$PMM_POSTGRES_PARAMS", ) } addService := fmt.Sprintf("pmm-admin add postgresql %s", strings.Join(addServiceArgs, " ")) diff --git a/percona/pmm/pmm_test.go b/percona/pmm/pmm_test.go index e796301a1..03c2e4c92 100644 --- a/percona/pmm/pmm_test.go +++ b/percona/pmm/pmm_test.go @@ -19,6 +19,7 @@ func TestContainer(t *testing.T) { ImagePullPolicy: corev1.PullIfNotPresent, ServerHost: "pmm.server.local", Secret: "pmm-secret", + PostgresParams: "--environment=dev-postgres", Resources: corev1.ResourceRequirements{}, ContainerSecurityContext: &corev1.SecurityContext{}, } @@ -144,6 +145,7 @@ func TestSidecarContainerV2(t *testing.T) { ImagePullPolicy: corev1.PullIfNotPresent, ServerHost: "pmm.server.local", Secret: "pmm-secret", + PostgresParams: "--environment=dev-postgres", Resources: corev1.ResourceRequirements{}, ContainerSecurityContext: &corev1.SecurityContext{}, } @@ -179,7 +181,7 @@ func TestSidecarContainerV2(t *testing.T) { assert.NotNil(t, container.Lifecycle.PreStop) assert.Equal(t, []string{"bash", "-c", "pmm-admin unregister --force"}, container.Lifecycle.PreStop.Exec.Command) - assert.Len(t, container.Env, 32) + assert.Len(t, container.Env, 33) expectedEnvVars := map[string]string{ "POD_NAME": "", // field reference is asserted separately @@ -211,9 +213,10 @@ func TestSidecarContainerV2(t *testing.T) { "DB_TYPE": "postgresql", "DB_USER": v2.UserMonitoring, "DB_PASS": "", // secret reference is asserted separately - "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=$(CLUSTER_NAME); pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", + "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=$(CLUSTER_NAME) $PMM_POSTGRES_PARAMS; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", "PMM_AGENT_PATHS_TEMPDIR": "/tmp", "CLUSTER_NAME": "test-cluster", + "PMM_POSTGRES_PARAMS": "--environment=dev-postgres", } for _, envVar := range container.Env { @@ -256,6 +259,7 @@ func TestSidecarContainerV3(t *testing.T) { ImagePullPolicy: corev1.PullIfNotPresent, ServerHost: "pmm.server.local", Secret: "pmm-secret", + PostgresParams: "--environment=dev-postgres", Resources: corev1.ResourceRequirements{}, ContainerSecurityContext: &corev1.SecurityContext{}, } @@ -291,7 +295,7 @@ func TestSidecarContainerV3(t *testing.T) { assert.NotNil(t, container.Lifecycle.PreStop) assert.Equal(t, []string{"bash", "-c", "pmm-admin unregister --force"}, container.Lifecycle.PreStop.Exec.Command) - assert.Len(t, container.Env, 27) + assert.Len(t, container.Env, 28) expectedEnvVars := map[string]string{ "POD_NAME": "", // field reference is asserted separately @@ -318,9 +322,10 @@ func TestSidecarContainerV3(t *testing.T) { "DB_TYPE": "postgresql", "DB_USER": v2.UserMonitoring, "DB_PASS": "", // secret reference is asserted separately - "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=$(CLUSTER_NAME); pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", + "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=$(CLUSTER_NAME) $PMM_POSTGRES_PARAMS; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", "PMM_AGENT_PATHS_TEMPDIR": "/tmp", "CLUSTER_NAME": "test-cluster", + "PMM_POSTGRES_PARAMS": "--environment=dev-postgres", } for _, envVar := range container.Env { diff --git a/pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go b/pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go index 15f862299..628c81ef9 100644 --- a/pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go +++ b/pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go @@ -556,6 +556,9 @@ type PMMSpec struct { // +optional CustomClusterName string `json:"customClusterName,omitempty"` + // +optional + PostgresParams string `json:"postgresParams,omitempty"` + // +kubebuilder:validation:Required Secret string `json:"secret,omitempty"`