diff --git a/apis/kubedb/v1alpha2/constants.go b/apis/kubedb/v1alpha2/constants.go index 5815c44853..bca65c9335 100644 --- a/apis/kubedb/v1alpha2/constants.go +++ b/apis/kubedb/v1alpha2/constants.go @@ -579,6 +579,7 @@ const ( PgpoolContainerName = "pgpool" PgpoolDefaultServicePort = 9999 PgpoolMonitoringDefaultServicePort = 9719 + PgpoolPcpServicePort = 9595 PgpoolExporterDatabase = "postgres" EnvPgpoolExporterDatabase = "POSTGRES_DATABASE" EnvPgpoolService = "PGPOOL_SERVICE" @@ -596,6 +597,7 @@ const ( PgpoolRootUser = "postgres" PgpoolPrimaryServicePortName = "primary" PgpoolDatabasePortName = "db" + PgpoolPcpServicePortName = "pcp" // ========================================== ZooKeeper Constants =================================================// KubeDBZooKeeperRoleName = "kubedb:zookeeper-version-reader" diff --git a/apis/kubedb/v1alpha2/pgpool_helpers.go b/apis/kubedb/v1alpha2/pgpool_helpers.go index 29a45b334a..6d56e066af 100644 --- a/apis/kubedb/v1alpha2/pgpool_helpers.go +++ b/apis/kubedb/v1alpha2/pgpool_helpers.go @@ -104,6 +104,10 @@ func (p *Pgpool) ServiceName() string { return p.OffshootName() } +func (p *Pgpool) PcpServiceName() string { + return meta_util.NameWithSuffix(p.ServiceName(), "pcp") +} + // Owner returns owner reference to resources func (p *Pgpool) Owner() *meta.OwnerReference { return meta.NewControllerRef(p, SchemeGroupVersion.WithKind(p.ResourceKind())) diff --git a/apis/kubedb/v1alpha2/pgpool_webhook.go b/apis/kubedb/v1alpha2/pgpool_webhook.go index 018ece3b6f..308a740ea9 100644 --- a/apis/kubedb/v1alpha2/pgpool_webhook.go +++ b/apis/kubedb/v1alpha2/pgpool_webhook.go @@ -121,6 +121,36 @@ func (p *Pgpool) ValidateCreateOrUpdate() field.ErrorList { )) } + if p.Spec.ConfigSecret != nil && (p.Spec.InitConfiguration != nil || p.Spec.InitConfiguration.PgpoolConfig != nil) { + errorList = append(errorList, field.Invalid(field.NewPath("spec").Child("configSecret"), + p.Name, + "use either `spec.configSecret` or `spec.initConfig`")) + errorList = append(errorList, field.Invalid(field.NewPath("spec").Child("initConfig"), + p.Name, + "use either `spec.configSecret` or `spec.initConfig`")) + } + + if p.Spec.ConfigSecret != nil { + secret := core.Secret{} + err := DefaultClient.Get(context.TODO(), types.NamespacedName{ + Name: p.Spec.ConfigSecret.Name, + Namespace: p.Spec.PostgresRef.Namespace, + }, &secret) + if err != nil { + errorList = append(errorList, field.Invalid(field.NewPath("spec").Child("configSecret"), + p.Name, + err.Error(), + )) + } + _, ok := secret.Data["pgpool.conf"] + if !ok { + errorList = append(errorList, field.Invalid(field.NewPath("spec").Child("configSecret"), + p.Name, + "`pgpool.conf` is missing", + )) + } + } + apb := appcat.AppBinding{} err := DefaultClient.Get(context.TODO(), types.NamespacedName{ Name: p.Spec.PostgresRef.Name, diff --git a/apis/kubedb/v1alpha2/types.go b/apis/kubedb/v1alpha2/types.go index 6567c3e65c..181dbe6712 100644 --- a/apis/kubedb/v1alpha2/types.go +++ b/apis/kubedb/v1alpha2/types.go @@ -131,6 +131,7 @@ const ( PrimaryServiceAlias ServiceAlias = "primary" StandbyServiceAlias ServiceAlias = "standby" StatsServiceAlias ServiceAlias = "stats" + PcpServiceAlias ServiceAlias = "pcp" ) // +kubebuilder:validation:Enum=DNS;IP;IPv4;IPv6