From 88179d6d3d52af67ba1abfb8f999903d270eaa87 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Thu, 3 Oct 2024 15:25:31 +0300 Subject: [PATCH 01/23] Multisite feature support Adds option to configure multisite support, passing the options to container image. Behavior differences for clusters where multisite is enabled: * User credentials are synced via cross site etcd * Main service is always of LoadBalancer type * Cluster creation waits for LoadBalancer IP to be assigned before creating main stateful set. --- .../crds/operatorconfigurations.yaml | 17 ++ .../postgres-operator/crds/postgresqls.yaml | 17 ++ .../templates/clusterrole-postgres-pod.yaml | 15 ++ .../templates/operatorconfiguration.yaml | 4 + charts/postgres-operator/values.yaml | 15 ++ go.mod | 10 + go.sum | 208 ++++++++++++++++++ manifests/operatorconfiguration.crd.yaml | 6 +- .../cpo.opensource.cybertec.at/v1/crds.go | 52 +++++ .../v1/operator_configuration_type.go | 1 + .../v1/postgresql_type.go | 12 + .../v1/zz_generated.deepcopy.go | 57 +++++ pkg/cluster/cluster.go | 111 +++++++++- pkg/cluster/k8sres.go | 34 +++ pkg/cluster/util.go | 44 ++++ pkg/controller/operator_config.go | 8 + pkg/util/config/config.go | 11 + pkg/util/util.go | 8 + 18 files changed, 622 insertions(+), 8 deletions(-) diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index 1694f83e..b3852a1e 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -680,6 +680,23 @@ spec: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' default: "100Mi" + multisite: + type: object + properties: + enable: + type: boolean + site: + type: string + etcd_host: + type: string + etcd_user: + type: string + etcd_password: + type: string + ttl: + type: integer + retry_timeout: + type: integer patroni: type: object properties: diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index 880eaed2..5dbf6bac 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -334,6 +334,23 @@ spec: type: integer maximum_lag_on_failover: type: integer + multisite: + type: object + properties: + enable: + type: boolean + site: + type: string + etcd_host: + type: string + etcd_user: + type: string + etcd_password: + type: string + ttl: + type: integer + retry_timeout: + type: integer pg_hba: type: array items: diff --git a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml index fdccf16d..15bb49c5 100644 --- a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml +++ b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml @@ -57,6 +57,21 @@ rules: - services verbs: - create + # Create events for multisite status changes +- apiGroups: + - "" + resources: + - events + verbs: + - create + # Update multisite status +- apiGroups: + - cpo.opensource.cybertec.at + resources: + - postgresqls/status + verbs: + - patch + - update {{- if toString .Values.configKubernetes.spilo_privileged | eq "true" }} # to run privileged pods - apiGroups: diff --git a/charts/postgres-operator/templates/operatorconfiguration.yaml b/charts/postgres-operator/templates/operatorconfiguration.yaml index a6ce0766..fc45d070 100644 --- a/charts/postgres-operator/templates/operatorconfiguration.yaml +++ b/charts/postgres-operator/templates/operatorconfiguration.yaml @@ -39,6 +39,10 @@ configuration: logging_rest_api: {{ toYaml .Values.configLoggingRestApi | indent 4 }} connection_pooler: +{{- if .Values.configMultisite.site }} + multisite: +{{ toYaml .Values.configMultisite | indent 4 }} +{{- end }} {{ toYaml .Values.configConnectionPooler | indent 4 }} patroni: {{ toYaml .Values.configPatroni | indent 4 }} diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 4621c9eb..7b410928 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -433,6 +433,21 @@ configConnectionPooler: connection_pooler_default_cpu_limit: "1" connection_pooler_default_memory_limit: 100Mi +configMultisite: + # Turn on multisite operation on all cluster by default + enable: false + # Name of this site, if missing multisite operation is disabled. + # Must be unique for each site. + site: "" + # IP address or hostname of shared etcd cluster used for multicluster operation. + etcd_host: "" + etcd_user: "" + etcd_password: "" + # Timeout for cross site failover, and timeout for demoting to read only when accessing shared etcd cluster fails. + # There should be adequate safety margin between the two to allow for demotion to take place. + #ttl: 90 + #retry_timeout: 40 + configPatroni: # enable Patroni DCS failsafe_mode feature enable_patroni_failsafe_mode: false diff --git a/go.mod b/go.mod index 9b672d7f..ac25dfdc 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/r3labs/diff v1.1.0 github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.2 + go.etcd.io/etcd/client/v3 v3.5.4 golang.org/x/crypto v0.21.0 golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a gopkg.in/yaml.v2 v2.4.0 @@ -22,6 +23,8 @@ require ( ) require ( + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.9.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect @@ -48,6 +51,11 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + go.etcd.io/etcd/api/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect + go.uber.org/atomic v1.7.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + go.uber.org/zap v1.19.0 // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect @@ -57,6 +65,8 @@ require ( golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.16.1 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect + google.golang.org/grpc v1.47.0 // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 3f1900e3..3c38f40f 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,57 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.54.18 h1:t8DGtN8A2wEiazoJxeDbfPsbxCKtjoRLuO7jBSgJzo4= github.com/aws/aws-sdk-go v1.54.18/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= @@ -20,22 +62,45 @@ github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2Kv github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -44,9 +109,12 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= @@ -55,10 +123,20 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -71,37 +149,66 @@ github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d h1:LznySqW8MqVeFh+pW6rOkFdld9QQ7jRydBKKM6jyPVI= github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d/go.mod h1:u3hJ0kqCQu/cPpsu3RbCOPZ0d7V3IjPjv1adNRleM9I= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= github.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/r3labs/diff v1.1.0 h1:V53xhrbTHrWFWq3gI4b94AjgEJOerO1+1l0xyHOBi8M= github.com/r3labs/diff v1.1.0/go.mod h1:7WjXasNzi0vJetRcB/RqNl5dlIsmXcTTLmF5IoH6Xig= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -112,40 +219,93 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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.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-20230108222341-4b8118a2686a h1:tlXy25amD5A7gOfbXdqCGN5k8ESEed/Ee1E5RcrYnqU= golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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.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-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/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-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -155,41 +315,89 @@ golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.28.7 h1:YKIhBxjXKaxuxWJnwohV0aGjRA5l4IU0Eywf/q19AVI= k8s.io/api v0.28.7/go.mod h1:y4RbcjCCMff1930SG/TcP3AUKNfaJUgIeUp58e/2vyY= k8s.io/apiextensions-apiserver v0.25.9 h1:Pycd6lm2auABp9wKQHCFSEPG+NPdFSTJXPST6NJFzB8= diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index f4014fd1..c26f8c36 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -66,7 +66,7 @@ spec: type: string docker_image: type: string - default: "ghcr.io/zalando/spilo-15:3.0-p1" + default: "docker.io/cybertecpostgresql/cybertec-pg-container:postgres-16.2-1" enable_crd_registration: type: boolean default: true @@ -149,7 +149,7 @@ spec: default: 180 replication_username: type: string - default: standby + default: cpo_replication super_username: type: string default: postgres @@ -572,7 +572,7 @@ spec: default: "https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees" pam_role_name: type: string - default: "zalandos" + default: "cpo_pam" postgres_superuser_teams: type: array items: diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go index 4b07713c..0eb77e2f 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go @@ -572,6 +572,32 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{ "maximum_lag_on_failover": { Type: "integer", }, + "multisite": { + Type: "object", + Properties: map[string]apiextv1.JSONSchemaProps{ + "enable": { + Type: "boolean", + }, + "site": { + Type: "string", + }, + "etcd_host": { + Type: "string", + }, + "etcd_user": { + Type: "string", + }, + "etcd_password": { + Type: "string", + }, + "ttl": { + Type: "integer", + }, + "retry_timeour": { + Type: "integer", + }, + }, + }, "pg_hba": { Type: "array", Items: &apiextv1.JSONSchemaPropsOrArray{ @@ -2205,6 +2231,32 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{ }, }, }, + "multisite": { + Type: "object", + Properties: map[string]apiextv1.JSONSchemaProps{ + "enable": { + Type: "boolean", + }, + "site": { + Type: "string", + }, + "etcd_host": { + Type: "string", + }, + "etcd_user": { + Type: "string", + }, + "etcd_password": { + Type: "string", + }, + "ttl": { + Type: "integer", + }, + "retry_timeout": { + Type: "integer", + }, + }, + }, }, }, "status": { diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go index 05601faa..fad9a9b3 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go @@ -276,6 +276,7 @@ type OperatorConfigurationData struct { Scalyr ScalyrConfiguration `json:"scalyr"` LogicalBackup OperatorLogicalBackupConfiguration `json:"logical_backup"` ConnectionPooler ConnectionPoolerConfiguration `json:"connection_pooler"` + Multisite Multisite `json:"multisite"` Patroni PatroniConfiguration `json:"patroni"` MinInstances int32 `json:"min_instances,omitempty"` diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go index 4582d203..e5a36fa7 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go @@ -180,6 +180,7 @@ type Patroni struct { SynchronousMode bool `json:"synchronous_mode,omitempty"` SynchronousModeStrict bool `json:"synchronous_mode_strict,omitempty"` SynchronousNodeCount uint32 `json:"synchronous_node_count,omitempty" defaults:"1"` + Multisite *Multisite `json:"multisite,omitempty"` FailsafeMode *bool `json:"failsafe_mode,omitempty"` } @@ -313,3 +314,14 @@ type TDE struct { type Monitoring struct { Image string `json:"image,omitempty"` } + +// Multisite enables cross Kubernetes replication coordinated via etcd +type Multisite struct { + Enable *bool `json:"enable,omitempty"` + Site *string `json:"site,omitempty"` + EtcdHost *string `json:"etcd_host,omitempty"` + EtcdUser *string `json:"etcd_user,omitempty"` + EtcdPassword *string `json:"etcd_password,omitempty"` + TTL *int32 `json:"ttl,omitempty""` + RetryTimeout *int32 `json:"retry_timeout,omitempty""` +} diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go b/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go index 662d4f78..d2794878 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go @@ -411,6 +411,57 @@ func (in *Monitoring) DeepCopy() *Monitoring { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Multisite) DeepCopyInto(out *Multisite) { + *out = *in + if in.Enable != nil { + in, out := &in.Enable, &out.Enable + *out = new(bool) + **out = **in + } + if in.Site != nil { + in, out := &in.Site, &out.Site + *out = new(string) + **out = **in + } + if in.EtcdHost != nil { + in, out := &in.EtcdHost, &out.EtcdHost + *out = new(string) + **out = **in + } + if in.EtcdUser != nil { + in, out := &in.EtcdUser, &out.EtcdUser + *out = new(string) + **out = **in + } + if in.EtcdPassword != nil { + in, out := &in.EtcdPassword, &out.EtcdPassword + *out = new(string) + **out = **in + } + if in.TTL != nil { + in, out := &in.TTL, &out.TTL + *out = new(int32) + **out = **in + } + if in.RetryTimeout != nil { + in, out := &in.RetryTimeout, &out.RetryTimeout + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Multisite. +func (in *Multisite) DeepCopy() *Multisite { + if in == nil { + return nil + } + out := new(Multisite) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OperatorConfiguration) DeepCopyInto(out *OperatorConfiguration) { *out = *in @@ -488,6 +539,7 @@ func (in *OperatorConfigurationData) DeepCopyInto(out *OperatorConfigurationData out.Scalyr = in.Scalyr out.LogicalBackup = in.LogicalBackup in.ConnectionPooler.DeepCopyInto(&out.ConnectionPooler) + in.Multisite.DeepCopyInto(&out.Multisite) in.Patroni.DeepCopyInto(&out.Patroni) return } @@ -615,6 +667,11 @@ func (in *Patroni) DeepCopyInto(out *Patroni) { (*out)[key] = outVal } } + if in.Multisite != nil { + in, out := &in.Multisite, &out.Multisite + *out = new(Multisite) + (*in).DeepCopyInto(*out) + } if in.FailsafeMode != nil { in, out := &in.FailsafeMode, &out.FailsafeMode *out = new(bool) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 2171b902..0aef21a0 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -5,6 +5,7 @@ package cluster import ( "context" "database/sql" + "encoding/base64" "encoding/json" "fmt" "reflect" @@ -27,6 +28,7 @@ import ( "github.com/cybertec-postgresql/cybertec-pg-operator/pkg/util/teams" "github.com/cybertec-postgresql/cybertec-pg-operator/pkg/util/users" "github.com/cybertec-postgresql/cybertec-pg-operator/pkg/util/volumes" + clientv3 "go.etcd.io/etcd/client/v3" appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" @@ -98,6 +100,8 @@ type Cluster struct { EBSVolumes map[string]volumes.VolumeProperties VolumeResizer volumes.VolumeResizer currentMajorVersion int + + multisiteClient *clientv3.Client // etcd client for multisite quorum site } type compareStatefulsetResult struct { @@ -228,7 +232,9 @@ func (c *Cluster) initUsers() error { c.systemUsers = map[string]spec.PgUser{} c.pgUsers = map[string]spec.PgUser{} - c.initSystemUsers() + if err := c.initSystemUsers(); err != nil { + return fmt.Errorf("could not init system roles: %v", err) + } if err := c.initInfrastructureRoles(); err != nil { return fmt.Errorf("could not init infrastructure roles: %v", err) @@ -360,6 +366,11 @@ func (c *Cluster) Create() (err error) { c.logger.Info("a monitoring secret was successfully created") } + if c.multisiteEnabled() { + c.logger.Infof("waiting for load balancer IP to be assigned") + c.waitForPrimaryLoadBalancerIp() + } + if c.Statefulset != nil { return fmt.Errorf("statefulset already exists in the cluster") } @@ -1365,25 +1376,35 @@ func (c *Cluster) processPodEventQueue(stopCh <-chan struct{}) { } } -func (c *Cluster) initSystemUsers() { +func (c *Cluster) initSystemUsers() error { // We don't actually use that to create users, delegating this // task to Patroni. Those definitions are only used to create // secrets, therefore, setting flags like SUPERUSER or REPLICATION // is not necessary here + password, err := c.getPasswordForUser(c.OpConfig.SuperUsername) + if err != nil { + return err + } c.systemUsers[constants.SuperuserKeyName] = spec.PgUser{ Origin: spec.RoleOriginSystem, Name: c.OpConfig.SuperUsername, Namespace: c.Namespace, - Password: util.RandomPassword(constants.PasswordLength), + Password: password, + } + password, err = c.getPasswordForUser(c.OpConfig.ReplicationUsername) + if err != nil { + return err } c.systemUsers[constants.ReplicationUserKeyName] = spec.PgUser{ Origin: spec.RoleOriginSystem, Name: c.OpConfig.ReplicationUsername, Namespace: c.Namespace, Flags: []string{constants.RoleFlagLogin}, - Password: util.RandomPassword(constants.PasswordLength), + Password: password, } + // TODO: Check what to do with connection pooler user in multisite mode + // Connection pooler user is an exception // if requested it's going to be created by operator if needConnectionPooler(&c.Spec) { @@ -1419,6 +1440,8 @@ func (c *Cluster) initSystemUsers() { c.systemUsers[constants.EventStreamUserKeyName] = streamUser } } + + return nil } func (c *Cluster) initPreparedDatabaseRoles() error { @@ -1485,6 +1508,28 @@ func (c *Cluster) initPreparedDatabaseRoles() error { return nil } +func (c *Cluster) getPasswordFromSecret(userSecretName spec.NamespacedName) (string, error) { + if userSecretName == (spec.NamespacedName{}) { + return "", nil + } + + userSecret, err := c.KubeClient. + Secrets(userSecretName.Namespace). + Get(context.TODO(), userSecretName.Name, metav1.GetOptions{}) + if err != nil { + msg := "could not get user role secret %s/%s: %v" + return "", fmt.Errorf(msg, userSecretName.Namespace, userSecretName.Name, err) + } + + secretData := userSecret.Data + if pw, present := secretData["password"]; present { + return string(pw), nil + } else { + msg := "password attribute not present in user role secret %s/%s" + return "", fmt.Errorf(msg, userSecretName.Namespace, userSecretName.Name) + } +} + func (c *Cluster) initDefaultRoles(defaultRoles map[string]string, admin, prefix, searchPath, secretNamespace string) error { for defaultRole, inherits := range defaultRoles { @@ -1518,11 +1563,15 @@ func (c *Cluster) initDefaultRoles(defaultRoles map[string]string, admin, prefix adminRole = fmt.Sprintf("%s%s", prefix, constants.OwnerRoleNameSuffix) } + password, err := c.getPasswordForUser(roleName) + if err != nil { + return err + } newRole := spec.PgUser{ Origin: spec.RoleOriginBootstrap, Name: roleName, Namespace: namespace, - Password: util.RandomPassword(constants.PasswordLength), + Password: password, Flags: flags, MemberOf: memberOf, Parameters: map[string]string{"search_path": searchPath}, @@ -1907,3 +1956,55 @@ func (c *Cluster) deletePatroniClusterConfigMaps() { deleteClusterObject(get, deleteConfigMapFn, "configmap", c.Name, c.logger) } + +func (c *Cluster) encryptMultisitePassword(password string) string { + //TODO: add encryption + return base64.StdEncoding.EncodeToString([]byte(password)) +} + +func (c *Cluster) decryptMultisitePassword(value []byte) (string, error) { + result, err := base64.StdEncoding.DecodeString(string(value)) + return string(result), err +} + +func (c *Cluster) getPasswordForUser(username string) (string, error) { + if !c.multisiteEnabled() { + return util.RandomPassword(constants.PasswordLength), nil + } + + if c.multisiteClient == nil { + msSpec := c.Spec.Multisite + if msSpec == nil { + msSpec = &cpov1.Multisite{} + } + client, err := clientv3.New(clientv3.Config{ + Endpoints: []string{fmt.Sprintf("http://%s:2379", util.CoalesceStrPtr(msSpec.EtcdHost, c.OpConfig.Multisite.EtcdHost))}, + Username: util.CoalesceStrPtr(msSpec.EtcdUser, c.OpConfig.Multisite.EtcdUser), + Password: util.CoalesceStrPtr(msSpec.EtcdPassword, c.OpConfig.Multisite.EtcdPassword), + DialTimeout: time.Duration(2) * time.Second, + }) + if err != nil { + return "", fmt.Errorf("unable to access multisite etcd: %s", err) + } + c.multisiteClient = client + } + reqTimeoutCtx, _ := context.WithTimeout(context.TODO(), time.Duration(2)*time.Second) + credentialsKey := fmt.Sprintf("/multisite/%s/%s/credentials/%s", c.Namespace, c.Name, username) + response, err := c.multisiteClient.Get(reqTimeoutCtx, credentialsKey) + if err != nil { + return "", fmt.Errorf("unable to fetch credentials for %s from multisite etcd: %s", username, err) + } + if len(response.Kvs) == 0 { + password := util.RandomPassword(constants.PasswordLength) + _, err := c.multisiteClient.Put(reqTimeoutCtx, credentialsKey, c.encryptMultisitePassword(password)) + if err != nil { + return "", fmt.Errorf("unable to store credentials for %s from multisite etcd: %s", username, err) + } + return password, nil + } + password, err := c.decryptMultisitePassword(response.Kvs[0].Value) + if err != nil { + return "", fmt.Errorf("error decoding credentials for %s: %s", username, err) + } + return password, nil +} diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index 2dd4d198..bd7cb984 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -1437,6 +1437,10 @@ func (c *Cluster) generateStatefulSet(spec *cpov1.PostgresSpec) (*appsv1.Statefu }) } + if c.multisiteEnabled() { + spiloEnvVars = appendEnvVars(spiloEnvVars, c.generateMultisiteEnvVars()...) + } + // generate the spilo container spiloContainer := generateContainer(constants.PostgresContainerName, &effectiveDockerImage, @@ -2336,6 +2340,11 @@ func (c *Cluster) shouldCreateLoadBalancerForService(role PostgresRole, spec *cp return c.OpConfig.EnableReplicaLoadBalancer case Master: + // If multisite is enabled at manifest or operator configuration we always + // need a load balancer + if c.multisiteEnabled() { + return true + } if spec.EnableMasterLoadBalancer != nil { return *spec.EnableMasterLoadBalancer @@ -3214,3 +3223,28 @@ func repoNumberFromName(repoName string) int { func (c *Cluster) getPgbackrestJobName(repoName string, backupType string) (jobName string) { return trimCronjobName(fmt.Sprintf("%s-%s-%s-%s", "pgbackrest", c.clusterName().Name, repoName, backupType)) } + +func (c *Cluster) generateMultisiteEnvVars() []v1.EnvVar { + site, err := c.getPrimaryLoadBalancerIp() + if err != nil { + c.logger.Errorf("Error getting primary load balancer IP for %s: %s", c.Name, err) + site = "" + } + clsConf := c.Spec.Multisite + if clsConf == nil { + clsConf = new(cpov1.Multisite) + } + + envVars := []v1.EnvVar{ + {Name: "MULTISITE_SITE", Value: util.CoalesceStrPtr(clsConf.Site, c.OpConfig.Multisite.Site)}, + {Name: "MULTISITE_ETCD_HOST", Value: util.CoalesceStrPtr(clsConf.EtcdHost, c.OpConfig.Multisite.EtcdHost)}, + {Name: "MULTISITE_ETCD_USER", Value: util.CoalesceStrPtr(clsConf.EtcdUser, c.OpConfig.Multisite.EtcdUser)}, + {Name: "MULTISITE_ETCD_PASSWORD", Value: util.CoalesceStrPtr(clsConf.EtcdPassword, c.OpConfig.Multisite.EtcdPassword)}, + {Name: "MULTISITE_TTL", Value: strconv.Itoa(int(*util.CoalesceInt32(clsConf.TTL, c.OpConfig.Multisite.TTL)))}, + {Name: "MULTISITE_RETRY_TIMEOUT", Value: strconv.Itoa(int(*util.CoalesceInt32(clsConf.RetryTimeout, c.OpConfig.Multisite.RetryTimeout)))}, + {Name: "EXTERNAL_HOST", Value: site}, + {Name: "UPDATE_CRD", Value: c.Namespace + "." + c.Name}, + {Name: "CRD_UID", Value: string(c.UID)}, + } + return envVars +} diff --git a/pkg/cluster/util.go b/pkg/cluster/util.go index 2c6fb1ba..c04ca223 100644 --- a/pkg/cluster/util.go +++ b/pkg/cluster/util.go @@ -498,6 +498,40 @@ func (c *Cluster) waitStatefulsetPodsReady() error { return nil } +func (c *Cluster) waitForPrimaryLoadBalancerIp() error { + return retryutil.Retry(c.OpConfig.ResourceCheckInterval, c.OpConfig.ResourceCheckTimeout, + func() (bool, error) { + name := c.serviceName(Master) + svc, err := c.KubeClient.Services(c.Namespace).Get(context.TODO(), name, metav1.GetOptions{}) + if err != nil { + return false, err + } + + if svc == nil { + return false, fmt.Errorf("primary loadbalancer service is not found") + } + return len(svc.Status.LoadBalancer.Ingress) > 0, nil + }) + + return nil +} + +func (c *Cluster) getPrimaryLoadBalancerIp() (string, error) { + name := c.serviceName(Master) + svc, err := c.KubeClient.Services(c.Namespace).Get(context.TODO(), name, metav1.GetOptions{}) + if err != nil { + return "", err + } + if svc == nil { + return "", fmt.Errorf("primary loadbalancer service is not found") + } + if len(svc.Status.LoadBalancer.Ingress) == 0 { + return "", fmt.Errorf("IP is not assigned") + } + ingress := svc.Status.LoadBalancer.Ingress[0] + return util.Coalesce(ingress.Hostname, ingress.IP), nil +} + // Returns labels used to create or list k8s objects such as pods // For backward compatibility, shouldAddExtraLabels must be false // when listing k8s objects. See operator PR #252 @@ -715,3 +749,13 @@ func parseResourceRequirements(resourcesRequirement v1.ResourceRequirements) (cp } return resources, nil } + +func (c *Cluster) multisiteEnabled() bool { + var enable *bool + if c.Spec.Multisite != nil { + enable = util.CoalesceBool(c.Spec.Multisite.Enable, c.OpConfig.Multisite.Enable) + } else { + enable = c.OpConfig.Multisite.Enable + } + return enable != nil && *enable +} diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index 06edb481..0999e52b 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -282,5 +282,13 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *cpov1.OperatorConfigura fromCRD.ConnectionPooler.MaxDBConnections, k8sutil.Int32ToPointer(constants.ConnectionPoolerMaxDBConnections)) + result.Multisite.Enable = fromCRD.Multisite.Enable + result.Multisite.Site = util.CoalesceStrPtr(fromCRD.Multisite.Site, "") + result.Multisite.EtcdHost = util.CoalesceStrPtr(fromCRD.Multisite.EtcdHost, "") + result.Multisite.EtcdUser = util.CoalesceStrPtr(fromCRD.Multisite.EtcdUser, "") + result.Multisite.EtcdPassword = util.CoalesceStrPtr(fromCRD.Multisite.EtcdPassword, "") + result.Multisite.TTL = util.CoalesceInt32(fromCRD.Multisite.TTL, k8sutil.Int32ToPointer(90)) + result.Multisite.RetryTimeout = util.CoalesceInt32(fromCRD.Multisite.RetryTimeout, k8sutil.Int32ToPointer(40)) + return result } diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 8e6875b8..5dd17205 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -160,6 +160,16 @@ type ConnectionPooler struct { ConnectionPoolerDefaultMemoryLimit string `name:"connection_pooler_default_memory_limit" default:"100Mi"` } +type Multisite struct { + Enable *bool `name:"multisite_enable" default:"false"` + Site string `name:"multisite_site" default:""` + EtcdHost string `name:"multisite_etcd_host" default:""` + EtcdUser string `name:"multisite_etcd_user" default:""` + EtcdPassword string `name:"multisite_etcd_password" default:""` + TTL *int32 `name:"multisite_ttl" default:"90"` + RetryTimeout *int32 `name:"multisite_retry_timeout" default:"40"` +} + // Config describes operator config type Config struct { CRD @@ -168,6 +178,7 @@ type Config struct { Scalyr LogicalBackup ConnectionPooler + Multisite WatchedNamespace string `name:"watched_namespace"` // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to' KubernetesUseConfigMaps bool `name:"kubernetes_use_configmaps" default:"false"` diff --git a/pkg/util/util.go b/pkg/util/util.go index 506477d5..db0f2905 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -312,6 +312,14 @@ func CoalesceDuration(val time.Duration, defaultVal string) time.Duration { return val } +// CoalesceStrPtr works like coalesce but for *string +func CoalesceStrPtr(val *string, defaultVal string) string { + if val != nil && *val != "" { + return *val + } + return defaultVal +} + // Test if any of the values is nil func testNil(values ...*int32) bool { for _, v := range values { From 0254ff9d156af897b0feb06a57727ace52124108 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Fri, 4 Oct 2024 11:32:36 +0300 Subject: [PATCH 02/23] Change Helm values to default use_configmaps on --- charts/postgres-operator/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 7b410928..e69d9abb 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -44,7 +44,7 @@ configGeneral: # ignore_instance_limits_annotation_key: "" # Select if setup uses endpoints (default), or configmaps to manage leader (DCS=k8s) - # kubernetes_use_configmaps: false + kubernetes_use_configmaps: true # min number of instances in Postgres cluster. -1 = no limit min_instances: -1 From 644a9f5e63fad5e418307785e0e7d89e30a7a13a Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Fri, 4 Oct 2024 11:34:51 +0300 Subject: [PATCH 03/23] Make default role name for human administrators humans --- charts/postgres-operator/values.yaml | 2 +- docs/reference/operator_parameters.md | 2 +- manifests/configmap.yaml | 2 +- ...gresql-operator-default-configuration.yaml | 2 +- pkg/cluster/cluster_test.go | 4 ++-- pkg/cluster/k8sres_test.go | 20 +++++++++---------- pkg/controller/operator_config.go | 2 +- pkg/util/config/config.go | 2 +- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index e69d9abb..5b97076c 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -395,7 +395,7 @@ configTeamsApi: # pam_configuration: https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees # operator will add all team member roles to this group and add a pg_hba line - pam_role_name: zalandos + pam_role_name: "humans" # List of teams which members need the superuser role in each Postgres cluster postgres_superuser_teams: - postgres_superusers diff --git a/docs/reference/operator_parameters.md b/docs/reference/operator_parameters.md index 02aa771a..065792c5 100644 --- a/docs/reference/operator_parameters.md +++ b/docs/reference/operator_parameters.md @@ -881,7 +881,7 @@ key. * **pam_role_name** when set, the operator will add all team member roles to this group and add a `pg_hba` line to authenticate members of that role via `pam`. The default is - `zalandos`. + `humans`. * **pam_configuration** when set, should contain a URL to use for authentication against the username diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index 397843fa..9eba7ef8 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -111,7 +111,7 @@ data: # oauth_token_secret_name: postgresql-operator # pam_configuration: | # https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees - # pam_role_name: zalandos + # pam_role_name: humans patroni_api_check_interval: "1s" patroni_api_check_timeout: "5s" # password_rotation_interval: "90" diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index 297af0f4..6974b33a 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -186,7 +186,7 @@ configuration: enable_team_superuser: false enable_teams_api: false # pam_configuration: "" - pam_role_name: zalandos + pam_role_name: humans # postgres_superuser_teams: # - postgres_superusers protected_role_names: diff --git a/pkg/cluster/cluster_test.go b/pkg/cluster/cluster_test.go index 1aab87b2..afcbd393 100644 --- a/pkg/cluster/cluster_test.go +++ b/pkg/cluster/cluster_test.go @@ -295,7 +295,7 @@ func TestInitHumanUsers(t *testing.T) { cl.OpConfig.EnableTeamSuperuser = true cl.OpConfig.EnableTeamsAPI = true cl.OpConfig.EnableTeamMemberDeprecation = true - cl.OpConfig.PamRoleName = "zalandos" + cl.OpConfig.PamRoleName = "humans" cl.Spec.TeamID = "test" cl.Spec.Users = map[string]cpov1.UserFlags{"bar": []string{}} @@ -383,7 +383,7 @@ func TestInitHumanUsersWithSuperuserTeams(t *testing.T) { cl.OpConfig.EnableTeamSuperuser = false cl.OpConfig.EnableTeamsAPI = true - cl.OpConfig.PamRoleName = "zalandos" + cl.OpConfig.PamRoleName = "humans" teamA := mockTeam{ teamID: "postgres_superusers", diff --git a/pkg/cluster/k8sres_test.go b/pkg/cluster/k8sres_test.go index bb7d01f9..40834086 100644 --- a/pkg/cluster/k8sres_test.go +++ b/pkg/cluster/k8sres_test.go @@ -77,10 +77,10 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { patroni: &cpov1.Patroni{}, opConfig: &config.Config{ Auth: config.Auth{ - PamRoleName: "zalandos", + PamRoleName: "humans", }, }, - result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"zalandos":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{}}}`, + result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"humans":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{}}}`, }, { subtest: "Patroni configured", @@ -104,10 +104,10 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { }, opConfig: &config.Config{ Auth: config.Auth{ - PamRoleName: "zalandos", + PamRoleName: "humans", }, }, - result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin","pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"users":{"zalandos":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"synchronous_mode":true,"synchronous_mode_strict":true,"synchronous_node_count":1,"slots":{"permanent_logical_1":{"database":"foo","plugin":"pgoutput","type":"logical"}},"failsafe_mode":true}}}`, + result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin","pg_hba":["hostssl all all 0.0.0.0/0 scram-sha-256","host all all 0.0.0.0/0 scram-sha-256"]},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"},"data-checksums",{"encoding":"UTF8"},{"locale":"en_US.UTF-8"}],"users":{"humans":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432,"synchronous_mode":true,"synchronous_mode_strict":true,"synchronous_node_count":1,"slots":{"permanent_logical_1":{"database":"foo","plugin":"pgoutput","type":"logical"}},"failsafe_mode":true}}}`, }, { subtest: "Patroni failsafe_mode configured globally", @@ -115,11 +115,11 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { patroni: &cpov1.Patroni{}, opConfig: &config.Config{ Auth: config.Auth{ - PamRoleName: "zalandos", + PamRoleName: "humans", }, EnablePatroniFailsafeMode: util.True(), }, - result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"zalandos":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":true}}}`, + result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"humans":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":true}}}`, }, { subtest: "Patroni failsafe_mode configured globally, disabled for cluster", @@ -129,11 +129,11 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { }, opConfig: &config.Config{ Auth: config.Auth{ - PamRoleName: "zalandos", + PamRoleName: "humans", }, EnablePatroniFailsafeMode: util.True(), }, - result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"zalandos":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":false}}}`, + result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"humans":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":false}}}`, }, { subtest: "Patroni failsafe_mode disabled globally, configured for cluster", @@ -143,11 +143,11 @@ func TestGenerateSpiloJSONConfiguration(t *testing.T) { }, opConfig: &config.Config{ Auth: config.Auth{ - PamRoleName: "zalandos", + PamRoleName: "humans", }, EnablePatroniFailsafeMode: util.False(), }, - result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"zalandos":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":true}}}`, + result: `{"postgresql":{"bin_dir":"/usr/lib/postgresql/15/bin"},"bootstrap":{"initdb":[{"auth-host":"scram-sha-256"},{"auth-local":"trust"}],"users":{"humans":{"password":"","options":["CREATEDB","NOLOGIN"]}},"dcs":{"failsafe_mode":true}}}`, }, } for _, tt := range tests { diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index 0999e52b..eb1738d5 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -205,7 +205,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *cpov1.OperatorConfigura result.EnableTeamSuperuser = fromCRD.TeamsAPI.EnableTeamSuperuser result.EnableAdminRoleForUsers = fromCRD.TeamsAPI.EnableAdminRoleForUsers result.TeamAdminRole = fromCRD.TeamsAPI.TeamAdminRole - result.PamRoleName = util.Coalesce(fromCRD.TeamsAPI.PamRoleName, "zalandos") + result.PamRoleName = util.Coalesce(fromCRD.TeamsAPI.PamRoleName, "humans") result.PamConfiguration = util.Coalesce(fromCRD.TeamsAPI.PamConfiguration, "https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees") result.ProtectedRoles = util.CoalesceStrArr(fromCRD.TeamsAPI.ProtectedRoles, []string{"admin", "cron_admin"}) result.PostgresSuperuserTeams = fromCRD.TeamsAPI.PostgresSuperuserTeams diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 5dd17205..fe90db0f 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -97,7 +97,7 @@ type InfrastructureRole struct { // Auth describes authentication specific configuration parameters type Auth struct { SecretNameTemplate StringTemplate `name:"secret_name_template" default:"{username}.{cluster}.credentials.{tprkind}.{tprgroup}"` - PamRoleName string `name:"pam_role_name" default:"zalandos"` + PamRoleName string `name:"pam_role_name" default:"humans"` PamConfiguration string `name:"pam_configuration" default:"https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees"` TeamsAPIUrl string `name:"teams_api_url" default:"https://teams.example.com/api/"` OAuthTokenSecretName spec.NamespacedName `name:"oauth_token_secret_name" default:"postgresql-operator"` From a6866bc1868c3abc2c11f3774194000a162d02f5 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Fri, 4 Oct 2024 11:35:59 +0300 Subject: [PATCH 04/23] Assume post_init.sh will create pam role --- pkg/cluster/k8sres.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index bd7cb984..8c0fce1f 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -456,13 +456,6 @@ PatroniInitDBParams: config.PgLocalConfiguration[patroniPGHBAConfParameterName] = patroni.PgHba } - config.Bootstrap.Users = map[string]pgUser{ - opConfig.PamRoleName: { - Password: "", - Options: []string{constants.RoleFlagCreateDB, constants.RoleFlagNoLogin}, - }, - } - res, err := json.Marshal(config) return string(res), err } From b59c7cc44d15ba9e7819fb77d2aae1077e63a7ae Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Fri, 4 Oct 2024 13:15:56 +0300 Subject: [PATCH 05/23] Add missing postgres-od permission for events.k8s.io apigroup --- charts/postgres-operator/templates/clusterrole-postgres-pod.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml index 15bb49c5..2fac39e3 100644 --- a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml +++ b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml @@ -60,6 +60,7 @@ rules: # Create events for multisite status changes - apiGroups: - "" + - "events.k8s.io" resources: - events verbs: From cb5ed198ee891652029c57d33d2012d5c159f656 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Fri, 11 Oct 2024 19:50:02 +0300 Subject: [PATCH 06/23] Move etcd config to subobject and add protocol support --- .../crds/operatorconfigurations.yaml | 17 +++++++----- .../postgres-operator/crds/postgresqls.yaml | 17 +++++++----- .../cpo.opensource.cybertec.at/v1/crds.go | 26 ++++++++++++------- .../v1/postgresql_type.go | 19 +++++++++----- pkg/cluster/k8sres.go | 7 ++--- pkg/controller/operator_config.go | 7 ++--- pkg/util/config/config.go | 12 ++++++--- 7 files changed, 68 insertions(+), 37 deletions(-) diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index b3852a1e..babaf523 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -687,12 +687,17 @@ spec: type: boolean site: type: string - etcd_host: - type: string - etcd_user: - type: string - etcd_password: - type: string + etcd: + type: object + properties: + hosts: + type:string + user: + type: string + password: + type: string + protocol: + type: string ttl: type: integer retry_timeout: diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index 5dbf6bac..a9271229 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -341,12 +341,17 @@ spec: type: boolean site: type: string - etcd_host: - type: string - etcd_user: - type: string - etcd_password: - type: string + etcd: + type: object + properties: + hosts: + type:string + user: + type: string + password: + type: string + protocol: + type: string ttl: type: integer retry_timeout: diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go index 0eb77e2f..9d78664a 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go @@ -581,19 +581,27 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{ "site": { Type: "string", }, - "etcd_host": { - Type: "string", - }, - "etcd_user": { - Type: "string", - }, - "etcd_password": { - Type: "string", + "etcd": { + Type: "object", + Properties: map[string]apiextv1.JSONSchemaProps{ + "hosts": { + Type: "string", + }, + "user": { + Type: "string", + }, + "password": { + Type: "string", + }, + "protocol": { + Type: "string", + }, + }, }, "ttl": { Type: "integer", }, - "retry_timeour": { + "retry_timeout": { Type: "integer", }, }, diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go index e5a36fa7..1334e6a0 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go @@ -317,11 +317,16 @@ type Monitoring struct { // Multisite enables cross Kubernetes replication coordinated via etcd type Multisite struct { - Enable *bool `json:"enable,omitempty"` - Site *string `json:"site,omitempty"` - EtcdHost *string `json:"etcd_host,omitempty"` - EtcdUser *string `json:"etcd_user,omitempty"` - EtcdPassword *string `json:"etcd_password,omitempty"` - TTL *int32 `json:"ttl,omitempty""` - RetryTimeout *int32 `json:"retry_timeout,omitempty""` + Enable *bool `json:"enable,omitempty"` + Site *string `json:"site,omitempty"` + Etcd *EtcdConfig `json:"etcd"` + TTL *int32 `json:"ttl,omitempty"` + RetryTimeout *int32 `json:"retry_timeout,omitempty"` +} + +type EtcdConfig struct { + Host *string `json:"host,omitempty"` + User *string `json:"user,omitempty"` + Password *string `json:"password,omitempty"` + Protocol *string `json:"protocol,omitempty"` } diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index 8c0fce1f..cf3b82b3 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -3230,9 +3230,10 @@ func (c *Cluster) generateMultisiteEnvVars() []v1.EnvVar { envVars := []v1.EnvVar{ {Name: "MULTISITE_SITE", Value: util.CoalesceStrPtr(clsConf.Site, c.OpConfig.Multisite.Site)}, - {Name: "MULTISITE_ETCD_HOST", Value: util.CoalesceStrPtr(clsConf.EtcdHost, c.OpConfig.Multisite.EtcdHost)}, - {Name: "MULTISITE_ETCD_USER", Value: util.CoalesceStrPtr(clsConf.EtcdUser, c.OpConfig.Multisite.EtcdUser)}, - {Name: "MULTISITE_ETCD_PASSWORD", Value: util.CoalesceStrPtr(clsConf.EtcdPassword, c.OpConfig.Multisite.EtcdPassword)}, + {Name: "MULTISITE_ETCD_HOST", Value: util.CoalesceStrPtr(clsConf.Etcd.Host, c.OpConfig.Multisite.Etcd.Host)}, + {Name: "MULTISITE_ETCD_USER", Value: util.CoalesceStrPtr(clsConf.Etcd.User, c.OpConfig.Multisite.Etcd.User)}, + {Name: "MULTISITE_ETCD_PASSWORD", Value: util.CoalesceStrPtr(clsConf.Etcd.Password, c.OpConfig.Multisite.Etcd.Password)}, + {Name: "MULTISITE_ETCD_PROTOCOL", Value: util.CoalesceStrPtr(clsConf.Etcd.Protocol, c.OpConfig.Multisite.Etcd.Protocol)}, {Name: "MULTISITE_TTL", Value: strconv.Itoa(int(*util.CoalesceInt32(clsConf.TTL, c.OpConfig.Multisite.TTL)))}, {Name: "MULTISITE_RETRY_TIMEOUT", Value: strconv.Itoa(int(*util.CoalesceInt32(clsConf.RetryTimeout, c.OpConfig.Multisite.RetryTimeout)))}, {Name: "EXTERNAL_HOST", Value: site}, diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index eb1738d5..afa54a92 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -284,9 +284,10 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *cpov1.OperatorConfigura result.Multisite.Enable = fromCRD.Multisite.Enable result.Multisite.Site = util.CoalesceStrPtr(fromCRD.Multisite.Site, "") - result.Multisite.EtcdHost = util.CoalesceStrPtr(fromCRD.Multisite.EtcdHost, "") - result.Multisite.EtcdUser = util.CoalesceStrPtr(fromCRD.Multisite.EtcdUser, "") - result.Multisite.EtcdPassword = util.CoalesceStrPtr(fromCRD.Multisite.EtcdPassword, "") + result.Multisite.Etcd.Host = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Host, "") + result.Multisite.Etcd.User = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.User, "") + result.Multisite.Etcd.Password = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Password, "") + result.Multisite.Etcd.Protocol = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Protocol, "") result.Multisite.TTL = util.CoalesceInt32(fromCRD.Multisite.TTL, k8sutil.Int32ToPointer(90)) result.Multisite.RetryTimeout = util.CoalesceInt32(fromCRD.Multisite.RetryTimeout, k8sutil.Int32ToPointer(40)) diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index fe90db0f..93bd0104 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -161,15 +161,21 @@ type ConnectionPooler struct { } type Multisite struct { + Etcd + Enable *bool `name:"multisite_enable" default:"false"` Site string `name:"multisite_site" default:""` - EtcdHost string `name:"multisite_etcd_host" default:""` - EtcdUser string `name:"multisite_etcd_user" default:""` - EtcdPassword string `name:"multisite_etcd_password" default:""` TTL *int32 `name:"multisite_ttl" default:"90"` RetryTimeout *int32 `name:"multisite_retry_timeout" default:"40"` } +type Etcd struct { + Host string `name:"multisite_etcd_host" default:""` + User string `name:"multisite_etcd_user" default:""` + Password string `name:"multisite_etcd_password" default:""` + Protocol string `name:"multisite_etcd_protocol" default:"http"` +} + // Config describes operator config type Config struct { CRD From c4779744883ba5f351d13850b3c616f44bdbadcd Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sat, 12 Oct 2024 03:08:43 +0300 Subject: [PATCH 07/23] Update license, maintainers and security to refer to Cybertec --- LICENSE | 1 + MAINTAINERS | 9 +++------ SECURITY.md | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/LICENSE b/LICENSE index 5d22aa80..c66c8261 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ The MIT License (MIT) Copyright (c) 2023 Zalando SE + 2024 CYBERTEC PostgreSQL International GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MAINTAINERS b/MAINTAINERS index ea2a29ca..f5db696b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,6 +1,3 @@ -Sergey Dudoladov -Felix Kunde -Jan Mussler -Jociele Padilha -Ida Novindasari -Polina Bungina \ No newline at end of file +Matthias Grömmer +Ants Aasma +Rafia Sabih diff --git a/SECURITY.md b/SECURITY.md index 52528dc5..1bbabeba 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,3 +1,3 @@ # Security -If you have discovered a security vulnerability, please email tech-security@zalando.de. +If you have discovered a security vulnerability, please email security@cybertec.at. From d9643b35b0727151b881e7f4cec9afcdefdb5065 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sat, 12 Oct 2024 03:17:46 +0300 Subject: [PATCH 08/23] Rename etcd host to hosts --- pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go | 2 +- pkg/cluster/k8sres.go | 2 +- pkg/controller/operator_config.go | 2 +- pkg/util/config/config.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go index 1334e6a0..cb421e61 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go @@ -325,7 +325,7 @@ type Multisite struct { } type EtcdConfig struct { - Host *string `json:"host,omitempty"` + Hosts *string `json:"hosts,omitempty"` User *string `json:"user,omitempty"` Password *string `json:"password,omitempty"` Protocol *string `json:"protocol,omitempty"` diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index cf3b82b3..2a0a04b7 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -3230,7 +3230,7 @@ func (c *Cluster) generateMultisiteEnvVars() []v1.EnvVar { envVars := []v1.EnvVar{ {Name: "MULTISITE_SITE", Value: util.CoalesceStrPtr(clsConf.Site, c.OpConfig.Multisite.Site)}, - {Name: "MULTISITE_ETCD_HOST", Value: util.CoalesceStrPtr(clsConf.Etcd.Host, c.OpConfig.Multisite.Etcd.Host)}, + {Name: "MULTISITE_ETCD_HOSTS", Value: util.CoalesceStrPtr(clsConf.Etcd.Hosts, c.OpConfig.Multisite.Etcd.Hosts)}, {Name: "MULTISITE_ETCD_USER", Value: util.CoalesceStrPtr(clsConf.Etcd.User, c.OpConfig.Multisite.Etcd.User)}, {Name: "MULTISITE_ETCD_PASSWORD", Value: util.CoalesceStrPtr(clsConf.Etcd.Password, c.OpConfig.Multisite.Etcd.Password)}, {Name: "MULTISITE_ETCD_PROTOCOL", Value: util.CoalesceStrPtr(clsConf.Etcd.Protocol, c.OpConfig.Multisite.Etcd.Protocol)}, diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index afa54a92..aa072545 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -284,7 +284,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *cpov1.OperatorConfigura result.Multisite.Enable = fromCRD.Multisite.Enable result.Multisite.Site = util.CoalesceStrPtr(fromCRD.Multisite.Site, "") - result.Multisite.Etcd.Host = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Host, "") + result.Multisite.Etcd.Hosts = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Hosts, "") result.Multisite.Etcd.User = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.User, "") result.Multisite.Etcd.Password = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Password, "") result.Multisite.Etcd.Protocol = util.CoalesceStrPtr(fromCRD.Multisite.Etcd.Protocol, "") diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 93bd0104..5e4b6501 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -170,7 +170,7 @@ type Multisite struct { } type Etcd struct { - Host string `name:"multisite_etcd_host" default:""` + Hosts string `name:"multisite_etcd_hosts" default:""` User string `name:"multisite_etcd_user" default:""` Password string `name:"multisite_etcd_password" default:""` Protocol string `name:"multisite_etcd_protocol" default:"http"` From 9c1e14b86d419fbed71b7ce3f67a8f6740ad4073 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sat, 12 Oct 2024 03:32:19 +0300 Subject: [PATCH 09/23] Remove existing charts --- charts/postgres-operator/index.yaml | 181 +----------------- .../postgres-operator-1.10.0.tgz | Bin 17410 -> 0 bytes .../postgres-operator-1.10.1.tgz | Bin 17424 -> 0 bytes .../postgres-operator-1.7.0.tgz | Bin 15644 -> 0 bytes .../postgres-operator-1.7.1.tgz | Bin 15699 -> 0 bytes .../postgres-operator-1.8.0.tgz | Bin 16609 -> 0 bytes .../postgres-operator-1.8.1.tgz | Bin 16650 -> 0 bytes .../postgres-operator-1.8.2.tgz | Bin 16731 -> 0 bytes .../postgres-operator-1.9.0.tgz | Bin 17544 -> 0 bytes 9 files changed, 2 insertions(+), 179 deletions(-) delete mode 100644 charts/postgres-operator/postgres-operator-1.10.0.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.10.1.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.7.0.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.7.1.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.8.0.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.8.1.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.8.2.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.9.0.tgz diff --git a/charts/postgres-operator/index.yaml b/charts/postgres-operator/index.yaml index a16c426f..035e3cdb 100644 --- a/charts/postgres-operator/index.yaml +++ b/charts/postgres-operator/index.yaml @@ -1,180 +1,3 @@ apiVersion: v1 -entries: - postgres-operator: - - apiVersion: v2 - appVersion: 1.10.1 - created: "2023-09-07T16:26:25.96185313+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: cc3baa41753da92466223d0b334df27e79c882296577b404a8e9071411fcf19c - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.10.1.tgz - version: 1.10.1 - - apiVersion: v2 - appVersion: 1.10.0 - created: "2023-09-07T16:26:25.960303202+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 60fc5c8059dfed175d14e1034b40997d9c59d33ec8ea158c0597f7228ab04b51 - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.10.0.tgz - version: 1.10.0 - - apiVersion: v2 - appVersion: 1.9.0 - created: "2023-09-07T16:26:25.971662154+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 64df90c898ca591eb3a330328173ffaadfbf9ddd474d8c42ed143edc9e3f4276 - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.9.0.tgz - version: 1.9.0 - - apiVersion: v2 - appVersion: 1.8.2 - created: "2023-09-07T16:26:25.97011158+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: f77ffad2e98b72a621e5527015cf607935d3ed688f10ba4b626435acb9631b5b - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.8.2.tgz - version: 1.8.2 - - apiVersion: v2 - appVersion: 1.8.1 - created: "2023-09-07T16:26:25.968682347+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: ee0c3bb6ba72fa4289ba3b1c6060e5b312dd023faba2a61b4cb7d9e5e2cc57a5 - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.8.1.tgz - version: 1.8.1 - - apiVersion: v1 - appVersion: 1.8.0 - created: "2023-09-07T16:26:25.967242444+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 3ae232cf009e09aa2ad11c171484cd2f1b72e63c59735e58fbe2b6eb842f4c86 - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.8.0.tgz - version: 1.8.0 - - apiVersion: v1 - appVersion: 1.7.1 - created: "2023-09-07T16:26:25.965786379+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 7262563bec0b058e669ae6bcff0226e33fa9ece9c41ac46a53274046afe7700c - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.7.1.tgz - version: 1.7.1 - - apiVersion: v1 - appVersion: 1.7.0 - created: "2023-09-07T16:26:25.963469658+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: c3e99fb94305f81484b8b1af18eefb78681f3b5d057d5ad10565e4afb7c65ffe - home: https://github.com/cybertec-postgresql/cybertec-pg-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/cybertec-postgresql/cybertec-pg-operator - urls: - - postgres-operator-1.7.0.tgz - version: 1.7.0 -generated: "2023-09-07T16:26:25.958442963+02:00" +entries: {} +generated: "2024-10-12T03:32:05.167878723+03:00" diff --git a/charts/postgres-operator/postgres-operator-1.10.0.tgz b/charts/postgres-operator/postgres-operator-1.10.0.tgz deleted file mode 100644 index 71f3483f5504493a28b818f6a38cc65efd336b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17410 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 F0RYDD>3jeH diff --git a/charts/postgres-operator/postgres-operator-1.10.1.tgz b/charts/postgres-operator/postgres-operator-1.10.1.tgz deleted file mode 100644 index 5ecb27a5b96abb117b37ebbf2a26ea3d071ff703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17424 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 T@cjP)00960IDEtT0ImT5Y=5`F diff --git a/charts/postgres-operator/postgres-operator-1.7.0.tgz b/charts/postgres-operator/postgres-operator-1.7.0.tgz deleted file mode 100644 index 2a8bc745e3cccce6a8f97bdd3921fda55c5c8a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15644 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 CG)f=< diff --git a/charts/postgres-operator/postgres-operator-1.7.1.tgz b/charts/postgres-operator/postgres-operator-1.7.1.tgz deleted file mode 100644 index 2d20fe5b0a72894d6f3c69dbdfa262f235f9a65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15699 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 diff --git a/charts/postgres-operator/postgres-operator-1.8.0.tgz b/charts/postgres-operator/postgres-operator-1.8.0.tgz deleted file mode 100644 index caecd2929b0f255635850a65f351e080c215c321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16609 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 diff --git a/charts/postgres-operator/postgres-operator-1.8.1.tgz b/charts/postgres-operator/postgres-operator-1.8.1.tgz deleted file mode 100644 index 2235cbcd6f15ea6bea6ddd3f2eb83ce925510f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16650 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 ZJx|Zm^UXZ}e*gdg|Nl$=4^9A_0RR&(>#YC) diff --git a/charts/postgres-operator/postgres-operator-1.8.2.tgz b/charts/postgres-operator/postgres-operator-1.8.2.tgz deleted file mode 100644 index 61f0f8aeeba7cb4cf99e562c617a6c37362ab024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16731 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 C|7>Ug diff --git a/charts/postgres-operator/postgres-operator-1.9.0.tgz b/charts/postgres-operator/postgres-operator-1.9.0.tgz deleted file mode 100644 index 8106bcf157948108ea832fa94018d1b77ad12ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17544 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 From a629f6416254df2369a8329d806a4a233aa84c97 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:12:37 +0300 Subject: [PATCH 10/23] Fix typos in CRDs --- charts/postgres-operator/crds/operatorconfigurations.yaml | 2 +- charts/postgres-operator/crds/postgresqls.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index babaf523..f9b4aacb 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -691,7 +691,7 @@ spec: type: object properties: hosts: - type:string + type: string user: type: string password: diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index a9271229..a2c815ff 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -345,7 +345,7 @@ spec: type: object properties: hosts: - type:string + type: string user: type: string password: From c116b104bda11bd3aab82b61beb328a55d97476b Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:20:52 +0300 Subject: [PATCH 11/23] Remove defaults to spilo image --- charts/postgres-operator/values.yaml | 12 ++++++------ manifests/configmap.yaml | 2 +- pkg/util/config/config.go | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 5b97076c..298e4d15 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -1,7 +1,7 @@ image: - registry: registry.opensource.zalan.do - repository: acid/postgres-operator - tag: v1.10.1 + registry: docker.io + repository: cybertecpostgresql/cybertec-pg-operator + tag: v0.8.0-1 pullPolicy: "IfNotPresent" # Optionally specify an array of imagePullSecrets. @@ -37,8 +37,8 @@ configGeneral: enable_team_id_clustername_prefix: false # etcd connection string for Patroni. Empty uses K8s-native DCS. etcd_host: "" - # Spilo docker image - docker_image: ghcr.io/zalando/spilo-15:3.0-p1 + # Database pod docker image + docker_image: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 # key name for annotation to ignore globally configured instance limits # ignore_instance_limits_annotation_key: "" @@ -420,7 +420,7 @@ configConnectionPooler: # db user for pooler to use connection_pooler_user: "pooler" # docker image - connection_pooler_image: "registry.opensource.zalan.do/acid/pgbouncer:master-27" + connection_pooler_image: "docker.io/cybertecpostgresql/cybertec-pg-container:pgbouncer-1.23-2" # max db connections the pooler should hold connection_pooler_max_db_connections: 60 # default pooling mode diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index 9eba7ef8..19a6bc70 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -34,7 +34,7 @@ data: # default_memory_request: 100Mi # delete_annotation_date_key: delete-date # delete_annotation_name_key: delete-clustername - docker_image: ghcr.io/zalando/spilo-15:3.0-p1 + docker_image: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 # downscaler_annotations: "deployment-time,downscaler/*" # enable_admin_role_for_users: "true" # enable_crd_registration: "true" diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 5e4b6501..2f80bf65 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -189,7 +189,7 @@ type Config struct { WatchedNamespace string `name:"watched_namespace"` // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to' KubernetesUseConfigMaps bool `name:"kubernetes_use_configmaps" default:"false"` EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS - DockerImage string `name:"docker_image" default:"ghcr.io/zalando/spilo-15:3.0-p1"` + DockerImage string `name:"docker_image" default:"docker.io/cybertec-pg-container/postgres:rocky9-16.4-2"` SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers SidecarContainers []v1.Container `name:"sidecars"` PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"` From ece42b005bcdda31e9a1f35a4cd8f39388f86673 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:21:33 +0300 Subject: [PATCH 12/23] Update metadata of operator chart --- charts/postgres-operator/Chart.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/charts/postgres-operator/Chart.yaml b/charts/postgres-operator/Chart.yaml index b36898ca..44abf235 100644 --- a/charts/postgres-operator/Chart.yaml +++ b/charts/postgres-operator/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: postgres-operator -version: 1.10.1 -appVersion: 1.10.1 +version: 0.8.0 +appVersion: 0.8.0 home: https://github.com/cybertec-postgresql/cybertec-pg-operator description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes keywords: @@ -11,8 +11,8 @@ keywords: - patroni - spilo maintainers: -- name: Zalando - email: opensource@zalando.de +- name: CYBERTEC PostgreSQL International GmbH + email: info@cybertec.at sources: - https://github.com/cybertec-postgresql/cybertec-pg-operator engine: gotpl From 2cb97d0a23ac458a0b0671bed37960f22d5dc67c Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:22:06 +0300 Subject: [PATCH 13/23] Move multisite.etcd config into a subobject --- .../v1/postgresql_type.go | 10 ++-- .../v1/zz_generated.deepcopy.go | 52 +++++++++++++------ pkg/cluster/cluster.go | 30 +++++++++-- 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go index cb421e61..66c94e0c 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go @@ -317,11 +317,11 @@ type Monitoring struct { // Multisite enables cross Kubernetes replication coordinated via etcd type Multisite struct { - Enable *bool `json:"enable,omitempty"` - Site *string `json:"site,omitempty"` - Etcd *EtcdConfig `json:"etcd"` - TTL *int32 `json:"ttl,omitempty"` - RetryTimeout *int32 `json:"retry_timeout,omitempty"` + Enable *bool `json:"enable,omitempty"` + Site *string `json:"site,omitempty"` + Etcd EtcdConfig `json:"etcd"` + TTL *int32 `json:"ttl,omitempty"` + RetryTimeout *int32 `json:"retry_timeout,omitempty"` } type EtcdConfig struct { diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go b/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go index d2794878..a98323e2 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go @@ -187,6 +187,42 @@ func (in *ConnectionPoolerConfiguration) DeepCopy() *ConnectionPoolerConfigurati return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EtcdConfig) DeepCopyInto(out *EtcdConfig) { + *out = *in + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = new(string) + **out = **in + } + if in.User != nil { + in, out := &in.User, &out.User + *out = new(string) + **out = **in + } + if in.Password != nil { + in, out := &in.Password, &out.Password + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EtcdConfig. +func (in *EtcdConfig) DeepCopy() *EtcdConfig { + if in == nil { + return nil + } + out := new(EtcdConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubernetesMetaConfiguration) DeepCopyInto(out *KubernetesMetaConfiguration) { *out = *in @@ -424,21 +460,7 @@ func (in *Multisite) DeepCopyInto(out *Multisite) { *out = new(string) **out = **in } - if in.EtcdHost != nil { - in, out := &in.EtcdHost, &out.EtcdHost - *out = new(string) - **out = **in - } - if in.EtcdUser != nil { - in, out := &in.EtcdUser, &out.EtcdUser - *out = new(string) - **out = **in - } - if in.EtcdPassword != nil { - in, out := &in.EtcdPassword, &out.EtcdPassword - *out = new(string) - **out = **in - } + in.Etcd.DeepCopyInto(&out.Etcd) if in.TTL != nil { in, out := &in.TTL, &out.TTL *out = new(int32) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 0aef21a0..6e4b0398 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -1967,6 +1967,26 @@ func (c *Cluster) decryptMultisitePassword(value []byte) (string, error) { return string(result), err } +func generateEtcdEndpoints(hosts, protocol string) []string { + endpoints := []string{} + + if protocol == "" { + protocol = "http" + } + + for _, host := range strings.Split(hosts, ",") { + hostParts := strings.SplitN(strings.TrimSpace(host), ":", 2) + host = hostParts[0] + port := "2379" + if len(hostParts) == 2 { + port = hostParts[1] + } + endpoints = append(endpoints, fmt.Sprintf("%s://%s:%s", protocol, host, port)) + } + + return endpoints +} + func (c *Cluster) getPasswordForUser(username string) (string, error) { if !c.multisiteEnabled() { return util.RandomPassword(constants.PasswordLength), nil @@ -1977,10 +1997,14 @@ func (c *Cluster) getPasswordForUser(username string) (string, error) { if msSpec == nil { msSpec = &cpov1.Multisite{} } + endpoints := generateEtcdEndpoints( + util.CoalesceStrPtr(msSpec.Etcd.Hosts, c.OpConfig.Multisite.Etcd.Hosts), + util.CoalesceStrPtr(msSpec.Etcd.Protocol, c.OpConfig.Multisite.Etcd.Protocol), + ) client, err := clientv3.New(clientv3.Config{ - Endpoints: []string{fmt.Sprintf("http://%s:2379", util.CoalesceStrPtr(msSpec.EtcdHost, c.OpConfig.Multisite.EtcdHost))}, - Username: util.CoalesceStrPtr(msSpec.EtcdUser, c.OpConfig.Multisite.EtcdUser), - Password: util.CoalesceStrPtr(msSpec.EtcdPassword, c.OpConfig.Multisite.EtcdPassword), + Endpoints: endpoints, + Username: util.CoalesceStrPtr(msSpec.Etcd.User, c.OpConfig.Multisite.Etcd.User), + Password: util.CoalesceStrPtr(msSpec.Etcd.Password, c.OpConfig.Multisite.Etcd.Password), DialTimeout: time.Duration(2) * time.Second, }) if err != nil { From 7d68150be03428331daa20cc1f6b62f20a317e6d Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:22:55 +0300 Subject: [PATCH 14/23] Unify CRDs between helm and manifests folder --- .../postgres-operator/crds/postgresqls.yaml | 214 ++++++++++++++++++ manifests/operatorconfiguration.crd.yaml | 22 ++ manifests/postgresql.crd.yaml | 40 +++- 3 files changed, 267 insertions(+), 9 deletions(-) diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index a2c815ff..4c25a0b5 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -215,6 +215,121 @@ spec: items: type: object x-kubernetes-preserve-unknown-fields: true + topologySpreadConstraints: + description: 'Topology spread constraints of a Dedicated + repo host pod. Changing this value causes the repo host + to restart. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/' + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. For example, in a 3-zone + cluster, MaxSkew is set to 1, and pods with the + same labelSelector spread as 1/1/0: | zone1 | + zone2 | zone3 | | P | P | | - if + MaxSkew is 1, incoming pod can only be scheduled + to zone3 to become 1/1/1; scheduling it onto zone1(zone2) + would make the ActualSkew(2-0) on zone1(zone2) + violate MaxSkew(1). - if MaxSkew is 2, incoming + pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default + value is 1 and 0 is not allowed.' + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", and + try to put balanced number of pods into each bucket. + It's a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to + deal with a pod if it doesn''t satisfy the spread + constraint. - DoNotSchedule (default) tells the + scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assigment + for that pod would violate "MaxSkew" on some topology. + For example, in a 3-zone cluster, MaxSkew is set + to 1, and pods with the same labelSelector spread + as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | + If WhenUnsatisfiable is set to DoNotSchedule, + incoming pod can only be scheduled to zone2(zone3) + to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) + satisfies MaxSkew(1). In other words, the cluster + can still be imbalanced, but scheduler won''t + make it *more* imbalanced. It''s a required field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array logicalBackupSchedule: type: string pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' @@ -397,6 +512,7 @@ spec: - "14" - "15" - "16" + - "17" parameters: type: object additionalProperties: @@ -674,6 +790,104 @@ spec: type: string throughput: type: integer + backup: + type: object + properties: + pgbackrest: + type: object + properties: + image: + type: string + configuration: + type: object + properties: + secret: + type: string + 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]$ + storage: + type: string + enum: + - "s3" + - "gcs" + - "azure" + - "pvc" + resource: + type: string + endpoint: + type: string + region: + type: string + schedule: + type: object + properties: + full: + type: string + incr: + type: string + diff: + type: string + Pvcsize: + type: string + required: + - name + - storage + - resource + type: object + minItems: 1 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restore: + type: object + properties: + id: + type: string + repo: + type: string + pattern: ^repo[1-4]$ + options: + type: object + additionalProperties: + type: string + resources: + type: object + properties: + limits: + type: object + properties: + cpu: + type: string + pattern: '^(\d+m|\d+(\.\d{1,3})?)$' + memory: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + requests: + type: object + properties: + cpu: + type: string + pattern: '^(\d+m|\d+(\.\d{1,3})?)$' + memory: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + required: + - image + - repos status: type: object additionalProperties: diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index c26f8c36..ccaa24c7 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -678,6 +678,28 @@ spec: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' default: "100Mi" + multisite: + type: object + properties: + enable: + type: boolean + site: + type: string + etcd: + type: object + properties: + hosts: + type: string + user: + type: string + password: + type: string + protocol: + type: string + ttl: + type: integer + retry_timeout: + type: integer patroni: type: object properties: diff --git a/manifests/postgresql.crd.yaml b/manifests/postgresql.crd.yaml index 4c05507f..504abe52 100644 --- a/manifests/postgresql.crd.yaml +++ b/manifests/postgresql.crd.yaml @@ -259,8 +259,8 @@ spec: type: string type: array required: - - key - - operator + - key + - operator type: object type: array matchLabels: @@ -323,9 +323,9 @@ spec: make it *more* imbalanced. It''s a required field.' type: string required: - - maxSkew - - topologyKey - - whenUnsatisfiable + - maxSkew + - topologyKey + - whenUnsatisfiable type: object type: array logicalBackupSchedule: @@ -447,6 +447,28 @@ spec: type: integer maximum_lag_on_failover: type: integer + multisite: + type: object + properties: + enable: + type: boolean + site: + type: string + etcd: + type: object + properties: + hosts: + type: string + user: + type: string + password: + type: string + protocol: + type: string + ttl: + type: integer + retry_timeout: + type: integer pg_hba: type: array items: @@ -820,13 +842,13 @@ spec: Pvcsize: type: string required: - - name - - storage - - resource + - name + - storage + - resource type: object minItems: 1 x-kubernetes-list-map-keys: - - name + - name x-kubernetes-list-type: map restore: type: object From b61e0df563ff8ee4aa40dcaea2e8b24755513513 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:34:22 +0300 Subject: [PATCH 15/23] Unify cluster roles between helm and manifests folder --- .../templates/clusterrole-postgres-pod.yaml | 11 ++++++-- .../templates/clusterrole.yaml | 19 ++++++++++++++ manifests/operator-service-account-rbac.yaml | 25 ++++++++++++++++++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml index 2fac39e3..1a86a646 100644 --- a/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml +++ b/charts/postgres-operator/templates/clusterrole-postgres-pod.yaml @@ -57,7 +57,7 @@ rules: - services verbs: - create - # Create events for multisite status changes +# Create events for multisite status changes - apiGroups: - "" - "events.k8s.io" @@ -65,7 +65,7 @@ rules: - events verbs: - create - # Update multisite status +# Update multisite status - apiGroups: - cpo.opensource.cybertec.at resources: @@ -84,4 +84,11 @@ rules: verbs: - use {{- end }} +# Execute backups +- apiGroups: + - "" + resources: + - pods/exec + verbs: + - create {{ end }} diff --git a/charts/postgres-operator/templates/clusterrole.yaml b/charts/postgres-operator/templates/clusterrole.yaml index b04b1931..4df38fa1 100644 --- a/charts/postgres-operator/templates/clusterrole.yaml +++ b/charts/postgres-operator/templates/clusterrole.yaml @@ -232,6 +232,7 @@ rules: verbs: - get - create + # to create role bindings to the postgres-pod service account - apiGroups: - rbac.authorization.k8s.io @@ -240,6 +241,24 @@ rules: verbs: - get - create +# to create configmap with pgbackrest config +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - create + - delete + - patch +# to grant permission to create events to the postgres-pod service account +- apiGroups: + - "" + - "events.k8s.io" + resources: + - events + verbs: + - create {{- if toString .Values.configKubernetes.spilo_privileged | eq "true" }} # to run privileged pods - apiGroups: diff --git a/manifests/operator-service-account-rbac.yaml b/manifests/operator-service-account-rbac.yaml index 9ec389a9..97238c6d 100644 --- a/manifests/operator-service-account-rbac.yaml +++ b/manifests/operator-service-account-rbac.yaml @@ -236,7 +236,14 @@ rules: - create - delete - patch - +# to grant permission to create events to the postgres-pod service account +- apiGroups: + - "" + - "events.k8s.io" + resources: + - events + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -304,3 +311,19 @@ rules: - pods/exec verbs: - create +# Create events for multisite status changes +- apiGroups: + - "" + - "events.k8s.io" + resources: + - events + verbs: + - create + # Update multisite status +- apiGroups: + - cpo.opensource.cybertec.at + resources: + - postgresqls/status + verbs: + - patch + - update From 604cd3b7de8ca751d45ca910bc8919bed3f33552 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:34:53 +0300 Subject: [PATCH 16/23] Add a Helm chart for provisioning a cluster --- charts/postgres-cluster/.helmignore | 23 ++ charts/postgres-cluster/Chart.yaml | 17 ++ charts/postgres-cluster/templates/NOTES.txt | 5 + .../postgres-cluster/templates/_helpers.tpl | 50 ++++ .../templates/postgresql.yaml | 17 ++ charts/postgres-cluster/values.yaml | 225 ++++++++++++++++++ 6 files changed, 337 insertions(+) create mode 100644 charts/postgres-cluster/.helmignore create mode 100644 charts/postgres-cluster/Chart.yaml create mode 100644 charts/postgres-cluster/templates/NOTES.txt create mode 100644 charts/postgres-cluster/templates/_helpers.tpl create mode 100644 charts/postgres-cluster/templates/postgresql.yaml create mode 100644 charts/postgres-cluster/values.yaml diff --git a/charts/postgres-cluster/.helmignore b/charts/postgres-cluster/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/charts/postgres-cluster/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/postgres-cluster/Chart.yaml b/charts/postgres-cluster/Chart.yaml new file mode 100644 index 00000000..7cca3d73 --- /dev/null +++ b/charts/postgres-cluster/Chart.yaml @@ -0,0 +1,17 @@ +apiVersion: v2 +name: postgres-cluster +description: Deploys a PostgreSQL cluster using the PostgreSQL operator + +type: application +version: 0.8.0 + +appVersion: "0.8.0-1" + +maintainers: + - name: CYBERTEC PostgreSQL International GmbH + email: info@cybertec.at + +sources: + - https://github.com/cybertec-postgresql/cybertec-pg-operator + +engine: gotpl diff --git a/charts/postgres-cluster/templates/NOTES.txt b/charts/postgres-cluster/templates/NOTES.txt new file mode 100644 index 00000000..4d1daa34 --- /dev/null +++ b/charts/postgres-cluster/templates/NOTES.txt @@ -0,0 +1,5 @@ +Database cluster object has been created and the operator should start initializing it now. + +To wait for the initialization to complete you can issue the following command: + + kubectl wait --for=jsonpath='.status.PostgresClusterStatus'=Running -n {{ .Release.Namespace }} pg/{{ .Release.Name }} --timeout=1h diff --git a/charts/postgres-cluster/templates/_helpers.tpl b/charts/postgres-cluster/templates/_helpers.tpl new file mode 100644 index 00000000..263caf13 --- /dev/null +++ b/charts/postgres-cluster/templates/_helpers.tpl @@ -0,0 +1,50 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "postgres-cluster.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "postgres-cluster.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "postgres-cluster.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "postgres-cluster.labels" -}} +helm.sh/chart: {{ include "postgres-cluster.chart" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "postgres-cluster.selectorLabels" -}} +app.kubernetes.io/name: {{ include "postgres-cluster.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/charts/postgres-cluster/templates/postgresql.yaml b/charts/postgres-cluster/templates/postgresql.yaml new file mode 100644 index 00000000..49fdf514 --- /dev/null +++ b/charts/postgres-cluster/templates/postgresql.yaml @@ -0,0 +1,17 @@ +apiVersion: cpo.opensource.cybertec.at/v1 +kind: postgresql +metadata: + name: {{ .Values.clusterName | default .Release.Name }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "postgres-cluster.labels" . | nindent 4 }} + {{- with .Values.commonLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.extraAnnotations }} + annotations: + {{- toYaml . | nindent 4 }} +{{- end}} + +spec: + {{- toYaml .Values.clusterSpecification | nindent 2 }} diff --git a/charts/postgres-cluster/values.yaml b/charts/postgres-cluster/values.yaml new file mode 100644 index 00000000..a81a7f42 --- /dev/null +++ b/charts/postgres-cluster/values.yaml @@ -0,0 +1,225 @@ +# Name of the cluster, if not specified taken to be Release.Name +#clusterName: + +# Add labels to be set on the cluster resource. If you want to have these labels be set on all resources created +# by the operator, include the name of the label in `configKubernetes.inherited_labels` operator configuration. +#commonLabels: +# my-label: value + +# Include extra annotations on the cluster resource. For setting on all operator created resources include the +# name of the annotation in `configKubernetes.inherited_annotations` operator configuration +#extraAnnotations: +# my-annotation: value + +clusterSpecification: + dockerImage: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 + numberOfInstances: 2 + + postgresql: + version: "16" + #parameters: + # work_mem: "40MB" + + #env: + #- name: MY_ENV_VARIABLE + # value: custom + + volume: + size: 1Gi + #storageClass: my-storage + #selector: + # matchExpressions: + # - { key: flavour, operator: In, values: [ "banana", "chocolate" ] } + # matchLabels: + # environment: dev + # service: postgres + + #additionalVolumes: + #- name: empty + # mountPath: /opt/empty + # targetContainers: + # - all + # volumeSource: + # emptyDir: {} + # subPath: + + resources: + requests: + cpu: 10m + memory: 100Mi + limits: + cpu: 500m + memory: 500Mi + + # Custom TLS certificate. Disabled unless tls.secretName has a value. + tls: + secretName: "" # should correspond to a Kubernetes Secret resource to load + certificateFile: "tls.crt" + privateKeyFile: "tls.key" + caFile: "" # optionally configure Postgres with a CA certificate + caSecretName: "" # optionally the ca.crt can come from this secret instead. + + patroni: + failsafe_mode: false + initdb: + encoding: "UTF8" + locale: "C.UTF-8" + data-checksums: "true" + pg_hba: + - local all all trust + - local replication standby trust + - host replication standby all scram-sha-256 + - host all all all scram-sha-256 + #slots: + # permanent_physical_1: + # type: physical + # permanent_logical_1: + # type: logical + # database: foo + # plugin: pgoutput + ttl: 30 + loop_wait: 10 + retry_timeout: 10 + #multisite: + # enable: false + # site: dc1 + # etcd: + # hosts: etcd.default.svc.cluster.local,etcd.other.cluster + # user: etcduser + # password: etcdpassword + # protocol: http + # ttl: 90 + # retry_timeout: 40 + synchronous_mode: false + synchronous_mode_strict: false + synchronous_node_count: 1 + maximum_lag_on_failover: 33554432 + + #backup: + # pgbackrest: + # image: "docker.io/cybertecpostgresql/cybertec-pg-container:pgbackrest-17.0-1" + # configuration: + # secret: "xyz" + # protection: + # restore: true + # global: + # repo1-retention-full: '7' + # repo1-retention-full-type: count + # repos: + # - name: repo1 + # storage: pvc + # volume: + # size: "10Gi" + # storageClass: myclass + # schedule: + # full: "" + # incr: "" + # diff: "" + # - name: repo1 + # storage: "s3" + # endpoint: ... + # region: ... + # restore: + # id: "unique restore identifier" + # repo: repo1 + # options: + # target-time: "2023-01-02 03:04:05+06" + + #users: # Application/Robot users + # appadmin: + # - superuser + # - createdb + # flyway: [] + #usersWithSecretRotation: + #- foo_user + #usersWithInPlaceSecretRotation: + #- flyway + #- bar_owner_user + + enableMasterLoadBalancer: false + enableReplicaLoadBalancer: false + enableConnectionPooler: false # enable/disable connection pooler deployment + enableReplicaConnectionPooler: false # set to enable connectionPooler for replica service + enableMasterPoolerLoadBalancer: false + enableReplicaPoolerLoadBalancer: false + + # IP ranges that are allowed to connect to LoadBalancer services + #allowedSourceRanges: 127.0.0.1/32 + + #databases: + # dbname: owner + + #preparedDatabases: + # bar: + # defaultUsers: true + # extensions: + # pg_partman: public + # schemas: + # data: {} + # history: + # defaultRoles: true + # defaultUsers: false + + enableShmVolume: true + # spiloRunAsUser: 101 + # spiloRunAsGroup: 103 + # spiloFSGroup: 103 + # podAnnotations: + # annotation.key: value + # serviceAnnotations: + # annotation.key: value + # podPriorityClassName: "spilo-pod-priority" + # tolerations: + # - key: postgres + # operator: Exists + # effect: NoSchedule + + # Clone existing cluster + #clone: + # cluster: name-of-cluster-to-clone + + #connectionPooler: + # dockerImage: docker.io/cybertecpostgresql/cybertec-pg-container:pgbouncer-1.23-2 + # numberOfInstances: 2 + # mode: transaction # session/transaction mode pooling + # schema: "pooler" + # user: "pooler" + # maxDBConnections: 60 + # resources: + # limits: + # cpu: "1" + # memory: 100Mi + # requests: + # cpu: 300m + # memory: 100Mi + + #sidecars: + # - name: "telegraf-sidecar" + # image: "telegraf:latest" + # ports: + # - name: metrics + # containerPort: 8094 + # protocol: TCP + # resources: + # limits: + # cpu: 500m + # memory: 500Mi + # requests: + # cpu: 100m + # memory: 100Mi + # env: + # - name: "USEFUL_VAR" + # value: "perhaps-true" + + # Add node affinity support by allowing postgres pods to schedule only on nodes that + # have label: "postgres-operator:enabled" set. + #nodeAffinity: + # requiredDuringSchedulingIgnoredDuringExecution: + # nodeSelectorTerms: + # - matchExpressions: + # - key: postgres-operator + # operator: In + # values: + # - enabled + + teamId: default \ No newline at end of file From 8b4d660f8494de978729f6e72b25e42598de09ef Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:54:31 +0300 Subject: [PATCH 17/23] Copy missing volume section to materialized crds --- .../postgres-operator/crds/postgresqls.yaml | 44 +++++++++++++++++++ manifests/postgresql.crd.yaml | 44 +++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index 4c25a0b5..43d9b60f 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -841,6 +841,50 @@ spec: type: string diff: type: string + volume: + type: object + required: + - "size" + properties: + iops: + type: integer + selector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + required: + - key + - operator + properties: + key: + type: string + operator: + type: string + enum: + - DoesNotExist + - Exists + - In + - NotIn + values: + type: array + items: + type: string + matchLabels: + type: object + x-kubernetes-preserve-unknown-fields: true + size: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + # Note: the value specified here must not be zero. + storageClass: + type: string + subPath: + type: string + throughput: + type: integer Pvcsize: type: string required: diff --git a/manifests/postgresql.crd.yaml b/manifests/postgresql.crd.yaml index 504abe52..1b82a1f0 100644 --- a/manifests/postgresql.crd.yaml +++ b/manifests/postgresql.crd.yaml @@ -839,6 +839,50 @@ spec: type: string diff: type: string + volume: + type: object + required: + - "size" + properties: + iops: + type: integer + selector: + type: object + properties: + matchExpressions: + type: array + items: + type: object + required: + - key + - operator + properties: + key: + type: string + operator: + type: string + enum: + - DoesNotExist + - Exists + - In + - NotIn + values: + type: array + items: + type: string + matchLabels: + type: object + x-kubernetes-preserve-unknown-fields: true + size: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + # Note: the value specified here must not be zero. + storageClass: + type: string + subPath: + type: string + throughput: + type: integer Pvcsize: type: string required: From a066469010162bbf1fcb6db37a6a2afdad878691 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Sun, 13 Oct 2024 23:56:16 +0300 Subject: [PATCH 18/23] Remove unused backup.pgbackrest.repos[].pvcsize parameter --- charts/postgres-operator/crds/postgresqls.yaml | 2 -- manifests/postgresql.crd.yaml | 2 -- pkg/apis/cpo.opensource.cybertec.at/v1/crds.go | 3 --- 3 files changed, 7 deletions(-) diff --git a/charts/postgres-operator/crds/postgresqls.yaml b/charts/postgres-operator/crds/postgresqls.yaml index 43d9b60f..89f25cf2 100644 --- a/charts/postgres-operator/crds/postgresqls.yaml +++ b/charts/postgres-operator/crds/postgresqls.yaml @@ -885,8 +885,6 @@ spec: type: string throughput: type: integer - Pvcsize: - type: string required: - name - storage diff --git a/manifests/postgresql.crd.yaml b/manifests/postgresql.crd.yaml index 1b82a1f0..b7d7ead1 100644 --- a/manifests/postgresql.crd.yaml +++ b/manifests/postgresql.crd.yaml @@ -883,8 +883,6 @@ spec: type: string throughput: type: integer - Pvcsize: - type: string required: - name - storage diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go index 9d78664a..0e9da3d2 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/crds.go @@ -1313,9 +1313,6 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{ }, }, }, - "pvcsize": { - Type: "string", - }, }, }, }, From 154b90fde6b77f834dec91c86bb838d9ed94f1af Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Mon, 14 Oct 2024 00:31:59 +0300 Subject: [PATCH 19/23] Update Helm charts for 0.8.0 --- charts/postgres-cluster/index.yaml | 19 ++++++++++++ .../postgres-cluster-0.8.0.tgz | Bin 0 -> 3640 bytes charts/postgres-operator/index.yaml | 27 ++++++++++++++++-- .../postgres-operator-0.8.0.tgz | Bin 0 -> 35862 bytes 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 charts/postgres-cluster/index.yaml create mode 100644 charts/postgres-cluster/postgres-cluster-0.8.0.tgz create mode 100644 charts/postgres-operator/postgres-operator-0.8.0.tgz diff --git a/charts/postgres-cluster/index.yaml b/charts/postgres-cluster/index.yaml new file mode 100644 index 00000000..3f7e6d83 --- /dev/null +++ b/charts/postgres-cluster/index.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +entries: + postgres-cluster: + - apiVersion: v2 + appVersion: 0.8.0-1 + created: "2024-10-14T00:30:44.172646449+03:00" + description: Deploys a PostgreSQL cluster using the PostgreSQL operator + digest: 53c26c4a8737a85670d5e9553ab24149364e14cf4b04ece158a9c70b9170a903 + maintainers: + - email: info@cybertec.at + name: CYBERTEC PostgreSQL International GmbH + name: postgres-cluster + sources: + - https://github.com/cybertec-postgresql/cybertec-pg-operator + type: application + urls: + - postgres-cluster-0.8.0.tgz + version: 0.8.0 +generated: "2024-10-14T00:30:44.172118016+03:00" diff --git a/charts/postgres-cluster/postgres-cluster-0.8.0.tgz b/charts/postgres-cluster/postgres-cluster-0.8.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..0b4273c08d5b00dcb5c95bfb68f819376d536283 GIT binary patch literal 3640 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 Cp=9X* literal 0 HcmV?d00001 From f269cd7be6c04ea6cc309951b2aac948fe5f59e5 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Mon, 14 Oct 2024 00:53:30 +0300 Subject: [PATCH 20/23] cluster chart: rename clusterSpecification to cluster --- charts/postgres-cluster/index.yaml | 6 +++--- .../postgres-cluster-0.8.0.tgz | Bin 3640 -> 8089 bytes .../templates/postgresql.yaml | 2 +- charts/postgres-cluster/values.yaml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charts/postgres-cluster/index.yaml b/charts/postgres-cluster/index.yaml index 3f7e6d83..907f45ef 100644 --- a/charts/postgres-cluster/index.yaml +++ b/charts/postgres-cluster/index.yaml @@ -3,9 +3,9 @@ entries: postgres-cluster: - apiVersion: v2 appVersion: 0.8.0-1 - created: "2024-10-14T00:30:44.172646449+03:00" + created: "2024-10-14T00:52:56.851410174+03:00" description: Deploys a PostgreSQL cluster using the PostgreSQL operator - digest: 53c26c4a8737a85670d5e9553ab24149364e14cf4b04ece158a9c70b9170a903 + digest: f275636dc39a2db215633cc3d7449e86fd18d1cc29aed7f06af5006137bebad5 maintainers: - email: info@cybertec.at name: CYBERTEC PostgreSQL International GmbH @@ -16,4 +16,4 @@ entries: urls: - postgres-cluster-0.8.0.tgz version: 0.8.0 -generated: "2024-10-14T00:30:44.172118016+03:00" +generated: "2024-10-14T00:52:56.850805082+03:00" diff --git a/charts/postgres-cluster/postgres-cluster-0.8.0.tgz b/charts/postgres-cluster/postgres-cluster-0.8.0.tgz index 0b4273c08d5b00dcb5c95bfb68f819376d536283..1c1d7be5b5b75354a2c9ea00e9e5f9921a3fb976 100644 GIT binary patch literal 8089 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 diff --git a/charts/postgres-cluster/templates/postgresql.yaml b/charts/postgres-cluster/templates/postgresql.yaml index 49fdf514..8418107a 100644 --- a/charts/postgres-cluster/templates/postgresql.yaml +++ b/charts/postgres-cluster/templates/postgresql.yaml @@ -14,4 +14,4 @@ metadata: {{- end}} spec: - {{- toYaml .Values.clusterSpecification | nindent 2 }} + {{- toYaml .Values.cluster | nindent 2 }} diff --git a/charts/postgres-cluster/values.yaml b/charts/postgres-cluster/values.yaml index a81a7f42..672df0e3 100644 --- a/charts/postgres-cluster/values.yaml +++ b/charts/postgres-cluster/values.yaml @@ -11,7 +11,7 @@ #extraAnnotations: # my-annotation: value -clusterSpecification: +cluster: dockerImage: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 numberOfInstances: 2 From 2c6d703d0381f19587a7f8cc02c9b1b8131b28bf Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Mon, 14 Oct 2024 01:04:52 +0300 Subject: [PATCH 21/23] Use PostgreSQL 17 by default --- charts/postgres-cluster/values.yaml | 6 +++--- charts/postgres-operator-ui/templates/deployment.yaml | 1 + charts/postgres-operator/crds/operatorconfigurations.yaml | 4 ++-- charts/postgres-operator/values.yaml | 4 ++-- manifests/configmap.yaml | 2 +- manifests/operatorconfiguration.crd.yaml | 4 ++-- manifests/postgresql-operator-default-configuration.yaml | 2 +- .../v1/operator_configuration_type.go | 2 +- pkg/cluster/majorversionupgrade.go | 1 + pkg/controller/operator_config.go | 2 +- pkg/util/config/config.go | 4 ++-- ui/manifests/deployment.yaml | 1 + 12 files changed, 18 insertions(+), 15 deletions(-) diff --git a/charts/postgres-cluster/values.yaml b/charts/postgres-cluster/values.yaml index 672df0e3..cb2e8b49 100644 --- a/charts/postgres-cluster/values.yaml +++ b/charts/postgres-cluster/values.yaml @@ -12,11 +12,11 @@ # my-annotation: value cluster: - dockerImage: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 + dockerImage: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 numberOfInstances: 2 postgresql: - version: "16" + version: "17" #parameters: # work_mem: "40MB" @@ -222,4 +222,4 @@ cluster: # values: # - enabled - teamId: default \ No newline at end of file + teamId: default diff --git a/charts/postgres-operator-ui/templates/deployment.yaml b/charts/postgres-operator-ui/templates/deployment.yaml index 61f000d1..8377240f 100644 --- a/charts/postgres-operator-ui/templates/deployment.yaml +++ b/charts/postgres-operator-ui/templates/deployment.yaml @@ -84,6 +84,7 @@ spec: "limit_iops": 16000, "limit_throughput": 1000, "postgresql_versions": [ + "17", "16", "15", "14", diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index f9b4aacb..6ff2c556 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -68,7 +68,7 @@ spec: type: string docker_image: type: string - default: "docker.io/cybertecpostgresql/cybertec-pg-container:postgres-16.2-1" + default: "docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2" enable_crd_registration: type: boolean default: true @@ -170,7 +170,7 @@ spec: default: "13" target_major_version: type: string - default: "16" + default: "17" kubernetes: type: object properties: diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 298e4d15..e36888c2 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -38,7 +38,7 @@ configGeneral: # etcd connection string for Patroni. Empty uses K8s-native DCS. etcd_host: "" # Database pod docker image - docker_image: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 + docker_image: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 # key name for annotation to ignore globally configured instance limits # ignore_instance_limits_annotation_key: "" @@ -91,7 +91,7 @@ configMajorVersionUpgrade: # minimal Postgres major version that will not automatically be upgraded minimal_major_version: "13" # target Postgres major version when upgrading clusters automatically - target_major_version: "16" + target_major_version: "17" configKubernetes: # list of additional capabilities for postgres container diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index 19a6bc70..ef860d17 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -34,7 +34,7 @@ data: # default_memory_request: 100Mi # delete_annotation_date_key: delete-date # delete_annotation_name_key: delete-clustername - docker_image: docker.io/cybertec-pg-container/postgres:rocky9-16.4-2 + docker_image: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 # downscaler_annotations: "deployment-time,downscaler/*" # enable_admin_role_for_users: "true" # enable_crd_registration: "true" diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index ccaa24c7..6797846f 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -66,7 +66,7 @@ spec: type: string docker_image: type: string - default: "docker.io/cybertecpostgresql/cybertec-pg-container:postgres-16.2-1" + default: "docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2" enable_crd_registration: type: boolean default: true @@ -168,7 +168,7 @@ spec: default: "13" target_major_version: type: string - default: "16" + default: "17" kubernetes: type: object properties: diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index 6974b33a..d4991dfb 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -40,7 +40,7 @@ configuration: # major_version_upgrade_team_allow_list: # - acid minimal_major_version: "13" - target_major_version: "16" + target_major_version: "17" kubernetes: # additional_pod_capabilities: # - "SYS_NICE" diff --git a/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go b/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go index fad9a9b3..a7603677 100644 --- a/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go +++ b/pkg/apis/cpo.opensource.cybertec.at/v1/operator_configuration_type.go @@ -50,7 +50,7 @@ type MajorVersionUpgradeConfiguration struct { MajorVersionUpgradeMode string `json:"major_version_upgrade_mode" default:"off"` // off - no actions, manual - manifest triggers action, full - manifest and minimal version violation trigger upgrade MajorVersionUpgradeTeamAllowList []string `json:"major_version_upgrade_team_allow_list,omitempty"` MinimalMajorVersion string `json:"minimal_major_version" default:"13"` - TargetMajorVersion string `json:"target_major_version" default:"16"` + TargetMajorVersion string `json:"target_major_version" default:"17"` } // KubernetesMetaConfiguration defines k8s conf required for all Postgres clusters and the operator itself diff --git a/pkg/cluster/majorversionupgrade.go b/pkg/cluster/majorversionupgrade.go index fc0000b4..49b76f6a 100644 --- a/pkg/cluster/majorversionupgrade.go +++ b/pkg/cluster/majorversionupgrade.go @@ -18,6 +18,7 @@ var VersionMap = map[string]int{ "14": 140000, "15": 150000, "16": 160000, + "17": 170000, } // IsBiggerPostgresVersion Compare two Postgres version numbers diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index aa072545..12f27a53 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -63,7 +63,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *cpov1.OperatorConfigura result.MajorVersionUpgradeMode = util.Coalesce(fromCRD.MajorVersionUpgrade.MajorVersionUpgradeMode, "off") result.MajorVersionUpgradeTeamAllowList = fromCRD.MajorVersionUpgrade.MajorVersionUpgradeTeamAllowList result.MinimalMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.MinimalMajorVersion, "13") - result.TargetMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.TargetMajorVersion, "16") + result.TargetMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.TargetMajorVersion, "17") // kubernetes config result.CustomPodAnnotations = fromCRD.Kubernetes.CustomPodAnnotations diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 2f80bf65..0f7dc510 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -189,7 +189,7 @@ type Config struct { WatchedNamespace string `name:"watched_namespace"` // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to' KubernetesUseConfigMaps bool `name:"kubernetes_use_configmaps" default:"false"` EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS - DockerImage string `name:"docker_image" default:"docker.io/cybertec-pg-container/postgres:rocky9-16.4-2"` + DockerImage string `name:"docker_image" default:"docker.io/cybertec-pg-container/postgres:rocky9-17.0-2"` SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers SidecarContainers []v1.Container `name:"sidecars"` PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"` @@ -259,7 +259,7 @@ type Config struct { MajorVersionUpgradeMode string `name:"major_version_upgrade_mode" default:"off"` MajorVersionUpgradeTeamAllowList []string `name:"major_version_upgrade_team_allow_list" default:""` MinimalMajorVersion string `name:"minimal_major_version" default:"13"` - TargetMajorVersion string `name:"target_major_version" default:"16"` + TargetMajorVersion string `name:"target_major_version" default:"17"` PatroniAPICheckInterval time.Duration `name:"patroni_api_check_interval" default:"1s"` PatroniAPICheckTimeout time.Duration `name:"patroni_api_check_timeout" default:"5s"` EnablePatroniFailsafeMode *bool `name:"enable_patroni_failsafe_mode" default:"false"` diff --git a/ui/manifests/deployment.yaml b/ui/manifests/deployment.yaml index 2dc87bac..24f3f20d 100644 --- a/ui/manifests/deployment.yaml +++ b/ui/manifests/deployment.yaml @@ -72,6 +72,7 @@ spec: "limit_iops": 16000, "limit_throughput": 1000, "postgresql_versions": [ + "17", "16", "15", "14", From c659a482d8a8c59a3e5d0c24f8a093ad9ad875d7 Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Mon, 14 Oct 2024 11:32:17 +0300 Subject: [PATCH 22/23] Update database image to correct name --- charts/postgres-cluster/values.yaml | 2 +- charts/postgres-operator/index.yaml | 8 ++++---- .../postgres-operator-0.8.0.tgz | Bin 35862 -> 56868 bytes charts/postgres-operator/values.yaml | 2 +- manifests/configmap.yaml | 2 +- pkg/util/config/config.go | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/charts/postgres-cluster/values.yaml b/charts/postgres-cluster/values.yaml index cb2e8b49..a1fee130 100644 --- a/charts/postgres-cluster/values.yaml +++ b/charts/postgres-cluster/values.yaml @@ -12,7 +12,7 @@ # my-annotation: value cluster: - dockerImage: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 + dockerImage: docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2 numberOfInstances: 2 postgresql: diff --git a/charts/postgres-operator/index.yaml b/charts/postgres-operator/index.yaml index 25c0e2ba..7de794e9 100644 --- a/charts/postgres-operator/index.yaml +++ b/charts/postgres-operator/index.yaml @@ -3,10 +3,10 @@ entries: postgres-operator: - apiVersion: v2 appVersion: 0.8.0 - created: "2024-10-14T00:31:08.306771145+03:00" + created: "2024-10-14T11:32:03.852199097+03:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes - digest: 028658e08f9057f98205ed337e22409d9caca5531a775d82424991df6abc7ff1 + digest: 306f56b67445d7be8d5e8d26a8eaaa0fd153ca477b03bbc0c238daf10a531792 home: https://github.com/cybertec-postgresql/cybertec-pg-operator keywords: - postgres @@ -16,11 +16,11 @@ entries: - spilo maintainers: - email: info@cybertec.at - name: Cybertec + name: CYBERTEC PostgreSQL International GmbH name: postgres-operator sources: - https://github.com/cybertec-postgresql/cybertec-pg-operator urls: - postgres-operator-0.8.0.tgz version: 0.8.0 -generated: "2024-10-14T00:31:08.304420994+03:00" +generated: "2024-10-14T11:32:03.849675216+03:00" diff --git a/charts/postgres-operator/postgres-operator-0.8.0.tgz b/charts/postgres-operator/postgres-operator-0.8.0.tgz index 6cd58ff6849f589f0635c28a885150804c07e67e..b477a39506d3d136bb48e74e972bea6a4b8f5b80 100644 GIT binary patch delta 24207 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 delta 3034 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 diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index e36888c2..8962567b 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -38,7 +38,7 @@ configGeneral: # etcd connection string for Patroni. Empty uses K8s-native DCS. etcd_host: "" # Database pod docker image - docker_image: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 + docker_image: docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2 # key name for annotation to ignore globally configured instance limits # ignore_instance_limits_annotation_key: "" diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index ef860d17..195946f9 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -34,7 +34,7 @@ data: # default_memory_request: 100Mi # delete_annotation_date_key: delete-date # delete_annotation_name_key: delete-clustername - docker_image: docker.io/cybertec-pg-container/postgres:rocky9-17.0-2 + docker_image: docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2 # downscaler_annotations: "deployment-time,downscaler/*" # enable_admin_role_for_users: "true" # enable_crd_registration: "true" diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index 0f7dc510..2e37a0b6 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -189,7 +189,7 @@ type Config struct { WatchedNamespace string `name:"watched_namespace"` // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to' KubernetesUseConfigMaps bool `name:"kubernetes_use_configmaps" default:"false"` EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS - DockerImage string `name:"docker_image" default:"docker.io/cybertec-pg-container/postgres:rocky9-17.0-2"` + DockerImage string `name:"docker_image" default:"docker.io/cybertecpostgresql/cybertec-pg-container:postgres-17.0-2"` SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers SidecarContainers []v1.Container `name:"sidecars"` PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"` From 5f100379f458a6f48c3dff90fd87c00b5944475a Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Mon, 14 Oct 2024 11:55:17 +0300 Subject: [PATCH 23/23] Update version table in README --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 40199353..e4348842 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,7 @@ The Operator project is being driven forward by CYBERTEC and is currently in pro | Release | Postgres versions | pgBackRest versions | Patroni versions | K8s versions | Golang | | :-------- | :---------------: | :-------------------: | :--------------: | :----------------:| :-----: | -| 0.7.0 | 12 → 16 | 2.52.1 | 3.3.1 | 1.21+ | 1.21.7 | -| next rc | 13 → 16 | 2.51 | 3.3.1 | 1.21+ | 1.21.7 | +| 0.8.0 | 13 → 17 | 2.53 | 4.0.2 | 1.21+ | 1.21.7 | ## Getting started @@ -73,4 +72,4 @@ There is a browser-friendly version of this documentation at ## Community -Coming soon \ No newline at end of file +Coming soon