diff --git a/apis/installer/v1alpha1/ace_ace_types.go b/apis/installer/v1alpha1/ace_ace_types.go
index 7f9999fa2..cddf2bf78 100644
--- a/apis/installer/v1alpha1/ace_ace_types.go
+++ b/apis/installer/v1alpha1/ace_ace_types.go
@@ -315,6 +315,15 @@ type Settings struct {
Firebase FirebaseSettings `json:"firebase"`
// +optional
Marketplace *MarketplaceSettings `json:"marketplace,omitempty"`
+ // +optional
+ PgPool *PgPoolSettings `json:"pgpool,omitempty"`
+}
+
+type PgPoolSettings struct {
+ Enabled bool `json:"enabled"`
+ Version string `json:"version"`
+ Replicas int `json:"replicas"`
+ Resources core.ResourceRequirements `json:"resources"`
}
type DBSettings struct {
diff --git a/apis/installer/v1alpha1/zz_generated.deepcopy.go b/apis/installer/v1alpha1/zz_generated.deepcopy.go
index 0d829ae2e..1120712cb 100644
--- a/apis/installer/v1alpha1/zz_generated.deepcopy.go
+++ b/apis/installer/v1alpha1/zz_generated.deepcopy.go
@@ -8981,6 +8981,22 @@ func (in *PersistenceSpec) DeepCopy() *PersistenceSpec {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PgPoolSettings) DeepCopyInto(out *PgPoolSettings) {
+ *out = *in
+ in.Resources.DeepCopyInto(&out.Resources)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PgPoolSettings.
+func (in *PgPoolSettings) DeepCopy() *PgPoolSettings {
+ if in == nil {
+ return nil
+ }
+ out := new(PgPoolSettings)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PlacementSpec) DeepCopyInto(out *PlacementSpec) {
*out = *in
@@ -11311,6 +11327,11 @@ func (in *Settings) DeepCopyInto(out *Settings) {
*out = new(MarketplaceSettings)
(*in).DeepCopyInto(*out)
}
+ if in.PgPool != nil {
+ in, out := &in.PgPool, &out.PgPool
+ *out = new(PgPoolSettings)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Settings.
diff --git a/charts/ace/README.md b/charts/ace/README.md
index 8fdd7fc54..c77e7a749 100644
--- a/charts/ace/README.md
+++ b/charts/ace/README.md
@@ -131,6 +131,12 @@ The following table lists the configurable parameters of the `ace` chart and the
| settings.db.auth.username | | postgres |
| settings.db.auth.password | | "xyz" |
| settings.db.logSQL | | false |
+| settings.pgpool.enabled | | false |
+| settings.pgpool.version | | "4.5.0" |
+| settings.pgpool.replicas | | 2 |
+| settings.pgpool.resources.limits.memory | | 512Mi |
+| settings.pgpool.resources.requests.memory | | 256Mi |
+| settings.pgpool.resources.requests.cpu | | 250m |
| settings.cache.version | | "7.2.4" |
| settings.cache.cacheInterval | | 60 |
| settings.cache.persistence.size | | 10Gi |
diff --git a/charts/ace/templates/_helpers.tpl b/charts/ace/templates/_helpers.tpl
index f1560fba6..25e5f8a72 100644
--- a/charts/ace/templates/_helpers.tpl
+++ b/charts/ace/templates/_helpers.tpl
@@ -173,8 +173,12 @@ Returns the ServiceMonitor labels
Determine database host name
*/}}
{{- define "settings.database.host" -}}
+{{- if .Values.settings.pgpool.enabled -}}
+{{- printf "%s-pgpool.%s.svc:5432" (include "ace.fullname" .) .Release.Namespace -}}
+{{- else -}}
{{- printf "%s-db.%s.svc:5432" (include "ace.fullname" .) .Release.Namespace -}}
{{- end -}}
+{{- end -}}
{{- define "settings.oauth2JWTSecret" -}}
{{ .Values.settings.security.oauth2JWTSecret | default (randAlphaNum 43) }}
diff --git a/charts/ace/templates/db/pgpool.yaml b/charts/ace/templates/db/pgpool.yaml
new file mode 100644
index 000000000..881b21b70
--- /dev/null
+++ b/charts/ace/templates/db/pgpool.yaml
@@ -0,0 +1,67 @@
+{{- if .Values.settings.pgpool.enabled }}
+apiVersion: kubedb.com/v1alpha2
+kind: Pgpool
+metadata:
+ name: {{ include "ace.fullname" . }}-pgpool
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "ace.labels" . | nindent 4 }}
+spec:
+ version: "{{ .Values.settings.pgpool.version }}"
+ replicas: {{ .Values.settings.pgpool.replicas }}
+ postgresRef:
+ name: {{ include "ace.fullname" . }}-db
+ namespace: {{ .Release.Namespace }}
+ syncUsers: true
+ deletionPolicy: {{ .Values.settings.db.deletionPolicy }}
+ podTemplate:
+ spec:
+ containers:
+ - name: pgpool
+ resources:
+ {{- toYaml .Values.settings.pgpool.resources | nindent 10 }}
+ {{- if eq (include "distro.openshift" $) "true" }}
+ securityContext:
+ runAsGroup: {{ .Values.securityContext.runAsUser }}
+ runAsUser: {{ .Values.securityContext.runAsUser }}
+ capabilities:
+ drop:
+ - ALL
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ securityContext:
+ fsGroup: {{ .Values.securityContext.runAsUser }}
+ runAsUser: {{ .Values.securityContext.runAsUser }}
+ runAsGroup: {{ .Values.securityContext.runAsUser }}
+ {{- end }}
+{{- if .Values.global.monitoring }}
+ monitor:
+ agent: {{ .Values.global.monitoring.agent }}
+ prometheus:
+ serviceMonitor:
+ interval: 30s
+ labels:
+ {{- toYaml .Values.global.monitoring.serviceMonitor.labels | nindent 10 }}
+{{- end }}
+---
+apiVersion: appcatalog.appscode.com/v1alpha1
+kind: AppBinding
+metadata:
+ name: {{ include "ace.fullname" . }}-pgpool
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "ace.labels" . | nindent 4 }}
+spec:
+ type: kubedb.com/pgpool
+ appRef:
+ apiGroup: kubedb.com
+ kind: Pgpool
+ name: {{ include "ace.fullname" . }}-pgpool
+ namespace: {{ .Release.Namespace }}
+ clientConfig:
+ service:
+ name: {{ include "ace.fullname" . }}-pgpool
+ scheme: postgresql
+ port: 5432
+{{- end }}
\ No newline at end of file
diff --git a/charts/ace/values.openapiv3_schema.yaml b/charts/ace/values.openapiv3_schema.yaml
index 9abb223f2..1aa423163 100644
--- a/charts/ace/values.openapiv3_schema.yaml
+++ b/charts/ace/values.openapiv3_schema.yaml
@@ -24481,6 +24481,53 @@ properties:
- apiURL
- preSharedKey
type: object
+ pgpool:
+ properties:
+ enabled:
+ type: boolean
+ replicas:
+ type: integer
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ request:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ version:
+ type: string
+ required:
+ - enabled
+ - replicas
+ - resources
+ - version
+ type: object
platform:
properties:
appName:
diff --git a/charts/ace/values.yaml b/charts/ace/values.yaml
index a1399098a..f03d512b1 100644
--- a/charts/ace/values.yaml
+++ b/charts/ace/values.yaml
@@ -270,6 +270,16 @@ settings:
username: postgres
password: "xyz"
logSQL: false
+ pgpool:
+ enabled: false
+ version: "4.5.0"
+ replicas: 2
+ resources:
+ limits:
+ memory: 512Mi
+ requests:
+ memory: 256Mi
+ cpu: 250m
cache:
version: "7.2.4"
cacheInterval: 60