Skip to content

Commit

Permalink
Merge pull request #35 from cybertec-postgresql/backup_pvc
Browse files Browse the repository at this point in the history
Introduce PVC based repo-host for pgbackrest
  • Loading branch information
Schmaetz authored May 31, 2024
2 parents 738b4c9 + 25b1707 commit fac7246
Show file tree
Hide file tree
Showing 31 changed files with 2,033 additions and 584 deletions.
13 changes: 10 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ BASE_IMAGE ?= rockylinux:9
PACKAGER ?= dnf
BUILD ?= 1
ROOTPATH = $(GOPATH)/src/github.com/cybertec/cybertec-pg-operator
VERIFY_CODEGEN ?= 1
ifndef ROOTPATH
export ROOTPATH=$(GOPATH)/src/github.com/cybertec/cybertec-pg-operator
endif

ALL_SOURCES = $(shell find pkg/ -name '*.go')

ifeq ($(DEBUG),1)
DOCKERFILE = DebugDockerfile
Expand Down Expand Up @@ -59,9 +61,11 @@ default: local
clean:
rm -rf build

local: ${SOURCES}
hack/verify-codegen.sh
CGO_ENABLED=${CGO_ENABLED} go build -o build/${BINARY} $(LOCAL_BUILD_FLAGS) -ldflags "$(LDFLAGS)" $^
local: build/cybertec-pg-operator

build/cybertec-pg-operator: ${SOURCES} ${ALL_SOURCES}
if [ "$(VERIFY_CODEGEN)" = "1" ]; then hack/verify-codegen.sh; fi
CGO_ENABLED=${CGO_ENABLED} go build -o build/${BINARY} $(LOCAL_BUILD_FLAGS) -ldflags "$(LDFLAGS)" $<

linux: ${SOURCES}
GOOS=linux GOARCH=amd64 CGO_ENABLED=${CGO_ENABLED} go build -o build/linux/${BINARY} ${BUILD_FLAGS} -ldflags "$(LDFLAGS)" $^
Expand All @@ -79,6 +83,9 @@ docker: ${DOCKERDIR}/${DOCKERFILE}

# ${VERSION}

docker-local: build/cybertec-pg-operator
docker build --rm -t "$(IMAGE):$(TAG)$(CDP_TAG)$(DEBUG_FRESH)$(DEBUG_POSTFIX)" -f "${DOCKERDIR}/Dockerfile-dev" --build-arg VERSION="${VERSION}" --build-arg BASE_IMAGE="${BASE_IMAGE}" --build-arg PACKAGER="${PACKAGER}" .


indocker-race:
docker run --rm -v "${GOPATH}":"${GOPATH}" -e GOPATH="${GOPATH}" -e RACE=1 -w ${PWD} golang:1.19.8 bash -c "make linux"
Expand Down
51 changes: 18 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
# CYBERTEC PG Operator

CPO (CYBERTEC PG Operator) allows you to create and run PostgreSQL clusters on Kubernetes.

The operator reduces your efforts and simplifies the administration of your PostgreSQL clusters so that you can concentrate on other things.
# CYBERTEC PG Operator

CPO (CYBERTEC PG Operator) allows you to create and run PostgreSQL clusters on Kubernetes.

The operator reduces your efforts and simplifies the administration of your PostgreSQL clusters so that you can concentrate on other things.
<img src="docs/diagrams/logo.png" width="200">
<img src="docs/diagrams/cpo_logo.svg" width="350">

The Postgres Operator delivers an easy to run highly-available [PostgreSQL](https://www.postgresql.org/)
clusters on Kubernetes (K8s) powered by [Patroni](https://github.com/zalando/patroni).
Expand All @@ -22,7 +18,6 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as
* Database connection pooling with PGBouncer
* Support fast in place major version upgrade. Supports global upgrade of all clusters.
* Restore and cloning Postgres clusters on PVC, AWS, GCS and Azure
* Additionally logical backups to S3 or GCS bucket can be configured
* Standby cluster
* Configurable for non-cloud environments
* Basic credential and user management on K8s, eases application deployments
Expand All @@ -33,47 +28,37 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as

### PostgreSQL features

* Supports PostgreSQL 15, starting from 10+
* Supports PostgreSQL 16, starting from 10+
* Streaming replication cluster via Patroni
* Integrated backup solution, automatic backups and very easy restore (Backup & PITR)
* Rolling update procedure for adjustments to the pods and minor updates
* Major upgrade with minimum interruption time
* Reduction of downtime thanks to redundancy, pod anti-affinity, auto-failover and self-healing
* Supports PostgreSQL 16, starting from 10+
* Streaming replication cluster via Patroni
* Point-In-Time-Recovery with
* Point-In-Time-Recovery with
[pg_basebackup](https://www.postgresql.org/docs/16/app-pgbasebackup.html) /
[pgBackRest](https://pgbackrest.org/) via [CYBERTEC-pg-container](https://github.com/cybertec-postgresql/CYBERTEC-pg-container)
[pg_stat_statements](https://www.postgresql.org/docs/15/pgstatstatements.html),
[pg_stat_statements](https://www.postgresql.org/docs/16/pgstatstatements.html),
* Incl. popular Postgres extensions such as
[pg_cron](https://github.com/citusdata/pg_cron),
[pg_partman](https://github.com/pgpartman/pg_partman),
[pgaudit](https://github.com/pgaudit/pgaudit),
[pgauditlogtofile](https://github.com/fmbiete/pgauditlogtofile),
<!-- [pg_partman](https://github.com/pgpartman/pg_partman), -->
[postgis](https://postgis.net/),
[set_user](https://github.com/pgaudit/set_user) and
[set_user](https://github.com/pgaudit/set_user)
[pg_cron](https://github.com/citusdata/pg_cron),
[timescaledb](https://github.com/timescale/timescaledb)
[credcheck](https://github.com/MigOpsRepos/credcheck)

The Postgres Operator has been developed at Zalando and is being used in
production for over five years.
The Operator project is being driven forward by CYBERTEC and is currently in production at various locations.

## Supported Postgres & K8s versions

| Release | Postgres versions | pgBackRest versions | Patroni versions | K8s versions | Golang |
| :-------- | :---------------: | :-------------------: | :--------------: | :----------------:| :-----: |
| latest | 13 &rarr; 16 | 2.51 | 3.2.2 | 1.21+ | 1.19.8 |
| next rc | 13 &rarr; 16 | 2.51 | 3.2.2 | 1.21+ | 1.22.1 |

* Integrated backup solution, automatic backups and very easy restore (snapshot & PITR)
* Rolling update procedure for adjustments to the pods and minor updates
* Major upgrade with minimum interruption time
* Reduction of downtime thanks to redundancy, pod anti-affinity, auto-failover and self-healing
* Supports PostgreSQL 16, starting from 13+
* Streaming replication cluster via Patroni
* Point-In-Time-Recovery with
[pg_basebackup](https://www.postgresql.org/docs/11/app-pgbasebackup.html) /
[pgBackRest](https://pgbackrest.org/) via [CYBERTEC-pg-container](https://github.com/cybertec-postgresql/CYBERTEC-pg-container)
[pg_stat_statements](https://www.postgresql.org/docs/15/pgstatstatements.html),
* Incl. popular Postgres extensions such as
[pg_cron](https://github.com/citusdata/pg_cron),
[pg_partman](https://github.com/pgpartman/pg_partman),
[postgis](https://postgis.net/),
[set_user](https://github.com/pgaudit/set_user) and
[timescaledb](https://github.com/timescale/timescaledb)
[credcheck](https://github.com/MigOpsRepos/credcheck)
| latest | 10 &rarr; 16 | 2.51 | 3.3.0 | 1.21+ | 1.22.1 |
| next rc | 10 &rarr; 16 | 2.51 | 3.3.0 | 1.21+ | 1.22.1 |

## Getting started

Expand Down
22 changes: 22 additions & 0 deletions docker/Dockerfile-dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
ARG BASE_IMAGE
#=registry.opensource.zalan.do/library/alpine-3.15:latest
ARG VERSION=latest

FROM ${BASE_IMAGE}
ARG PACKAGER
LABEL maintainer="Opensource @ CYBERTEC <[email protected]>"

# We need root certificates to deal with teams api over https
RUN ${PACKAGER} -y update && ${PACKAGER} -y install ca-certificates && ${PACKAGER} clean all;

# RUN addgroup -g 1000 pgo
# RUN adduser -D -u 1000 -G pgo -g 'Postgres Operator' pgo

RUN groupadd -g 1000 cpo
RUN useradd cpo -u 1000 -g 1000

USER 1000:1000

COPY build/* /

ENTRYPOINT ["/cybertec-pg-operator"]
66 changes: 66 additions & 0 deletions docs/diagrams/cpo_logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions e2e/tests/k8s_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def get_pg_nodes(self, pg_cluster_name, namespace='default'):
return master_pod_node, replica_pod_nodes

def get_cluster_nodes(self, cluster_labels='application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster', namespace='default'):

m = []
r = []
podsList = self.api.core_v1.list_namespaced_pod(namespace, label_selector=cluster_labels)
Expand Down Expand Up @@ -342,6 +343,7 @@ def get_effective_pod_image(self, pod_name, namespace='default'):
return pod.items[0].spec.containers[0].image

def get_cluster_pod(self, role, labels='application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster', namespace='default'):

labels = labels + ',member.cpo.opensource.cybertec.at/role=' + role

pods = self.api.core_v1.list_namespaced_pod(
Expand Down
12 changes: 6 additions & 6 deletions e2e/tests/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,6 @@ def test_additional_pod_capabilities(self):
# changed security context of postgres container should trigger a rolling update
k8s.wait_for_pod_failover(replica_nodes, 'member.cpo.opensource.cybertec.at/role=master,' + cluster_label)
k8s.wait_for_pod_start('member.cpo.opensource.cybertec.at/role=replica,' + cluster_label)

self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync")
self.eventuallyEqual(lambda: k8s.count_pods_with_container_capabilities(capabilities, cluster_label),
2, "Container capabilities not updated")
Expand Down Expand Up @@ -656,7 +655,6 @@ def test_custom_ssl_certificate(self):
# wait for switched over
k8s.wait_for_pod_failover(replica_nodes, 'member.cpo.opensource.cybertec.at/role=master,' + cluster_label)
k8s.wait_for_pod_start('member.cpo.opensource.cybertec.at/role=replica,' + cluster_label)

self.eventuallyEqual(lambda: k8s.count_pods_with_env_variable("SSL_CERTIFICATE_FILE", cluster_label), 2, "TLS env variable SSL_CERTIFICATE_FILE missing in Spilo pods")
self.eventuallyEqual(lambda: k8s.count_pods_with_env_variable("SSL_PRIVATE_KEY_FILE", cluster_label), 2, "TLS env variable SSL_PRIVATE_KEY_FILE missing in Spilo pods")
self.eventuallyEqual(lambda: k8s.count_pods_with_volume_mount(tls_secret, cluster_label), 2, "TLS volume mount missing in Spilo pods")
Expand Down Expand Up @@ -818,6 +816,7 @@ def test_enable_disable_connection_pooler(self):
self.eventuallyEqual(lambda: k8s.count_services_with_label(pooler_label),
0, "Pooler service not removed")
self.eventuallyEqual(lambda: k8s.count_secrets_with_label('application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster'),

4, "Secrets not deleted")

# Verify that all the databases have pooler schema installed.
Expand Down Expand Up @@ -856,7 +855,6 @@ def test_enable_load_balancer(self):

k8s = self.k8s
cluster_label = 'application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster,member.cpo.opensource.cybertec.at/role={}'

self.eventuallyEqual(lambda: k8s.get_service_type(cluster_label.format("master")),
'ClusterIP',
"Expected ClusterIP type initially, found {}")
Expand Down Expand Up @@ -1206,8 +1204,8 @@ def test_persistent_volume_claim_retention_policy(self):
Test the retention policy for persistent volume claim
'''
k8s = self.k8s
cluster_label = 'application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster'

cluster_label = 'application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster'
self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync")
self.eventuallyEqual(lambda: k8s.count_pvcs_with_label(cluster_label), 2, "PVCs is not equal to number of instance")

Expand Down Expand Up @@ -1368,6 +1366,7 @@ def test_node_affinity(self):
k8s = self.k8s
cluster_label = 'application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster'


# verify we are in good state from potential previous tests
self.eventuallyEqual(lambda: k8s.count_running_pods(), 2, "No 2 pods running")

Expand Down Expand Up @@ -1890,10 +1889,11 @@ def test_service_annotations(self):
"foo": "bar",
"alice": "bob"
}

self.eventuallyTrue(lambda: k8s.check_service_annotations("cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster,member.cpo.opensource.cybertec.at/role=master", annotations), "Wrong annotations")
self.eventuallyTrue(lambda: k8s.check_service_annotations("cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster,member.cpo.opensource.cybertec.at/role=replica", annotations), "Wrong annotations")


# clean up
unpatch_custom_service_annotations = {
"data": {
Expand Down Expand Up @@ -2121,7 +2121,6 @@ def assert_master_is_unique(self, namespace='default', clusterName="acid-minimal
'''
k8s = self.k8s
labels = 'member.cpo.opensource.cybertec.at/role=master,cluster.cpo.opensource.cybertec.at/name=' + clusterName

num_of_master_pods = k8s.count_pods_with_label(labels, namespace)
self.assertEqual(num_of_master_pods, 1, "Expected 1 master pod, found {}".format(num_of_master_pods))

Expand All @@ -2132,6 +2131,7 @@ def assert_distributed_pods(self, target_nodes, cluster_labels='cluster.cpo.open
Toggle pod anti affinty to distribute pods accross nodes (replica in particular).
'''
k8s = self.k8s

cluster_labels = 'application=cpo,cluster.cpo.opensource.cybertec.at/name=acid-minimal-cluster'

# get nodes of master and replica(s)
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ require (
github.com/r3labs/diff v1.1.0
github.com/sirupsen/logrus v1.9.0
github.com/stretchr/testify v1.8.0
golang.org/x/crypto v0.17.0
golang.org/x/crypto v0.21.0
golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.25.9
Expand Down Expand Up @@ -50,10 +50,10 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/term v0.15.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
golang.org/x/tools v0.6.0 // indirect
Expand Down
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -291,8 +291,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -342,11 +342,11 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
18 changes: 11 additions & 7 deletions manifests/postgresql.crd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -778,28 +778,29 @@ spec:
properties:
secret:
type: string
parameters:
additionalProperties:
type: string
type: object
protection:
type: object
properties:
restore:
type: boolean
global:
type: object
additionalProperties:
type: string
repos:
type: array
items:
properties:
name:
type: string
pattern: ^repo[1-4]
pattern: ^repo[1-4]$
storage:
type: string
enum:
- "s3"
- "gcs"
- "azure"
- "pvc"
resource:
type: string
endpoint:
Expand All @@ -815,6 +816,8 @@ spec:
type: string
diff:
type: string
Pvcsize:
type: string
required:
- name
- storage
Expand All @@ -831,9 +834,10 @@ spec:
type: string
repo:
type: string
pattern: ^repo[1-4]$
options:
type: array
items:
type: object
additionalProperties:
type: string
resources:
type: object
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/cpo.opensource.cybertec.at/v1/const.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package v1

// ClusterStatusUnknown etc : status of a Postgres cluster known to the operator
// ClusterStatusUnknown etc : status of a Postgres cluster known to the operator
const (
ClusterStatusUnknown = ""
ClusterStatusCreating = "Creating"
Expand All @@ -10,6 +10,7 @@ const (
ClusterStatusAddFailed = "CreateFailed"
ClusterStatusRunning = "Running"
ClusterStatusInvalid = "Invalid"
ClusterStatusRestoring = "Restoring"
)

const (
Expand Down
Loading

0 comments on commit fac7246

Please sign in to comment.