complete merging master
This commit is contained in:
		
						commit
						773bc8d20e
					
				|  | @ -30,3 +30,7 @@ _testmain.go | ||||||
| .idea | .idea | ||||||
| 
 | 
 | ||||||
| scm-source.json | scm-source.json | ||||||
|  | 
 | ||||||
|  | # diagrams | ||||||
|  | *.aux | ||||||
|  | *.log | ||||||
|  |  | ||||||
|  | @ -18,4 +18,5 @@ install: | ||||||
|   - make deps |   - make deps | ||||||
| 
 | 
 | ||||||
| script: | script: | ||||||
|  |   - hack/verify-codegen.sh | ||||||
|   - travis_wait 20 goveralls -service=travis-ci -package ./pkg/... -v |   - travis_wait 20 goveralls -service=travis-ci -package ./pkg/... -v | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ Wanna contribute to the Postgres Operator? Yay - here is how! | ||||||
| ## Reporting issues | ## Reporting issues | ||||||
| 
 | 
 | ||||||
| If you have a question about patroni or have a problem using it, please read the`README` before filing an issue. | If you have a question about patroni or have a problem using it, please read the`README` before filing an issue. | ||||||
| Also double check with the current issues on our [Issues Tracker](https://github.com/zalando-incubator/postgres-operator/issues). | Also double check with the current issues on our [Issues Tracker](https://github.com/zalando/postgres-operator/issues). | ||||||
| 
 | 
 | ||||||
| ## Contributing a pull request | ## Contributing a pull request | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -44,6 +44,7 @@ clean: | ||||||
| 	rm -rf build scm-source.json | 	rm -rf build scm-source.json | ||||||
| 
 | 
 | ||||||
| local: ${SOURCES} | local: ${SOURCES} | ||||||
|  | 	hack/verify-codegen.sh | ||||||
| 	CGO_ENABLED=${CGO_ENABLED} go build -o build/${BINARY} $(LOCAL_BUILD_FLAGS) -ldflags "$(LDFLAGS)" $^ | 	CGO_ENABLED=${CGO_ENABLED} go build -o build/${BINARY} $(LOCAL_BUILD_FLAGS) -ldflags "$(LDFLAGS)" $^ | ||||||
| 
 | 
 | ||||||
| linux: ${SOURCES} | linux: ${SOURCES} | ||||||
|  | @ -88,4 +89,5 @@ deps: | ||||||
| 	@glide install --strip-vendor | 	@glide install --strip-vendor | ||||||
| 
 | 
 | ||||||
| test: | test: | ||||||
|  | 	hack/verify-codegen.sh | ||||||
| 	@go test ./... | 	@go test ./... | ||||||
|  |  | ||||||
							
								
								
									
										43
									
								
								README.md
								
								
								
								
							
							
						
						
									
										43
									
								
								README.md
								
								
								
								
							|  | @ -1,10 +1,16 @@ | ||||||
| # Postgres Operator | # Postgres Operator | ||||||
| 
 | 
 | ||||||
| [](https://travis-ci.org/zalando-incubator/postgres-operator) | [](https://travis-ci.org/zalando/postgres-operator) | ||||||
| [](https://coveralls.io/github/zalando-incubator/postgres-operator) | [](https://coveralls.io/github/zalando/postgres-operator) | ||||||
| [](https://goreportcard.com/report/github.com/zalando-incubator/postgres-operator) | [](https://goreportcard.com/report/github.com/zalando/postgres-operator) | ||||||
| [](https://godoc.org/github.com/zalando-incubator/postgres-operator) | [](https://godoc.org/github.com/zalando/postgres-operator) | ||||||
| [](https://golangci.com/r/github.com/zalando-incubator/postgres-operator) | [](https://golangci.com/r/github.com/zalando/postgres-operator) | ||||||
|  | 
 | ||||||
|  | <img src="docs/diagrams/logo.png" width="200"> | ||||||
|  | 
 | ||||||
|  | # Google Summer of Code | ||||||
|  | 
 | ||||||
|  | The Postgres Operator made it to the [Google Summer of Code 2019](https://summerofcode.withgoogle.com/)! As a brand new mentoring organization, we are now looking for our first mentees. Check [our ideas](https://github.com/zalando/postgres-operator/blob/master/docs/gsoc-2019/ideas.md#google-summer-of-code-2019) and start discussion in [the issue tracker](https://github.com/zalando/postgres-operator/issues). And don't forget to spread a word about our GSoC participation to attract even more students. | ||||||
| 
 | 
 | ||||||
| ## Introduction | ## Introduction | ||||||
| 
 | 
 | ||||||
|  | @ -28,8 +34,22 @@ manages PostgreSQL clusters on Kubernetes: | ||||||
| 3. Finally, the operator periodically synchronizes the actual state of each | 3. Finally, the operator periodically synchronizes the actual state of each | ||||||
|    Postgres cluster with the desired state defined in the cluster's manifest. |    Postgres cluster with the desired state defined in the cluster's manifest. | ||||||
| 
 | 
 | ||||||
| There is a browser-friendly version of this documentation at | Here is a diagram, that summarizes what would be created by the operator, when a | ||||||
| [postgres-operator.readthedocs.io](https://postgres-operator.readthedocs.io) | new Postgres cluster CRD was submitted: | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | This picture is not complete without an overview of what is inside a pod, so | ||||||
|  | let's zoom in: | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | These two diagrams should help you to understand the basics of what kind of | ||||||
|  | functionality the operator provides. Below we discuss all everything in more | ||||||
|  | details. | ||||||
|  | 
 | ||||||
|  | There is a browser-friendly version of this documentation at [postgres-operator.readthedocs.io](https://postgres-operator.readthedocs.io) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ## Table of contents | ## Table of contents | ||||||
| 
 | 
 | ||||||
|  | @ -43,6 +63,13 @@ There is a browser-friendly version of this documentation at | ||||||
| 
 | 
 | ||||||
| the rest of the document is a tutorial to get you up and running with the operator on Minikube. | the rest of the document is a tutorial to get you up and running with the operator on Minikube. | ||||||
| 
 | 
 | ||||||
|  |     | ||||||
|  | ## Community       | ||||||
|  | 
 | ||||||
|  | There are two places to get in touch with the community: | ||||||
|  | 1. The [GitHub issue tracker](https://github.com/zalando/postgres-operator/issues) | ||||||
|  | 2. The #postgres-operator slack channel under [Postgres Slack](https://postgres-slack.herokuapp.com) | ||||||
|  | 
 | ||||||
| ## Quickstart | ## Quickstart | ||||||
| 
 | 
 | ||||||
| Prerequisites: | Prerequisites: | ||||||
|  | @ -58,7 +85,7 @@ built-in Kubernetes support. | ||||||
| ### Local execution | ### Local execution | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| git clone https://github.com/zalando-incubator/postgres-operator.git | git clone https://github.com/zalando/postgres-operator.git | ||||||
| cd postgres-operator | cd postgres-operator | ||||||
| 
 | 
 | ||||||
| minikube start | minikube start | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| set -e -x | set -e -x | ||||||
| 
 | 
 | ||||||
| team_repo="$GOPATH/src/github.com/zalando-incubator/" | team_repo="$GOPATH/src/github.com/zalando/" | ||||||
| project_dir="$team_repo/postgres-operator" | project_dir="$team_repo/postgres-operator" | ||||||
| 
 | 
 | ||||||
| mkdir -p "$team_repo" | mkdir -p "$team_repo" | ||||||
|  |  | ||||||
|  | @ -9,9 +9,9 @@ import ( | ||||||
| 	"syscall" | 	"syscall" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/controller" | 	"github.com/zalando/postgres-operator/pkg/controller" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ pipeline: | ||||||
|       type: script |       type: script | ||||||
|       env: |       env: | ||||||
|         GOPATH: /root/go |         GOPATH: /root/go | ||||||
|         OPERATOR_TOP_DIR: /root/go/src/github.com/zalando-incubator |         OPERATOR_TOP_DIR: /root/go/src/github.com/zalando | ||||||
|       commands: |       commands: | ||||||
|         - desc: 'Update' |         - desc: 'Update' | ||||||
|           cmd: | |           cmd: | | ||||||
|  |  | ||||||
|  | @ -146,6 +146,93 @@ data: | ||||||
|   ... |   ... | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | Note that the Kubernetes version 1.13 brings [taint-based eviction](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions) to the beta stage and enables it by default. | ||||||
|  | Postgres pods by default receive tolerations for `unreachable` and `noExecute` taints with the timeout of `5m`. | ||||||
|  | Depending on your setup, you may want to adjust these parameters to prevent master pods from being evicted by the Kubernetes runtime. | ||||||
|  | To prevent eviction completely, specify the toleration by leaving out the `tolerationSeconds` value (similar to how Kubernetes' own DaemonSets are configured) | ||||||
|  | 
 | ||||||
|  | ### Enable pod anti affinity | ||||||
|  | 
 | ||||||
|  | To ensure Postgres pods are running on different topologies, you can use [pod anti affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) | ||||||
|  | and configure the required topology in the operator ConfigMap. | ||||||
|  | 
 | ||||||
|  | Enable pod anti affinity by adding following line to the operator ConfigMap: | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | metadata: | ||||||
|  |   name: postgres-operator | ||||||
|  | data: | ||||||
|  |   enable_pod_antiaffinity: "true" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | By default the topology key for the pod anti affinity is set to `kubernetes.io/hostname`, | ||||||
|  | you can set another topology key e.g. `failure-domain.beta.kubernetes.io/zone` by adding following line | ||||||
|  | to the operator ConfigMap, see [built-in node labels](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels) for available topology keys: | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | metadata: | ||||||
|  |   name: postgres-operator | ||||||
|  | data: | ||||||
|  |   enable_pod_antiaffinity: "true" | ||||||
|  |   pod_antiaffinity_topology_key: "failure-domain.beta.kubernetes.io/zone" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Add cluster-specific labels | ||||||
|  | 
 | ||||||
|  | In some cases, you might want to add `labels` that are specific to a given | ||||||
|  | postgres cluster, in order to identify its child objects. | ||||||
|  | The typical use case is to add labels that identifies the `Pods` created by the | ||||||
|  | operator, in order to implement fine-controlled `NetworkPolicies`. | ||||||
|  | 
 | ||||||
|  | **OperatorConfiguration** | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: OperatorConfiguration | ||||||
|  | metadata: | ||||||
|  |   name: postgresql-operator-configuration | ||||||
|  | configuration: | ||||||
|  |   kubernetes: | ||||||
|  |     inherited_labels: | ||||||
|  |     - application | ||||||
|  |     - environment | ||||||
|  | ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | **cluster manifest** | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: postgresql | ||||||
|  | metadata: | ||||||
|  |   name: demo-cluster | ||||||
|  |   labels: | ||||||
|  |     application: my-app | ||||||
|  |     environment: demo | ||||||
|  | spec: | ||||||
|  | ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | **network policy** | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | kind: NetworkPolicy | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: netpol-example | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       application: my-app | ||||||
|  |       environment: demo | ||||||
|  | ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## Custom Pod Environment Variables | ## Custom Pod Environment Variables | ||||||
| 
 | 
 | ||||||
| It is possible to configure a ConfigMap which is used by the Postgres pods as | It is possible to configure a ConfigMap which is used by the Postgres pods as | ||||||
|  |  | ||||||
|  | @ -93,14 +93,14 @@ would create a directory for the GOPATH (i.e. ~/go) and place the source code | ||||||
| under the ~/go/src subdirectories. | under the ~/go/src subdirectories. | ||||||
| 
 | 
 | ||||||
| Given the schema above, the postgres operator source code located at | Given the schema above, the postgres operator source code located at | ||||||
| `github.com/zalando-incubator/postgres-operator` should be put at | `github.com/zalando/postgres-operator` should be put at | ||||||
| -`~/go/src/github.com/zalando-incubator/postgres-operator`. | -`~/go/src/github.com/zalando/postgres-operator`. | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
|     $ export GOPATH=~/go |     $ export GOPATH=~/go | ||||||
|     $ mkdir -p ${GOPATH}/src/github.com/zalando-incubator/ |     $ mkdir -p ${GOPATH}/src/github.com/zalando/ | ||||||
|     $ cd ${GOPATH}/src/github.com/zalando-incubator/ |     $ cd ${GOPATH}/src/github.com/zalando/ | ||||||
|     $ git clone https://github.com/zalando-incubator/postgres-operator.git |     $ git clone https://github.com/zalando/postgres-operator.git | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Building the operator | ## Building the operator | ||||||
|  | @ -157,7 +157,7 @@ The operator employs k8s-provided code generation to obtain deep copy methods an | ||||||
| the `verify-codegen.sh` checks if the generated code is up-to-date (to be used within CI). The `/pkg/generated/` contains the resultant code. To make these scripts work, you may need to `export GOPATH=$(go env GOPATH)` | the `verify-codegen.sh` checks if the generated code is up-to-date (to be used within CI). The `/pkg/generated/` contains the resultant code. To make these scripts work, you may need to `export GOPATH=$(go env GOPATH)` | ||||||
| 
 | 
 | ||||||
| References for code generation are: | References for code generation are: | ||||||
| * [Relevant pull request](https://github.com/zalando-incubator/postgres-operator/pull/369) | * [Relevant pull request](https://github.com/zalando/postgres-operator/pull/369) | ||||||
| See comments there for minor issues that can sometimes broke the generation process. | See comments there for minor issues that can sometimes broke the generation process. | ||||||
| * [Code generator source code](https://github.com/kubernetes/code-generator) | * [Code generator source code](https://github.com/kubernetes/code-generator) | ||||||
| * [Code Generation for CustomResources](https://blog.openshift.com/kubernetes-deep-dive-code-generation-customresources/) - intro post on the topic | * [Code Generation for CustomResources](https://blog.openshift.com/kubernetes-deep-dive-code-generation-customresources/) - intro post on the topic | ||||||
|  |  | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | OBJ=$(patsubst %.tex, %.png, $(wildcard *.tex)) | ||||||
|  | 
 | ||||||
|  | .PHONY: all | ||||||
|  | 
 | ||||||
|  | all: $(OBJ) | ||||||
|  | 
 | ||||||
|  | %.pdf: %.tex | ||||||
|  | 	lualatex $< -shell-escape $@ | ||||||
|  | 
 | ||||||
|  | %.png: %.pdf | ||||||
|  | 	convert -flatten -density 300 $< -quality 90 $@ | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 7.6 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 253 KiB | 
|  | @ -0,0 +1,101 @@ | ||||||
|  | \documentclass{article} | ||||||
|  | \usepackage{tikz} | ||||||
|  | \usepackage[graphics,tightpage,active]{preview} | ||||||
|  | \usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds} | ||||||
|  | \usepackage{lscape} | ||||||
|  | 
 | ||||||
|  | \pagenumbering{gobble} | ||||||
|  | 
 | ||||||
|  | \PreviewEnvironment{tikzpicture} | ||||||
|  | \PreviewEnvironment{equation} | ||||||
|  | \PreviewEnvironment{equation*} | ||||||
|  | \newlength{\imagewidth} | ||||||
|  | \newlength{\imagescale} | ||||||
|  | \pagestyle{empty} | ||||||
|  | \thispagestyle{empty} | ||||||
|  | 
 | ||||||
|  | \begin{document} | ||||||
|  | \begin{center} | ||||||
|  | \begin{tikzpicture}[ | ||||||
|  |   scale=0.5,transform shape, | ||||||
|  |   font=\sffamily, | ||||||
|  |   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, | ||||||
|  |   operator/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   pod/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   service/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   endpoint/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   secret/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   pvc/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   label/.style={rectangle,inner sep=0,outer sep=0}, | ||||||
|  |   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, | ||||||
|  |   every node/.style={align=center}] | ||||||
|  | 
 | ||||||
|  |   % Position the nodes using a matrix layout | ||||||
|  | 
 | ||||||
|  |   \matrix{ | ||||||
|  |     \& \node[component] (crd) {CRD}; \\ | ||||||
|  |     \& \node[operator] (operator) {Operator}; \\ | ||||||
|  |         \path | ||||||
|  |           node[service] (service-master) {Master} | ||||||
|  |           node[label, right of=service-master] (service-middle) {} | ||||||
|  |           node[label, below of=service-middle] (services-label) {Services} | ||||||
|  |           node[service, right=.5cm of service-master] (service-replica) {Replica} | ||||||
|  |           node[border, behind path, | ||||||
|  |                fit=(service-master)(service-replica)(services-label) | ||||||
|  |           ] (services) {}; | ||||||
|  |     \& | ||||||
|  |     \node[component] (sts) {Statefulset}; \& \node[component] (pdb) {Pod Disruption Budget}; \\ | ||||||
|  |     \path | ||||||
|  |       node[service] (master-endpoint) {Master} | ||||||
|  |       node[service, right=.5cm of master-endpoint] (replica-endpoint) {Replica} | ||||||
|  |       node[label, right of=master-endpoint] (endpoint-middle) {} | ||||||
|  |       node[label, below of=endpoint-middle] (endpoint-label) {Endpoints} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(master-endpoint)(replica-endpoint)(endpoint-label) | ||||||
|  |       ] (endpoints) {}; \& | ||||||
|  |     \node[component] (pod-template) {Pod Template}; \& | ||||||
|  |     \node[border] (secrets) { | ||||||
|  |         \begin{tikzpicture}[] | ||||||
|  |             \node[secret] (users-secret) at (0, 0) {Users}; | ||||||
|  |             \node[secret] (robots-secret) at (2, 0) {Robots}; | ||||||
|  |             \node[secret] (standby-secret) at (4, 0) {Standby}; | ||||||
|  |         \end{tikzpicture} \\ | ||||||
|  |         Secrets | ||||||
|  |     }; \\ \& | ||||||
|  |     \path | ||||||
|  |       node[pod] (replica1-pod) {Replica} | ||||||
|  |       node[pod, left=.5cm of replica1-pod] (master-pod) {Master} | ||||||
|  |       node[pod, right=.5cm of replica1-pod] (replica2-pod) {Replica} | ||||||
|  |       node[label, below of=replica1-pod] (pod-label) {Pods} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(master-pod)(replica1-pod)(replica2-pod)(pod-label) | ||||||
|  |       ] (pods) {}; \\ \& | ||||||
|  |     \path | ||||||
|  |       node[pvc] (replica1-pvc) {Replica} | ||||||
|  |       node[pvc, left=.5cm of replica1-pvc] (master-pvc) {Master} | ||||||
|  |       node[pvc, right=.5cm of replica1-pvc] (replica2-pvc) {Replica} | ||||||
|  |       node[label, below of=replica1-pvc] (pvc-label) {Persistent Volume Claims} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(master-pvc)(replica1-pvc)(replica2-pvc)(pvc-label) | ||||||
|  |       ] (pvcs) {}; \& | ||||||
|  |     \\ \& \\ | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   % Draw the arrows between the nodes and label them. | ||||||
|  |   \draw[to] (crd) -- node[midway,above] {} node[midway,below] {} (operator); | ||||||
|  |   \draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (sts); | ||||||
|  |   \draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (secrets); | ||||||
|  |   \draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (pdb); | ||||||
|  |   \draw[to] (service-master) -- node[midway,above] {} node[midway,below] {} (master-endpoint); | ||||||
|  |   \draw[to] (service-replica) -- node[midway,above] {} node[midway,below] {} (replica-endpoint); | ||||||
|  |   \draw[to] (master-pod) -- node[midway,above] {} node[midway,below] {} (master-pvc); | ||||||
|  |   \draw[to] (replica1-pod) -- node[midway,above] {} node[midway,below] {} (replica1-pvc); | ||||||
|  |   \draw[to] (replica2-pod) -- node[midway,above] {} node[midway,below] {} (replica2-pvc); | ||||||
|  |   \draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (services); | ||||||
|  |   \draw[to] (sts) -- node[midway,above] {} node[midway,below] {} (pod-template); | ||||||
|  |   \draw[to] (pod-template) -- node[midway,above] {} node[midway,below] {} (pods); | ||||||
|  | \end{tikzpicture} | ||||||
|  | \end{center} | ||||||
|  | \end{document} | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 236 KiB | 
|  | @ -0,0 +1,92 @@ | ||||||
|  | \documentclass{article} | ||||||
|  | \usepackage{tikz} | ||||||
|  | \usepackage[graphics,tightpage,active]{preview} | ||||||
|  | \usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds} | ||||||
|  | \usepackage{lscape} | ||||||
|  | 
 | ||||||
|  | \pagenumbering{gobble} | ||||||
|  | 
 | ||||||
|  | \PreviewEnvironment{tikzpicture} | ||||||
|  | \PreviewEnvironment{equation} | ||||||
|  | \PreviewEnvironment{equation*} | ||||||
|  | \newlength{\imagewidth} | ||||||
|  | \newlength{\imagescale} | ||||||
|  | \pagestyle{empty} | ||||||
|  | \thispagestyle{empty} | ||||||
|  | 
 | ||||||
|  | \begin{document} | ||||||
|  | \begin{center} | ||||||
|  | \begin{tikzpicture}[ | ||||||
|  |   scale=0.5,transform shape, | ||||||
|  |   font=\sffamily, | ||||||
|  |   every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm}, | ||||||
|  |   pod/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   volume/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   sidecar/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   k8s-label/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=1.5cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   affinity/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=2cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}}, | ||||||
|  |   label/.style={rectangle,inner sep=0,outer sep=0}, | ||||||
|  |   to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize}, | ||||||
|  |   every node/.style={align=center}] | ||||||
|  | 
 | ||||||
|  |   % Position the nodes using a matrix layout | ||||||
|  | 
 | ||||||
|  |   \matrix{ | ||||||
|  |     \path | ||||||
|  |       node[k8s-label] (app-label) {App} | ||||||
|  |       node[k8s-label, right=.25cm of app-label] (role-label) {Role} | ||||||
|  |       node[k8s-label, right=.25cm of role-label] (custom-label) {Custom} | ||||||
|  |       node[label, below of=role-label] (k8s-label-label) {K8S Labels} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(app-label)(role-label)(custom-label)(k8s-label-label) | ||||||
|  |       ] (k8s-labels) {};  \& \& | ||||||
|  |     \path | ||||||
|  |       node[affinity] (affinity) {Affinity} | ||||||
|  |       node[label, right=.25cm of affinity] (affinity-middle) {} | ||||||
|  |       node[affinity, right=.25cm of affinity-middle] (anti-affinity) {Anti-affinity} | ||||||
|  |       node[label, below of=affinity-middle] (affinity-label) {Assigning to nodes} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(affinity)(anti-affinity)(affinity-label) | ||||||
|  |       ] (affinity) {}; \\ | ||||||
|  |     \& \node[pod] (pod) {Pod}; \& \\ | ||||||
|  |     \path | ||||||
|  |       node[volume, minimum width={width("shm-volume")}] (data-volume) {Data} | ||||||
|  |       node[volume, right=.25cm of data-volume, minimum width={width("shm-volume")}] (tokens-volume) {Tokens} | ||||||
|  |       node[volume, right=.25cm of tokens-volume] (shm-volume) {/dev/shm} | ||||||
|  |       node[label, below of=tokens-volume] (volumes-label) {Volumes} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(data-volume)(shm-volume)(tokens-volume)(volumes-label) | ||||||
|  |       ] (volumes) {}; \& | ||||||
|  |     \node[component] (spilo) {Spilo}; \& | ||||||
|  |     \node[sidecar] (scalyr) {Scalyr}; \& \\ \& | ||||||
|  |     \path | ||||||
|  |       node[component] (patroni) {Patroni} | ||||||
|  |       node[component, below=.25cm of patroni] (postgres) {PostgreSQL} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(postgres)(patroni) | ||||||
|  |       ] (spilo-components) {}; \& | ||||||
|  |     \path | ||||||
|  |       node[sidecar] (custom-sidecar1) {User defined} | ||||||
|  |       node[label, right=.25cm of custom-sidecar1] (sidecars-middle) {} | ||||||
|  |       node[sidecar, right=.25cm of sidecars-middle] (custom-sidecar2) {User defined} | ||||||
|  |       node[label, below of=sidecars-middle] (sidecars-label) {Custom sidecars} | ||||||
|  |       node[border, behind path, | ||||||
|  |            fit=(custom-sidecar1)(custom-sidecar2)(sidecars-label) | ||||||
|  |       ] (sidecars) {}; | ||||||
|  |     \\ \& \\ | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   % Draw the arrows between the nodes and label them. | ||||||
|  |   \draw[to] (pod) to [bend left=25] (volumes); | ||||||
|  |   \draw[to] (pod) to [bend left=25] (k8s-labels); | ||||||
|  |   \draw[to] (pod) to [bend right=25] (affinity); | ||||||
|  |   \draw[to] (pod) to [bend right=25] (scalyr); | ||||||
|  |   \draw[to] (pod) to [bend right=25] (sidecars); | ||||||
|  |   \draw[to] (pod) -- node[midway,above] {} node[midway,below] {} (spilo); | ||||||
|  |   \draw[to] (spilo) -- node[midway,above] {} node[midway,below] {} (spilo-components); | ||||||
|  | 
 | ||||||
|  | \end{tikzpicture} | ||||||
|  | \end{center} | ||||||
|  | \end{document} | ||||||
|  | @ -0,0 +1,64 @@ | ||||||
|  | 
 | ||||||
|  | # Google Summer of Code 2019 | ||||||
|  | 
 | ||||||
|  | ## Applications steps  | ||||||
|  | 
 | ||||||
|  | 1. Please carefully read the official [Google Summer of Code Student Guide](https://google.github.io/gsocguides/student/)  | ||||||
|  | 2. Join the #postgres-operator slack channel under [Postgres Slack](https://postgres-slack.herokuapp.com) to introduce yourself to the community and get quick feedback on your application. | ||||||
|  | 3. Select a project from the list of ideas below or propose your own. | ||||||
|  | 4. Write a proposal draft.  Please open an issue with the label `gsoc2019_application` in the [operator repository](https://github.com/zalando/postgres-operator/issues)  so that the community members can publicly review it. See proposal instructions below for details. | ||||||
|  | 5. Submit proposal and the proof of enrollment before April 9 2019 18:00 UTC through the web site of the Program. | ||||||
|  | 
 | ||||||
|  | ## Project ideas  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### Place database pods into the "Guaranteed" Quality-of-Service class  | ||||||
|  | 
 | ||||||
|  | * **Description**: Kubernetes runtime does not kill pods in this class on condition they stay within their resource limits, which is desirable for the DB pods serving production workloads.  To be assigned to that class, pod's resources must equal its limits. The task is to add the `enableGuaranteedQoSClass` or the like option to the Postgres manifest and the operator configmap that forcibly re-write pod resources to match the limits. | ||||||
|  | * **Recommended skills**: golang, basic Kubernetes abstractions | ||||||
|  | * **Difficulty**: moderate | ||||||
|  | * **Mentor(s)**:  Felix Kunde [@FxKu](https://github.com/fxku), Sergey Dudoladov [@sdudoladov](https://github.com/sdudoladov) | ||||||
|  | 
 | ||||||
|  | ### Implement the kubectl plugin for the Postgres CustomResourceDefinition | ||||||
|  | 
 | ||||||
|  | * **Description**: [kubectl plugins](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/) enable extending the Kubernetes command-line client `kubectl`  with commands to manage custom resources. The task is to design and implement a plugin for the `kubectl postgres` command,  | ||||||
|  | that can enable, for example, correct deletion or major version upgrade of Postgres clusters. | ||||||
|  | * **Recommended skills**: golang, shell scripting, operational experience with Kubernetes | ||||||
|  | * **Difficulty**: moderate to medium, depending on the plugin design | ||||||
|  | * **Mentor(s)**:  Felix Kunde [@FxKu](https://github.com/fxku), Sergey Dudoladov [@sdudoladov](https://github.com/sdudoladov) | ||||||
|  | 
 | ||||||
|  | ### Implement the openAPIV3Schema for the Postgres CRD | ||||||
|  | 
 | ||||||
|  | * **Description**: at present the operator validates a database manifest on its own.  | ||||||
|  | It will be helpful to reject erroneous manifests before they reach the operator using the [native Kubernetes CRD validation](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#validation). It is up to the student to decide whether to write the schema manually or to adopt existing [schema generator developed for the Prometheus project](https://github.com/ant31/crd-validation). | ||||||
|  | * **Recommended skills**: golang, JSON schema | ||||||
|  | * **Difficulty**: medium | ||||||
|  | * **Mentor(s)**: Sergey Dudoladov [@sdudoladov](https://github.com/sdudoladov)  | ||||||
|  | * **Issue**: [#388](https://github.com/zalando/postgres-operator/issues/388) | ||||||
|  | 
 | ||||||
|  | ###  Design a solution for the local testing of the operator | ||||||
|  | 
 | ||||||
|  | * **Description**: The current way of testing is to run minikube, either manually or with some tooling around it like `/run-operator_locally.sh` or Vagrant. This has at least three problems: | ||||||
|  | First, minikube is a single node cluster, so it is unsuitable for testing vital functions such as pod migration between nodes. Second, minikube starts slowly; that prolongs local testing.  | ||||||
|  | Third, every contributor  needs to come up with their own solution for local testing. The task is to come up with a better option which will enable us to conveniently and uniformly  run e2e tests locally / potentially in Travis CI. | ||||||
|  | A promising option is the Kubernetes own [kind](https://github.com/kubernetes-sigs/kind)   | ||||||
|  | * **Recommended skills**: Docker, shell scripting, basic Kubernetes abstractions | ||||||
|  | * **Difficulty**: medium to hard depending on the selected desing | ||||||
|  | * **Mentor(s)**: Dmitry Dolgov [@erthalion](https://github.com/erthalion), Sergey Dudoladov [@sdudoladov](https://github.com/sdudoladov)  | ||||||
|  | * **Issue**: [#475](https://github.com/zalando/postgres-operator/issues/475) | ||||||
|  | 
 | ||||||
|  | ### Detach a Postgres cluster from the operator for maintenance | ||||||
|  | 
 | ||||||
|  | * **Description**: sometimes a Postgres cluster requires manual maintenance. During such maintenance the operator should ignore all the changes manually applied to the cluster.  | ||||||
|  |   Currently the only way to achieve this behavior is to shutdown the operator altogether, for instance by scaling down the operator's own deployment to zero pods. That approach evidently affects all Postgres databases under the operator control and thus is highly undesirable in production Kubernetes clusters. It would be much better to be able to detach only the desired Postgres cluster from the operator for the time being and re-attach it again after maintenance.  | ||||||
|  | * **Recommended skills**: golang, architecture of a Kubernetes operator | ||||||
|  | * **Difficulty**: hard - requires significant modification of the operator's internals and careful consideration of the corner cases. | ||||||
|  | * **Mentor(s)**: Dmitry Dolgov [@erthalion](https://github.com/erthalion), Sergey Dudoladov [@sdudoladov](https://github.com/sdudoladov)  | ||||||
|  | * **Issue**: [#421](https://github.com/zalando/postgres-operator/issues/421) | ||||||
|  | 
 | ||||||
|  | ### Propose your own idea | ||||||
|  | 
 | ||||||
|  | Feel free to come up with your own ideas.  For inspiration,  | ||||||
|  | see [our bug tracker](https://github.com/zalando/postgres-operator/issues),  | ||||||
|  | the [official `CustomResouceDefinition` docs](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/)  | ||||||
|  | and [other operators](https://github.com/operator-framework/awesome-operators). | ||||||
|  | @ -8,10 +8,10 @@ manages PostgreSQL clusters on Kubernetes: | ||||||
|    user submits a new manifest, the operator fetches that manifest and spawns a |    user submits a new manifest, the operator fetches that manifest and spawns a | ||||||
|    new Postgres cluster along with all necessary entities such as Kubernetes |    new Postgres cluster along with all necessary entities such as Kubernetes | ||||||
|    StatefulSets and Postgres roles.  See this |    StatefulSets and Postgres roles.  See this | ||||||
|    [Postgres cluster manifest](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml) |    [Postgres cluster manifest](https://github.com/zalando/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml) | ||||||
|    for settings that a manifest may contain. |    for settings that a manifest may contain. | ||||||
| 
 | 
 | ||||||
| 2. The operator also watches updates to [its own configuration](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/configmap.yaml) | 2. The operator also watches updates to [its own configuration](https://github.com/zalando/postgres-operator/blob/master/manifests/configmap.yaml) | ||||||
|    and alters running Postgres clusters if necessary.  For instance, if a pod |    and alters running Postgres clusters if necessary.  For instance, if a pod | ||||||
|    docker image is changed, the operator carries out the rolling update.  That |    docker image is changed, the operator carries out the rolling update.  That | ||||||
|    is, the operator re-spawns one-by-one pods of each StatefulSet it manages |    is, the operator re-spawns one-by-one pods of each StatefulSet it manages | ||||||
|  | @ -47,11 +47,11 @@ the operator is deployed to multiple Kubernetes clusters, where users deploy | ||||||
| manifests via our CI/CD infrastructure or rely on a slim user interface to | manifests via our CI/CD infrastructure or rely on a slim user interface to | ||||||
| create manifests. | create manifests. | ||||||
| 
 | 
 | ||||||
| Please, report any issues discovered to https://github.com/zalando-incubator/postgres-operator/issues. | Please, report any issues discovered to https://github.com/zalando/postgres-operator/issues. | ||||||
| 
 | 
 | ||||||
| ## Talks | ## Talks | ||||||
| 
 | 
 | ||||||
| 1. "PostgreSQL and Kubernetes: DBaaS without a vendor-lock" talk by Oleksii Kliukin, PostgreSQL Sessions 2018: [slides](https://speakerdeck.com/alexeyklyukin/postgresql-and-kubernetes-dbaas-without-a-vendor-lock) | 1. "PostgreSQL and Kubernetes: DBaaS without a vendor-lock" talk by Oleksii Kliukin, PostgreSQL Sessions 2018: [video](https://www.youtube.com/watch?v=q26U2rQcqMw) | [slides](https://speakerdeck.com/alexeyklyukin/postgresql-and-kubernetes-dbaas-without-a-vendor-lock) | ||||||
| 
 | 
 | ||||||
| 2. "PostgreSQL High Availability on Kubernetes with Patroni" talk by Oleksii Kliukin, Atmosphere 2018: [video](https://www.youtube.com/watch?v=cFlwQOPPkeg) | [slides](https://speakerdeck.com/alexeyklyukin/postgresql-high-availability-on-kubernetes-with-patroni) | 2. "PostgreSQL High Availability on Kubernetes with Patroni" talk by Oleksii Kliukin, Atmosphere 2018: [video](https://www.youtube.com/watch?v=cFlwQOPPkeg) | [slides](https://speakerdeck.com/alexeyklyukin/postgresql-high-availability-on-kubernetes-with-patroni) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ built-in Kubernetes support. | ||||||
| ## Local execution | ## Local execution | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| git clone https://github.com/zalando-incubator/postgres-operator.git | git clone https://github.com/zalando/postgres-operator.git | ||||||
| cd postgres-operator | cd postgres-operator | ||||||
| 
 | 
 | ||||||
| minikube start | minikube start | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ Individual postgres clusters are described by the Kubernetes *cluster manifest* | ||||||
| that has the structure defined by the `postgres CRD` (custom resource | that has the structure defined by the `postgres CRD` (custom resource | ||||||
| definition). The following section describes the structure of the manifest and | definition). The following section describes the structure of the manifest and | ||||||
| the purpose of individual keys. You can take a look at the examples of the | the purpose of individual keys. You can take a look at the examples of the | ||||||
| [minimal](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml) | [minimal](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml) | ||||||
| and the | and the | ||||||
| [complete](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml) | [complete](https://github.com/zalando/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml) | ||||||
| cluster manifests. | cluster manifests. | ||||||
| 
 | 
 | ||||||
| When Kubernetes resources, such as memory, CPU or volumes, are configured, | When Kubernetes resources, such as memory, CPU or volumes, are configured, | ||||||
|  | @ -35,6 +35,14 @@ Those parameters are grouped under the `metadata` top-level key. | ||||||
|   namespace. Optional (if present, should match the namespace where the |   namespace. Optional (if present, should match the namespace where the | ||||||
|   manifest is applied). |   manifest is applied). | ||||||
| 
 | 
 | ||||||
|  | * **labels** | ||||||
|  |   if labels are matching one of the `inherited_labels` [configured in the | ||||||
|  |   operator parameters](operator_parameters.md#kubernetes-resources), | ||||||
|  |   they will automatically be added to all the objects (StatefulSet, Service, | ||||||
|  |   Endpoints, etc.) that are created by the operator. | ||||||
|  |   Labels that are set here but not listed as `inherited_labels` in the operator | ||||||
|  |   parameters are ignored. | ||||||
|  | 
 | ||||||
| ## Top-level parameters | ## Top-level parameters | ||||||
| 
 | 
 | ||||||
| Those are parameters grouped directly under  the `spec` key in the manifest. | Those are parameters grouped directly under  the `spec` key in the manifest. | ||||||
|  |  | ||||||
|  | @ -8,12 +8,12 @@ configuration. | ||||||
|   maps. String values containing ':' should be enclosed in quotes. The |   maps. String values containing ':' should be enclosed in quotes. The | ||||||
|   configuration is flat, parameter group names below are not reflected in the |   configuration is flat, parameter group names below are not reflected in the | ||||||
|   configuration structure. There is an |   configuration structure. There is an | ||||||
|   [example](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/configmap.yaml) |   [example](https://github.com/zalando/postgres-operator/blob/master/manifests/configmap.yaml) | ||||||
| 
 | 
 | ||||||
| * CRD-based configuration. The configuration is stored in a custom YAML | * CRD-based configuration. The configuration is stored in a custom YAML | ||||||
|   manifest. The manifest is an instance of the custom resource definition (CRD) called |   manifest. The manifest is an instance of the custom resource definition (CRD) called | ||||||
|   `OperatorConfiguration`. The operator registers this CRD |   `OperatorConfiguration`. The operator registers this CRD | ||||||
|   during the start and uses it for configuration if the [operator deployment manifest ](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/postgres-operator.yaml#L21) sets the `POSTGRES_OPERATOR_CONFIGURATION_OBJECT` env variable to a non-empty value. The variable should point to the |   during the start and uses it for configuration if the [operator deployment manifest ](https://github.com/zalando/postgres-operator/blob/master/manifests/postgres-operator.yaml#L21) sets the `POSTGRES_OPERATOR_CONFIGURATION_OBJECT` env variable to a non-empty value. The variable should point to the | ||||||
|   `postgresql-operator-configuration` object in the operator's namespace. |   `postgresql-operator-configuration` object in the operator's namespace. | ||||||
| 
 | 
 | ||||||
|   The CRD-based configuration is a regular YAML |   The CRD-based configuration is a regular YAML | ||||||
|  | @ -21,7 +21,7 @@ configuration. | ||||||
|   There are no default values built-in in the operator, each parameter that is |   There are no default values built-in in the operator, each parameter that is | ||||||
|   not supplied in the configuration receives an empty value.  In order to |   not supplied in the configuration receives an empty value.  In order to | ||||||
|   create your own configuration just copy the [default |   create your own configuration just copy the [default | ||||||
|   one](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml) |   one](https://github.com/zalando/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml) | ||||||
|   and change it. |   and change it. | ||||||
| 
 | 
 | ||||||
|   To test the CRD-based configuration locally, use the following |   To test the CRD-based configuration locally, use the following | ||||||
|  | @ -172,6 +172,14 @@ configuration they are grouped under the `kubernetes` key. | ||||||
|   list of `name:value` pairs for additional labels assigned to the cluster |   list of `name:value` pairs for additional labels assigned to the cluster | ||||||
|   objects. The default is `application:spilo`. |   objects. The default is `application:spilo`. | ||||||
| 
 | 
 | ||||||
|  | * **inherited_labels** | ||||||
|  |   list of labels that can be inherited from the cluster manifest, and added to | ||||||
|  |   each child objects (`StatefulSet`, `Pod`, `Service` and `Endpoints`) created by | ||||||
|  |   the opertor. | ||||||
|  |   Typical use case is to dynamically pass labels that are specific to a given | ||||||
|  |   postgres cluster, in order to implement `NetworkPolicy`. | ||||||
|  |   The default is empty. | ||||||
|  | 
 | ||||||
| * **cluster_name_label** | * **cluster_name_label** | ||||||
|   name of the label assigned to Kubernetes objects created by the operator that |   name of the label assigned to Kubernetes objects created by the operator that | ||||||
|   indicates which cluster a given object belongs to. The default is |   indicates which cluster a given object belongs to. The default is | ||||||
|  | @ -210,6 +218,14 @@ configuration they are grouped under the `kubernetes` key. | ||||||
|    to their respective replicas on healthy nodes. The situation where master pods still exist on the old node  |    to their respective replicas on healthy nodes. The situation where master pods still exist on the old node  | ||||||
|    after this timeout expires has to be fixed manually. The default is 10 minutes. |    after this timeout expires has to be fixed manually. The default is 10 minutes. | ||||||
| 
 | 
 | ||||||
|  | * **enable_pod_antiaffinity** | ||||||
|  |   toggles [pod anti affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) on the Postgres pods, to avoid multiple pods | ||||||
|  |   of the same Postgres cluster in the same topology , e.g. node. The default is `false`. | ||||||
|  | 
 | ||||||
|  | * **pod_antiaffinity_topology_key** | ||||||
|  |   override | ||||||
|  |   [topology key](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#interlude-built-in-node-labels) | ||||||
|  |   for pod anti affinity. The default is `kubernetes.io/hostname`. | ||||||
| 
 | 
 | ||||||
| ## Kubernetes resource requests | ## Kubernetes resource requests | ||||||
| 
 | 
 | ||||||
|  | @ -234,7 +250,7 @@ CRD-based configuration. | ||||||
|   settings. The default is `1Gi`. |   settings. The default is `1Gi`. | ||||||
| 
 | 
 | ||||||
| * **set_memory_request_to_limit** | * **set_memory_request_to_limit** | ||||||
|   Set `memory_request` to `memory_limit` for all Postgres clusters (the default value is also increased). This prevents certain cases of memory overcommitment at the cost of overprovisioning memory and potential scheduling problems for containers with high memory limits due to the lack of memory on Kubernetes cluster nodes. This affects all containers created by the operator (Postgres, Scalyr sidecar, and other sidecars); to set resources for the operator's own container, change the [operator deployment manually](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/postgres-operator.yaml#L13). The default is `false`. |   Set `memory_request` to `memory_limit` for all Postgres clusters (the default value is also increased). This prevents certain cases of memory overcommitment at the cost of overprovisioning memory and potential scheduling problems for containers with high memory limits due to the lack of memory on Kubernetes cluster nodes. This affects all containers created by the operator (Postgres, Scalyr sidecar, and other sidecars); to set resources for the operator's own container, change the [operator deployment manually](https://github.com/zalando/postgres-operator/blob/master/manifests/postgres-operator.yaml#L13). The default is `false`. | ||||||
| 
 | 
 | ||||||
| * **enable_shm_volume** | * **enable_shm_volume** | ||||||
|   Instruct operator to start any new database pod without limitations on shm |   Instruct operator to start any new database pod without limitations on shm | ||||||
|  | @ -453,4 +469,4 @@ scalyr sidecar. In the CRD-based configuration they are grouped under the | ||||||
|   Memory limit value for the Scalyr sidecar. The default is `1Gi`. |   Memory limit value for the Scalyr sidecar. The default is `1Gi`. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| For the configmap operator configuration, the [default parameter values](https://github.com/zalando-incubator/postgres-operator/blob/master/pkg/util/config/config.go#L14) mentioned here are likely to be overwritten in your local operator installation via your local version of the operator configmap. In the case you use the operator CRD, all the CRD defaults are provided in the [operator's default configuration manifest](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml) | For the configmap operator configuration, the [default parameter values](https://github.com/zalando/postgres-operator/blob/master/pkg/util/config/config.go#L14) mentioned here are likely to be overwritten in your local operator installation via your local version of the operator configmap. In the case you use the operator CRD, all the CRD defaults are provided in the [operator's default configuration manifest](https://github.com/zalando/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml) | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								docs/user.md
								
								
								
								
							
							
						
						
									
										34
									
								
								docs/user.md
								
								
								
								
							|  | @ -1,7 +1,7 @@ | ||||||
| ## Create a manifest for a new PostgreSQL cluster | ## Create a manifest for a new PostgreSQL cluster | ||||||
| 
 | 
 | ||||||
| As an example you can take this | As an example you can take this | ||||||
| [minimal example](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml): | [minimal example](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml): | ||||||
| 
 | 
 | ||||||
| ```yaml | ```yaml | ||||||
| apiVersion: "acid.zalan.do/v1" | apiVersion: "acid.zalan.do/v1" | ||||||
|  | @ -68,7 +68,7 @@ In the next sections, we will cover those use cases in more details. | ||||||
| ## Manifest roles | ## Manifest roles | ||||||
| 
 | 
 | ||||||
| Manifest roles are defined directly in the cluster manifest. See | Manifest roles are defined directly in the cluster manifest. See | ||||||
| [minimal postgres manifest](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml) | [minimal postgres manifest](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml) | ||||||
| for an example of `zalando` role, defined with `superuser` and `createdb` | for an example of `zalando` role, defined with `superuser` and `createdb` | ||||||
| flags. | flags. | ||||||
| 
 | 
 | ||||||
|  | @ -158,8 +158,8 @@ Since an infrastructure role is created uniformly on all clusters managed by | ||||||
| the operator, it makes no sense to define it without the password. Such | the operator, it makes no sense to define it without the password. Such | ||||||
| definitions will be ignored with a prior warning. | definitions will be ignored with a prior warning. | ||||||
| 
 | 
 | ||||||
| See [infrastructure roles secret](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles.yaml) | See [infrastructure roles secret](https://github.com/zalando/postgres-operator/blob/master/manifests/infrastructure-roles.yaml) | ||||||
| and [infrastructure roles configmap](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles-configmap.yaml) for the examples. | and [infrastructure roles configmap](https://github.com/zalando/postgres-operator/blob/master/manifests/infrastructure-roles-configmap.yaml) for the examples. | ||||||
| 
 | 
 | ||||||
| ## Use taints and tolerations for dedicated PostgreSQL nodes | ## Use taints and tolerations for dedicated PostgreSQL nodes | ||||||
| 
 | 
 | ||||||
|  | @ -273,6 +273,32 @@ are always passed to sidecars: | ||||||
| 
 | 
 | ||||||
| The PostgreSQL volume is shared with sidecars and is mounted at `/home/postgres/pgdata`. | The PostgreSQL volume is shared with sidecars and is mounted at `/home/postgres/pgdata`. | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | ## InitContainers Support | ||||||
|  | 
 | ||||||
|  | Each cluster can specify arbitrary init containers to run. These containers can be | ||||||
|  | used to run custom actions before any normal and sidecar containers start. | ||||||
|  | An init container can be specified like this: | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: postgresql | ||||||
|  | 
 | ||||||
|  | metadata: | ||||||
|  |   name: acid-minimal-cluster | ||||||
|  | spec: | ||||||
|  |   ... | ||||||
|  |   init_containers: | ||||||
|  |     - name: "container-name" | ||||||
|  |       image: "company/image:tag" | ||||||
|  |       env: | ||||||
|  |         - name: "ENV_VAR_NAME" | ||||||
|  |           value: "any-k8s-env-things" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | `init_containers` accepts full `v1.Container` definition. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## Increase volume size | ## Increase volume size | ||||||
| 
 | 
 | ||||||
| PostgreSQL operator supports statefulset volume resize if you're using the | PostgreSQL operator supports statefulset volume resize if you're using the | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| hash: bd5394acf101795aac9da20c104a57344a6c4fd71080bf1b16845367e6360578 | hash: e4d0d48b4142d5d335e48e030621564207f3aa288ea1e41e0d1e4d29135de3e8 | ||||||
| updated: 2018-08-14T15:18:08.144086+02:00 | updated: 2019-02-25T14:54:51.736946406+01:00 | ||||||
| imports: | imports: | ||||||
| - name: github.com/aws/aws-sdk-go | - name: github.com/aws/aws-sdk-go | ||||||
|   version: f831d5a0822a1ad72420ab18c6269bca1ddaf490 |   version: e8b22c9937cae1fee9bc364a88f3752cc4d1ac2f | ||||||
|   subpackages: |   subpackages: | ||||||
|   - aws |   - aws | ||||||
|   - aws/awserr |   - aws/awserr | ||||||
|  | @ -13,6 +13,7 @@ imports: | ||||||
|   - aws/credentials |   - aws/credentials | ||||||
|   - aws/credentials/ec2rolecreds |   - aws/credentials/ec2rolecreds | ||||||
|   - aws/credentials/endpointcreds |   - aws/credentials/endpointcreds | ||||||
|  |   - aws/credentials/processcreds | ||||||
|   - aws/credentials/stscreds |   - aws/credentials/stscreds | ||||||
|   - aws/csm |   - aws/csm | ||||||
|   - aws/defaults |   - aws/defaults | ||||||
|  | @ -21,6 +22,7 @@ imports: | ||||||
|   - aws/request |   - aws/request | ||||||
|   - aws/session |   - aws/session | ||||||
|   - aws/signer/v4 |   - aws/signer/v4 | ||||||
|  |   - internal/ini | ||||||
|   - internal/sdkio |   - internal/sdkio | ||||||
|   - internal/sdkrand |   - internal/sdkrand | ||||||
|   - internal/sdkuri |   - internal/sdkuri | ||||||
|  | @ -43,8 +45,6 @@ imports: | ||||||
|   - spdy |   - spdy | ||||||
| - name: github.com/ghodss/yaml | - name: github.com/ghodss/yaml | ||||||
|   version: 73d445a93680fa1a78ae23a5839bad48f32ba1ee |   version: 73d445a93680fa1a78ae23a5839bad48f32ba1ee | ||||||
| - name: github.com/go-ini/ini |  | ||||||
|   version: d58d458bec3cb5adec4b7ddb41131855eac0b33f |  | ||||||
| - name: github.com/gogo/protobuf | - name: github.com/gogo/protobuf | ||||||
|   version: c0656edd0d9eab7c66d1eb0c568f9039345796f7 |   version: c0656edd0d9eab7c66d1eb0c568f9039345796f7 | ||||||
|   subpackages: |   subpackages: | ||||||
|  | @ -84,6 +84,8 @@ imports: | ||||||
|   version: c2b33e8439af944379acbdd9c3a5fe0bc44bd8a5 |   version: c2b33e8439af944379acbdd9c3a5fe0bc44bd8a5 | ||||||
| - name: github.com/json-iterator/go | - name: github.com/json-iterator/go | ||||||
|   version: f2b4162afba35581b6d4a50d3b8f34e33c144682 |   version: f2b4162afba35581b6d4a50d3b8f34e33c144682 | ||||||
|  | - name: github.com/konsorten/go-windows-terminal-sequences | ||||||
|  |   version: 5c8c8bd35d3832f5d134ae1e1e375b69a4d25242 | ||||||
| - name: github.com/kr/text | - name: github.com/kr/text | ||||||
|   version: e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f |   version: e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f | ||||||
| - name: github.com/lib/pq | - name: github.com/lib/pq | ||||||
|  | @ -101,12 +103,14 @@ imports: | ||||||
| - name: github.com/peterbourgon/diskv | - name: github.com/peterbourgon/diskv | ||||||
|   version: 5f041e8faa004a95c88a202771f4cc3e991971e6 |   version: 5f041e8faa004a95c88a202771f4cc3e991971e6 | ||||||
| - name: github.com/sirupsen/logrus | - name: github.com/sirupsen/logrus | ||||||
|   version: 3e01752db0189b9157070a0e1668a620f9a85da2 |   version: e1e72e9de974bd926e5c56f83753fba2df402ce5 | ||||||
| - name: github.com/spf13/pflag | - name: github.com/spf13/pflag | ||||||
|   version: 583c0c0531f06d5278b7d917446061adc344b5cd |   version: 583c0c0531f06d5278b7d917446061adc344b5cd | ||||||
| - name: golang.org/x/crypto | - name: golang.org/x/crypto | ||||||
|   version: c126467f60eb25f8f27e5a981f32a87e3965053f |   version: 49796115aa4b964c318aad4f3084fdb41e9aa067 | ||||||
|   subpackages: |   subpackages: | ||||||
|  |   - bcrypt | ||||||
|  |   - blowfish | ||||||
|   - ssh/terminal |   - ssh/terminal | ||||||
| - name: golang.org/x/net | - name: golang.org/x/net | ||||||
|   version: 1c05540f6879653db88113bc4a2b70aec4bd491f |   version: 1c05540f6879653db88113bc4a2b70aec4bd491f | ||||||
|  | @ -139,6 +143,7 @@ imports: | ||||||
| - name: k8s.io/api | - name: k8s.io/api | ||||||
|   version: 2d6f90ab1293a1fb871cf149423ebb72aa7423aa |   version: 2d6f90ab1293a1fb871cf149423ebb72aa7423aa | ||||||
|   subpackages: |   subpackages: | ||||||
|  |   - admission/v1beta1 | ||||||
|   - admissionregistration/v1alpha1 |   - admissionregistration/v1alpha1 | ||||||
|   - admissionregistration/v1beta1 |   - admissionregistration/v1beta1 | ||||||
|   - apps/v1 |   - apps/v1 | ||||||
|  | @ -157,7 +162,6 @@ imports: | ||||||
|   - core/v1 |   - core/v1 | ||||||
|   - events/v1beta1 |   - events/v1beta1 | ||||||
|   - extensions/v1beta1 |   - extensions/v1beta1 | ||||||
|   - imagepolicy/v1alpha1 |  | ||||||
|   - networking/v1 |   - networking/v1 | ||||||
|   - policy/v1beta1 |   - policy/v1beta1 | ||||||
|   - rbac/v1 |   - rbac/v1 | ||||||
|  | @ -296,5 +300,9 @@ imports: | ||||||
| - name: k8s.io/kube-openapi | - name: k8s.io/kube-openapi | ||||||
|   version: 91cfa479c814065e420cee7ed227db0f63a5854e |   version: 91cfa479c814065e420cee7ed227db0f63a5854e | ||||||
|   subpackages: |   subpackages: | ||||||
|  |   - pkg/builder | ||||||
|  |   - pkg/common | ||||||
|  |   - pkg/handler | ||||||
|  |   - pkg/util | ||||||
|   - pkg/util/proto |   - pkg/util/proto | ||||||
| testImports: [] | testImports: [] | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| package: github.com/zalando-incubator/postgres-operator | package: github.com/zalando/postgres-operator | ||||||
| import: | import: | ||||||
| - package: github.com/sirupsen/logrus | - package: github.com/sirupsen/logrus | ||||||
|   version: ^1.0.1 |   version: ^1.0.1 | ||||||
|  |  | ||||||
|  | @ -8,6 +8,6 @@ SCRIPT_ROOT=$(dirname ${BASH_SOURCE})/.. | ||||||
| CODEGEN_PKG=${CODEGEN_PKG:-$(cd ${SCRIPT_ROOT}; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ${GOPATH}/src/k8s.io/code-generator)} | CODEGEN_PKG=${CODEGEN_PKG:-$(cd ${SCRIPT_ROOT}; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ${GOPATH}/src/k8s.io/code-generator)} | ||||||
| 
 | 
 | ||||||
| vendor/k8s.io/code-generator/generate-groups.sh all \ | vendor/k8s.io/code-generator/generate-groups.sh all \ | ||||||
|   github.com/zalando-incubator/postgres-operator/pkg/generated github.com/zalando-incubator/postgres-operator/pkg/apis \ |   github.com/zalando/postgres-operator/pkg/generated github.com/zalando/postgres-operator/pkg/apis \ | ||||||
|   acid.zalan.do:v1 \ |   acid.zalan.do:v1 \ | ||||||
|   --go-header-file ${SCRIPT_ROOT}/hack/custom-boilerplate.go.txt |   --go-header-file ${SCRIPT_ROOT}/hack/custom-boilerplate.go.txt | ||||||
|  |  | ||||||
|  | @ -4,6 +4,10 @@ kind: postgresql | ||||||
| metadata: | metadata: | ||||||
|   name: acid-test-cluster |   name: acid-test-cluster | ||||||
| spec: | spec: | ||||||
|  |   init_containers: | ||||||
|  |   - name: date | ||||||
|  |     image: busybox | ||||||
|  |     command: [ "/bin/date" ] | ||||||
|   teamId: "ACID" |   teamId: "ACID" | ||||||
|   volume: |   volume: | ||||||
|     size: 1Gi |     size: 1Gi | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ data: | ||||||
| 
 | 
 | ||||||
|   debug_logging: "true" |   debug_logging: "true" | ||||||
|   workers: "4" |   workers: "4" | ||||||
|   docker_image: registry.opensource.zalan.do/acid/spilo-cdp-11:1.5-p42 |   docker_image: registry.opensource.zalan.do/acid/spilo-11:1.5-p4 | ||||||
|   pod_service_account_name: "zalando-postgres-operator" |   pod_service_account_name: "zalando-postgres-operator" | ||||||
|   secret_name_template: '{username}.{cluster}.credentials' |   secret_name_template: '{username}.{cluster}.credentials' | ||||||
|   super_username: postgres |   super_username: postgres | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ apiVersion: "acid.zalan.do/v1" | ||||||
| kind: postgresql | kind: postgresql | ||||||
| metadata: | metadata: | ||||||
|   name: acid-minimal-cluster |   name: acid-minimal-cluster | ||||||
|   namespace: test # assumes namespace exists beforehand |   namespace: default  | ||||||
| spec: | spec: | ||||||
|   teamId: "ACID" |   teamId: "ACID" | ||||||
|   volume: |   volume: | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ spec: | ||||||
|       serviceAccountName: zalando-postgres-operator |       serviceAccountName: zalando-postgres-operator | ||||||
|       containers: |       containers: | ||||||
|       - name: postgres-operator |       - name: postgres-operator | ||||||
|         image: registry.opensource.zalan.do/acid/smoke-tested-postgres-operator:v1.0.0-21-ge39915c |         image: registry.opensource.zalan.do/acid/smoke-tested-postgres-operator:v1.0.0-37-g2422d72 | ||||||
|         imagePullPolicy: IfNotPresent |         imagePullPolicy: IfNotPresent | ||||||
|         resources: |         resources: | ||||||
|           requests: |           requests: | ||||||
|  |  | ||||||
|  | @ -25,6 +25,9 @@ configuration: | ||||||
|     pod_role_label: spilo-role |     pod_role_label: spilo-role | ||||||
|     cluster_labels: |     cluster_labels: | ||||||
|         application: spilo |         application: spilo | ||||||
|  |     # inherited_labels: | ||||||
|  |     # - application | ||||||
|  |     # - app | ||||||
|     cluster_name_label: cluster-name |     cluster_name_label: cluster-name | ||||||
|     # watched_namespace:"" |     # watched_namespace:"" | ||||||
|     # node_readiness_label: "" |     # node_readiness_label: "" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| site_name: Postgres Operator | site_name: Postgres Operator | ||||||
| repo_url: https://github.com/zalando-incubator/postgres-operator | repo_url: https://github.com/zalando/postgres-operator | ||||||
| theme: readthedocs | theme: readthedocs | ||||||
| 
 | 
 | ||||||
| pages: | pages: | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do" | 	"github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" | ||||||
| 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | 	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 
 | 
 | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -52,6 +52,7 @@ type KubernetesMetaConfiguration struct { | ||||||
| 	InfrastructureRolesSecretName          spec.NamespacedName   `json:"infrastructure_roles_secret_name,omitempty"` | 	InfrastructureRolesSecretName          spec.NamespacedName   `json:"infrastructure_roles_secret_name,omitempty"` | ||||||
| 	PodRoleLabel                           string                `json:"pod_role_label,omitempty"` | 	PodRoleLabel                           string                `json:"pod_role_label,omitempty"` | ||||||
| 	ClusterLabels                          map[string]string     `json:"cluster_labels,omitempty"` | 	ClusterLabels                          map[string]string     `json:"cluster_labels,omitempty"` | ||||||
|  | 	InheritedLabels                        []string              `json:"inherited_labels,omitempty"` | ||||||
| 	ClusterNameLabel                       string                `json:"cluster_name_label,omitempty"` | 	ClusterNameLabel                       string                `json:"cluster_name_label,omitempty"` | ||||||
| 	NodeReadinessLabel                     map[string]string     `json:"node_readiness_label,omitempty"` | 	NodeReadinessLabel                     map[string]string     `json:"node_readiness_label,omitempty"` | ||||||
| 	// TODO: use a proper toleration structure?
 | 	// TODO: use a proper toleration structure?
 | ||||||
|  | @ -60,6 +61,8 @@ type KubernetesMetaConfiguration struct { | ||||||
| 	PodEnvironmentConfigMap string `json:"pod_environment_configmap,omitempty"` | 	PodEnvironmentConfigMap string `json:"pod_environment_configmap,omitempty"` | ||||||
| 	PodPriorityClassName    string `json:"pod_priority_class_name,omitempty"` | 	PodPriorityClassName    string `json:"pod_priority_class_name,omitempty"` | ||||||
| 	MasterPodMoveTimeout    time.Duration `json:"master_pod_move_timeout,omitempty"` | 	MasterPodMoveTimeout    time.Duration `json:"master_pod_move_timeout,omitempty"` | ||||||
|  | 	EnablePodAntiAffinity                  bool                  `json:"enable_pod_antiaffinity" default:"false"` | ||||||
|  | 	PodAntiAffinityTopologyKey			   string                `name:"pod_antiaffinity_topology_key" default:"kubernetes.io/hostname"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PostgresPodResourcesDefaults defines the spec of default resources
 | // PostgresPodResourcesDefaults defines the spec of default resources
 | ||||||
|  |  | ||||||
|  | @ -51,6 +51,7 @@ type PostgresSpec struct { | ||||||
| 	Databases            map[string]string    `json:"databases,omitempty"` | 	Databases            map[string]string    `json:"databases,omitempty"` | ||||||
| 	Tolerations          []v1.Toleration      `json:"tolerations,omitempty"` | 	Tolerations          []v1.Toleration      `json:"tolerations,omitempty"` | ||||||
| 	Sidecars             []Sidecar            `json:"sidecars,omitempty"` | 	Sidecars             []Sidecar            `json:"sidecars,omitempty"` | ||||||
|  | 	InitContainers       []v1.Container       `json:"init_containers,omitempty"` | ||||||
| 	PodPriorityClassName string               `json:"pod_priority_class_name,omitempty"` | 	PodPriorityClassName string               `json:"pod_priority_class_name,omitempty"` | ||||||
| 	ShmVolume            *bool                `json:"enableShmVolume,omitempty"` | 	ShmVolume            *bool                `json:"enableShmVolume,omitempty"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do" | 	"github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // APIVersion of the `postgresql` and `operator` CRDs
 | // APIVersion of the `postgresql` and `operator` CRDs
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| // +build !ignore_autogenerated
 | // +build !ignore_autogenerated
 | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -27,7 +27,7 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	corev1 "k8s.io/api/core/v1" | 	core_v1 "k8s.io/api/core/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -75,6 +75,11 @@ func (in *KubernetesMetaConfiguration) DeepCopyInto(out *KubernetesMetaConfigura | ||||||
| 			(*out)[key] = val | 			(*out)[key] = val | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if in.InheritedLabels != nil { | ||||||
|  | 		in, out := &in.InheritedLabels, &out.InheritedLabels | ||||||
|  | 		*out = make([]string, len(*in)) | ||||||
|  | 		copy(*out, *in) | ||||||
|  | 	} | ||||||
| 	if in.NodeReadinessLabel != nil { | 	if in.NodeReadinessLabel != nil { | ||||||
| 		in, out := &in.NodeReadinessLabel, &out.NodeReadinessLabel | 		in, out := &in.NodeReadinessLabel, &out.NodeReadinessLabel | ||||||
| 		*out = make(map[string]string, len(*in)) | 		*out = make(map[string]string, len(*in)) | ||||||
|  | @ -105,6 +110,13 @@ func (in *KubernetesMetaConfiguration) DeepCopy() *KubernetesMetaConfiguration { | ||||||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | ||||||
| func (in *LoadBalancerConfiguration) DeepCopyInto(out *LoadBalancerConfiguration) { | func (in *LoadBalancerConfiguration) DeepCopyInto(out *LoadBalancerConfiguration) { | ||||||
| 	*out = *in | 	*out = *in | ||||||
|  | 	if in.CustomServiceAnnotations != nil { | ||||||
|  | 		in, out := &in.CustomServiceAnnotations, &out.CustomServiceAnnotations | ||||||
|  | 		*out = make(map[string]string, len(*in)) | ||||||
|  | 		for key, val := range *in { | ||||||
|  | 			(*out)[key] = val | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -193,7 +205,7 @@ func (in *OperatorConfigurationData) DeepCopyInto(out *OperatorConfigurationData | ||||||
| 	in.Kubernetes.DeepCopyInto(&out.Kubernetes) | 	in.Kubernetes.DeepCopyInto(&out.Kubernetes) | ||||||
| 	out.PostgresPodResources = in.PostgresPodResources | 	out.PostgresPodResources = in.PostgresPodResources | ||||||
| 	out.Timeouts = in.Timeouts | 	out.Timeouts = in.Timeouts | ||||||
| 	out.LoadBalancer = in.LoadBalancer | 	in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) | ||||||
| 	out.AWSGCP = in.AWSGCP | 	out.AWSGCP = in.AWSGCP | ||||||
| 	out.OperatorDebug = in.OperatorDebug | 	out.OperatorDebug = in.OperatorDebug | ||||||
| 	in.TeamsAPI.DeepCopyInto(&out.TeamsAPI) | 	in.TeamsAPI.DeepCopyInto(&out.TeamsAPI) | ||||||
|  | @ -324,17 +336,7 @@ func (in *Patroni) DeepCopyInto(out *Patroni) { | ||||||
| 		in, out := &in.Slots, &out.Slots | 		in, out := &in.Slots, &out.Slots | ||||||
| 		*out = make(map[string]map[string]string, len(*in)) | 		*out = make(map[string]map[string]string, len(*in)) | ||||||
| 		for key, val := range *in { | 		for key, val := range *in { | ||||||
| 			var outVal map[string]string | 			(*out)[key] = *val.DeepCopy() | ||||||
| 			if val == nil { |  | ||||||
| 				(*out)[key] = nil |  | ||||||
| 			} else { |  | ||||||
| 				in, out := &val, &outVal |  | ||||||
| 				*out = make(map[string]string, len(*in)) |  | ||||||
| 				for key, val := range *in { |  | ||||||
| 					(*out)[key] = val |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			(*out)[key] = outVal |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return | 	return | ||||||
|  | @ -375,24 +377,40 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) { | ||||||
| 	out.Resources = in.Resources | 	out.Resources = in.Resources | ||||||
| 	if in.EnableMasterLoadBalancer != nil { | 	if in.EnableMasterLoadBalancer != nil { | ||||||
| 		in, out := &in.EnableMasterLoadBalancer, &out.EnableMasterLoadBalancer | 		in, out := &in.EnableMasterLoadBalancer, &out.EnableMasterLoadBalancer | ||||||
|  | 		if *in == nil { | ||||||
|  | 			*out = nil | ||||||
|  | 		} else { | ||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	if in.EnableReplicaLoadBalancer != nil { | 	if in.EnableReplicaLoadBalancer != nil { | ||||||
| 		in, out := &in.EnableReplicaLoadBalancer, &out.EnableReplicaLoadBalancer | 		in, out := &in.EnableReplicaLoadBalancer, &out.EnableReplicaLoadBalancer | ||||||
|  | 		if *in == nil { | ||||||
|  | 			*out = nil | ||||||
|  | 		} else { | ||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	if in.UseLoadBalancer != nil { | 	if in.UseLoadBalancer != nil { | ||||||
| 		in, out := &in.UseLoadBalancer, &out.UseLoadBalancer | 		in, out := &in.UseLoadBalancer, &out.UseLoadBalancer | ||||||
|  | 		if *in == nil { | ||||||
|  | 			*out = nil | ||||||
|  | 		} else { | ||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	if in.ReplicaLoadBalancer != nil { | 	if in.ReplicaLoadBalancer != nil { | ||||||
| 		in, out := &in.ReplicaLoadBalancer, &out.ReplicaLoadBalancer | 		in, out := &in.ReplicaLoadBalancer, &out.ReplicaLoadBalancer | ||||||
|  | 		if *in == nil { | ||||||
|  | 			*out = nil | ||||||
|  | 		} else { | ||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	if in.AllowedSourceRanges != nil { | 	if in.AllowedSourceRanges != nil { | ||||||
| 		in, out := &in.AllowedSourceRanges, &out.AllowedSourceRanges | 		in, out := &in.AllowedSourceRanges, &out.AllowedSourceRanges | ||||||
| 		*out = make([]string, len(*in)) | 		*out = make([]string, len(*in)) | ||||||
|  | @ -402,15 +420,12 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) { | ||||||
| 		in, out := &in.Users, &out.Users | 		in, out := &in.Users, &out.Users | ||||||
| 		*out = make(map[string]UserFlags, len(*in)) | 		*out = make(map[string]UserFlags, len(*in)) | ||||||
| 		for key, val := range *in { | 		for key, val := range *in { | ||||||
| 			var outVal []string |  | ||||||
| 			if val == nil { | 			if val == nil { | ||||||
| 				(*out)[key] = nil | 				(*out)[key] = nil | ||||||
| 			} else { | 			} else { | ||||||
| 				in, out := &val, &outVal | 				(*out)[key] = make([]string, len(val)) | ||||||
| 				*out = make(UserFlags, len(*in)) | 				copy((*out)[key], val) | ||||||
| 				copy(*out, *in) |  | ||||||
| 			} | 			} | ||||||
| 			(*out)[key] = outVal |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if in.MaintenanceWindows != nil { | 	if in.MaintenanceWindows != nil { | ||||||
|  | @ -430,7 +445,7 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) { | ||||||
| 	} | 	} | ||||||
| 	if in.Tolerations != nil { | 	if in.Tolerations != nil { | ||||||
| 		in, out := &in.Tolerations, &out.Tolerations | 		in, out := &in.Tolerations, &out.Tolerations | ||||||
| 		*out = make([]corev1.Toleration, len(*in)) | 		*out = make([]core_v1.Toleration, len(*in)) | ||||||
| 		for i := range *in { | 		for i := range *in { | ||||||
| 			(*in)[i].DeepCopyInto(&(*out)[i]) | 			(*in)[i].DeepCopyInto(&(*out)[i]) | ||||||
| 		} | 		} | ||||||
|  | @ -442,6 +457,22 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) { | ||||||
| 			(*in)[i].DeepCopyInto(&(*out)[i]) | 			(*in)[i].DeepCopyInto(&(*out)[i]) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if in.InitContainers != nil { | ||||||
|  | 		in, out := &in.InitContainers, &out.InitContainers | ||||||
|  | 		*out = make([]core_v1.Container, len(*in)) | ||||||
|  | 		for i := range *in { | ||||||
|  | 			(*in)[i].DeepCopyInto(&(*out)[i]) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if in.ShmVolume != nil { | ||||||
|  | 		in, out := &in.ShmVolume, &out.ShmVolume | ||||||
|  | 		if *in == nil { | ||||||
|  | 			*out = nil | ||||||
|  | 		} else { | ||||||
|  | 			*out = new(bool) | ||||||
|  | 			**out = **in | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -610,12 +641,12 @@ func (in *Sidecar) DeepCopyInto(out *Sidecar) { | ||||||
| 	out.Resources = in.Resources | 	out.Resources = in.Resources | ||||||
| 	if in.Ports != nil { | 	if in.Ports != nil { | ||||||
| 		in, out := &in.Ports, &out.Ports | 		in, out := &in.Ports, &out.Ports | ||||||
| 		*out = make([]corev1.ContainerPort, len(*in)) | 		*out = make([]core_v1.ContainerPort, len(*in)) | ||||||
| 		copy(*out, *in) | 		copy(*out, *in) | ||||||
| 	} | 	} | ||||||
| 	if in.Env != nil { | 	if in.Env != nil { | ||||||
| 		in, out := &in.Env, &out.Env | 		in, out := &in.Env, &out.Env | ||||||
| 		*out = make([]corev1.EnvVar, len(*in)) | 		*out = make([]core_v1.EnvVar, len(*in)) | ||||||
| 		for i := range *in { | 		for i := range *in { | ||||||
| 			(*in)[i].DeepCopyInto(&(*out)[i]) | 			(*in)[i].DeepCopyInto(&(*out)[i]) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -13,10 +13,10 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -21,15 +21,15 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/patroni" | 	"github.com/zalando/postgres-operator/pkg/util/patroni" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/teams" | 	"github.com/zalando/postgres-operator/pkg/util/teams" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/users" | 	"github.com/zalando/postgres-operator/pkg/util/users" | ||||||
| 	rbacv1beta1 "k8s.io/api/rbac/v1beta1" | 	rbacv1beta1 "k8s.io/api/rbac/v1beta1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -494,7 +494,7 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if updateFailed { | 		if updateFailed { | ||||||
| 			c.setStatus(acidv1.ClusterStatusUpdateFailed) | 			c.setStatus(acidv1.ClusterStatusUpdateFailed) | ||||||
| 		} else if c.Status != acidv1.ClusterStatusRunning { | 		} else { | ||||||
| 			c.setStatus(acidv1.ClusterStatusRunning) | 			c.setStatus(acidv1.ClusterStatusRunning) | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
|  | @ -6,11 +6,11 @@ import ( | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/teams" | 	"github.com/zalando/postgres-operator/pkg/util/teams" | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,9 +9,9 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"github.com/lib/pq" | 	"github.com/lib/pq" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/retryutil" | 	"github.com/zalando/postgres-operator/pkg/util/retryutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -10,8 +10,8 @@ import ( | ||||||
| 	"k8s.io/client-go/kubernetes/scheme" | 	"k8s.io/client-go/kubernetes/scheme" | ||||||
| 	"k8s.io/client-go/tools/remotecommand" | 	"k8s.io/client-go/tools/remotecommand" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| //ExecCommand executes arbitrary command inside the pod
 | //ExecCommand executes arbitrary command inside the pod
 | ||||||
|  |  | ||||||
|  | @ -4,9 +4,9 @@ import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/filesystems" | 	"github.com/zalando/postgres-operator/pkg/util/filesystems" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) getPostgresFilesystemInfo(podName *spec.NamespacedName) (device, fstype string, err error) { | func (c *Cluster) getPostgresFilesystemInfo(podName *spec.NamespacedName) (device, fstype string, err error) { | ||||||
|  |  | ||||||
|  | @ -15,11 +15,11 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 	"k8s.io/apimachinery/pkg/util/intstr" | 	"k8s.io/apimachinery/pkg/util/intstr" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"k8s.io/apimachinery/pkg/labels" | 	"k8s.io/apimachinery/pkg/labels" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -290,6 +290,26 @@ func nodeAffinity(nodeReadinessLabel map[string]string) *v1.Affinity { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func generatePodAffinity(labels labels.Set, topologyKey string, nodeAffinity *v1.Affinity) *v1.Affinity { | ||||||
|  | 	// generate pod anti-affinity to avoid multiple pods of the same Postgres cluster in the same topology , e.g. node
 | ||||||
|  | 	podAffinity := v1.Affinity{ | ||||||
|  | 		PodAntiAffinity: &v1.PodAntiAffinity{ | ||||||
|  | 			RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{{ | ||||||
|  | 				LabelSelector: &metav1.LabelSelector{ | ||||||
|  | 					MatchLabels: labels, | ||||||
|  | 				}, | ||||||
|  | 				TopologyKey: topologyKey, | ||||||
|  | 			}}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if nodeAffinity != nil && nodeAffinity.NodeAffinity != nil { | ||||||
|  | 		podAffinity.NodeAffinity = nodeAffinity.NodeAffinity | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &podAffinity | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func tolerations(tolerationsSpec *[]v1.Toleration, podToleration map[string]string) []v1.Toleration { | func tolerations(tolerationsSpec *[]v1.Toleration, podToleration map[string]string) []v1.Toleration { | ||||||
| 	// allow to override tolerations by postgresql manifest
 | 	// allow to override tolerations by postgresql manifest
 | ||||||
| 	if len(*tolerationsSpec) > 0 { | 	if len(*tolerationsSpec) > 0 { | ||||||
|  | @ -410,6 +430,7 @@ func generatePodTemplate( | ||||||
| 	namespace string, | 	namespace string, | ||||||
| 	labels labels.Set, | 	labels labels.Set, | ||||||
| 	spiloContainer *v1.Container, | 	spiloContainer *v1.Container, | ||||||
|  | 	initContainers []v1.Container, | ||||||
| 	sidecarContainers []v1.Container, | 	sidecarContainers []v1.Container, | ||||||
| 	tolerationsSpec *[]v1.Toleration, | 	tolerationsSpec *[]v1.Toleration, | ||||||
| 	nodeAffinity *v1.Affinity, | 	nodeAffinity *v1.Affinity, | ||||||
|  | @ -418,6 +439,8 @@ func generatePodTemplate( | ||||||
| 	kubeIAMRole string, | 	kubeIAMRole string, | ||||||
| 	priorityClassName string, | 	priorityClassName string, | ||||||
| 	shmVolume bool, | 	shmVolume bool, | ||||||
|  | 	podAntiAffinity bool, | ||||||
|  | 	podAntiAffinityTopologyKey string, | ||||||
| ) (*v1.PodTemplateSpec, error) { | ) (*v1.PodTemplateSpec, error) { | ||||||
| 
 | 
 | ||||||
| 	terminateGracePeriodSeconds := terminateGracePeriod | 	terminateGracePeriodSeconds := terminateGracePeriod | ||||||
|  | @ -428,6 +451,7 @@ func generatePodTemplate( | ||||||
| 		ServiceAccountName:            podServiceAccountName, | 		ServiceAccountName:            podServiceAccountName, | ||||||
| 		TerminationGracePeriodSeconds: &terminateGracePeriodSeconds, | 		TerminationGracePeriodSeconds: &terminateGracePeriodSeconds, | ||||||
| 		Containers:                    containers, | 		Containers:                    containers, | ||||||
|  | 		InitContainers:                initContainers, | ||||||
| 		Tolerations:                   *tolerationsSpec, | 		Tolerations:                   *tolerationsSpec, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -435,7 +459,9 @@ func generatePodTemplate( | ||||||
| 		addShmVolume(&podSpec) | 		addShmVolume(&podSpec) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if nodeAffinity != nil { | 	if podAntiAffinity { | ||||||
|  | 		podSpec.Affinity = generatePodAffinity(labels, podAntiAffinityTopologyKey, nodeAffinity) | ||||||
|  | 	} else if nodeAffinity != nil { | ||||||
| 		podSpec.Affinity = nodeAffinity | 		podSpec.Affinity = nodeAffinity | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -803,6 +829,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State | ||||||
| 		c.Namespace, | 		c.Namespace, | ||||||
| 		c.labelsSet(true), | 		c.labelsSet(true), | ||||||
| 		spiloContainer, | 		spiloContainer, | ||||||
|  | 		spec.InitContainers, | ||||||
| 		sidecarContainers, | 		sidecarContainers, | ||||||
| 		&tolerationSpec, | 		&tolerationSpec, | ||||||
| 		nodeAffinity(c.OpConfig.NodeReadinessLabel), | 		nodeAffinity(c.OpConfig.NodeReadinessLabel), | ||||||
|  | @ -810,7 +837,9 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State | ||||||
| 		c.OpConfig.PodServiceAccountName, | 		c.OpConfig.PodServiceAccountName, | ||||||
| 		c.OpConfig.KubeIAMRole, | 		c.OpConfig.KubeIAMRole, | ||||||
| 		effectivePodPriorityClassName, | 		effectivePodPriorityClassName, | ||||||
| 		mountShmVolumeNeeded(c.OpConfig, spec)); err != nil { | 		mountShmVolumeNeeded(c.OpConfig, spec), | ||||||
|  | 		c.OpConfig.EnablePodAntiAffinity, | ||||||
|  | 		c.OpConfig.PodAntiAffinityTopologyKey); err != nil { | ||||||
| 		return nil, fmt.Errorf("could not generate pod template: %v", err) | 		return nil, fmt.Errorf("could not generate pod template: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1070,7 +1099,7 @@ func (c *Cluster) generateService(role PostgresRole, spec *acidv1.PostgresSpec) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if role == Replica { | 	if role == Replica { | ||||||
| 		serviceSpec.Selector = c.roleLabelsSet(role) | 		serviceSpec.Selector = c.roleLabelsSet(false, role) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var annotations map[string]string | 	var annotations map[string]string | ||||||
|  | @ -1110,7 +1139,7 @@ func (c *Cluster) generateService(role PostgresRole, spec *acidv1.PostgresSpec) | ||||||
| 		ObjectMeta: metav1.ObjectMeta{ | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
| 			Name:        c.serviceName(role), | 			Name:        c.serviceName(role), | ||||||
| 			Namespace:   c.Namespace, | 			Namespace:   c.Namespace, | ||||||
| 			Labels:      c.roleLabelsSet(role), | 			Labels:      c.roleLabelsSet(true, role), | ||||||
| 			Annotations: annotations, | 			Annotations: annotations, | ||||||
| 		}, | 		}, | ||||||
| 		Spec: serviceSpec, | 		Spec: serviceSpec, | ||||||
|  | @ -1124,7 +1153,7 @@ func (c *Cluster) generateEndpoint(role PostgresRole, subsets []v1.EndpointSubse | ||||||
| 		ObjectMeta: metav1.ObjectMeta{ | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
| 			Name:      c.endpointName(role), | 			Name:      c.endpointName(role), | ||||||
| 			Namespace: c.Namespace, | 			Namespace: c.Namespace, | ||||||
| 			Labels:    c.roleLabelsSet(role), | 			Labels:    c.roleLabelsSet(true, role), | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	if len(subsets) > 0 { | 	if len(subsets) > 0 { | ||||||
|  | @ -1188,7 +1217,7 @@ func (c *Cluster) generatePodDisruptionBudget() *policybeta1.PodDisruptionBudget | ||||||
| 		Spec: policybeta1.PodDisruptionBudgetSpec{ | 		Spec: policybeta1.PodDisruptionBudgetSpec{ | ||||||
| 			MinAvailable: &minAvailable, | 			MinAvailable: &minAvailable, | ||||||
| 			Selector: &metav1.LabelSelector{ | 			Selector: &metav1.LabelSelector{ | ||||||
| 				MatchLabels: c.roleLabelsSet(Master), | 				MatchLabels: c.roleLabelsSet(false, Master), | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -3,10 +3,10 @@ package cluster | ||||||
| import ( | import ( | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"testing" | 	"testing" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,8 +7,8 @@ import ( | ||||||
| 	v1 "k8s.io/api/core/v1" | 	v1 "k8s.io/api/core/v1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"k8s.io/api/apps/v1beta1" | 	"k8s.io/api/apps/v1beta1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -27,7 +27,7 @@ func (c *Cluster) listPods() ([]v1.Pod, error) { | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) getRolePods(role PostgresRole) ([]v1.Pod, error) { | func (c *Cluster) getRolePods(role PostgresRole) ([]v1.Pod, error) { | ||||||
| 	listOptions := metav1.ListOptions{ | 	listOptions := metav1.ListOptions{ | ||||||
| 		LabelSelector: c.roleLabelsSet(role).String(), | 		LabelSelector: c.roleLabelsSet(false, role).String(), | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	pods, err := c.KubeClient.Pods(c.Namespace).List(listOptions) | 	pods, err := c.KubeClient.Pods(c.Namespace).List(listOptions) | ||||||
|  |  | ||||||
|  | @ -11,10 +11,10 @@ import ( | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/retryutil" | 	"github.com/zalando/postgres-operator/pkg/util/retryutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -7,12 +7,12 @@ import ( | ||||||
| 	policybeta1 "k8s.io/api/policy/v1beta1" | 	policybeta1 "k8s.io/api/policy/v1beta1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/volumes" | 	"github.com/zalando/postgres-operator/pkg/util/volumes" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest.
 | // Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest.
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ package cluster | ||||||
| import ( | import ( | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"k8s.io/api/apps/v1beta1" | 	"k8s.io/api/apps/v1beta1" | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| 	policybeta1 "k8s.io/api/policy/v1beta1" | 	policybeta1 "k8s.io/api/policy/v1beta1" | ||||||
|  |  | ||||||
|  | @ -17,13 +17,13 @@ import ( | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/labels" | 	"k8s.io/apimachinery/pkg/labels" | ||||||
| 
 | 
 | ||||||
| 	acidzalando "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do" | 	acidzalando "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/retryutil" | 	"github.com/zalando/postgres-operator/pkg/util/retryutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // OAuthTokenGetter provides the method for fetching OAuth tokens
 | // OAuthTokenGetter provides the method for fetching OAuth tokens
 | ||||||
|  | @ -389,6 +389,19 @@ func (c *Cluster) labelsSet(shouldAddExtraLabels bool) labels.Set { | ||||||
| 	if shouldAddExtraLabels { | 	if shouldAddExtraLabels { | ||||||
| 		// enables filtering resources owned by a team
 | 		// enables filtering resources owned by a team
 | ||||||
| 		lbls["team"] = c.Postgresql.Spec.TeamID | 		lbls["team"] = c.Postgresql.Spec.TeamID | ||||||
|  | 
 | ||||||
|  | 		// allow to inherit certain labels from the 'postgres' object
 | ||||||
|  | 		if spec, err := c.GetSpec(); err == nil { | ||||||
|  | 			for k, v := range spec.ObjectMeta.Labels { | ||||||
|  | 				for _, match := range c.OpConfig.InheritedLabels { | ||||||
|  | 					if k == match { | ||||||
|  | 						lbls[k] = v | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			c.logger.Warningf("could not get the list of InheritedLabels for cluster %q: %v", c.Name, err) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return labels.Set(lbls) | 	return labels.Set(lbls) | ||||||
|  | @ -398,8 +411,8 @@ func (c *Cluster) labelsSelector() *metav1.LabelSelector { | ||||||
| 	return &metav1.LabelSelector{MatchLabels: c.labelsSet(false), MatchExpressions: nil} | 	return &metav1.LabelSelector{MatchLabels: c.labelsSet(false), MatchExpressions: nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) roleLabelsSet(role PostgresRole) labels.Set { | func (c *Cluster) roleLabelsSet(shouldAddExtraLabels bool, role PostgresRole) labels.Set { | ||||||
| 	lbls := c.labelsSet(false) | 	lbls := c.labelsSet(shouldAddExtraLabels) | ||||||
| 	lbls[c.OpConfig.PodRoleLabel] = string(role) | 	lbls[c.OpConfig.PodRoleLabel] = string(role) | ||||||
| 	return lbls | 	return lbls | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -9,12 +9,12 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/api/resource" | 	"k8s.io/apimachinery/pkg/api/resource" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/filesystems" | 	"github.com/zalando/postgres-operator/pkg/util/filesystems" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/volumes" | 	"github.com/zalando/postgres-operator/pkg/util/volumes" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) listPersistentVolumeClaims() ([]v1.PersistentVolumeClaim, error) { | func (c *Cluster) listPersistentVolumeClaims() ([]v1.PersistentVolumeClaim, error) { | ||||||
|  |  | ||||||
|  | @ -13,16 +13,16 @@ import ( | ||||||
| 	"k8s.io/client-go/kubernetes/scheme" | 	"k8s.io/client-go/kubernetes/scheme" | ||||||
| 	"k8s.io/client-go/tools/cache" | 	"k8s.io/client-go/tools/cache" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/apiserver" | 	"github.com/zalando/postgres-operator/pkg/apiserver" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/ringlog" | 	"github.com/zalando/postgres-operator/pkg/util/ringlog" | ||||||
| 
 | 
 | ||||||
| 	acidv1informer "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do/v1" | 	acidv1informer "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Controller represents operator controller
 | // Controller represents operator controller
 | ||||||
|  |  | ||||||
|  | @ -7,10 +7,10 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"github.com/sirupsen/logrus" | 	"github.com/sirupsen/logrus" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,8 +11,8 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/watch" | 	"k8s.io/apimachinery/pkg/watch" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (c *Controller) nodeListFunc(options metav1.ListOptions) (runtime.Object, error) { | func (c *Controller) nodeListFunc(options metav1.ListOptions) (runtime.Object, error) { | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ package controller | ||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -39,6 +39,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result.PodServiceAccountName = fromCRD.Kubernetes.PodServiceAccountName | 	result.PodServiceAccountName = fromCRD.Kubernetes.PodServiceAccountName | ||||||
| 	result.PodServiceAccountDefinition = fromCRD.Kubernetes.PodServiceAccountDefinition | 	result.PodServiceAccountDefinition = fromCRD.Kubernetes.PodServiceAccountDefinition | ||||||
| 	result.PodServiceAccountRoleBindingDefinition = fromCRD.Kubernetes.PodServiceAccountRoleBindingDefinition | 	result.PodServiceAccountRoleBindingDefinition = fromCRD.Kubernetes.PodServiceAccountRoleBindingDefinition | ||||||
|  | 	result.PodEnvironmentConfigMap = fromCRD.Kubernetes.PodEnvironmentConfigMap | ||||||
| 	result.PodTerminateGracePeriod = time.Duration(fromCRD.Kubernetes.PodTerminateGracePeriod) | 	result.PodTerminateGracePeriod = time.Duration(fromCRD.Kubernetes.PodTerminateGracePeriod) | ||||||
| 	result.WatchedNamespace = fromCRD.Kubernetes.WatchedNamespace | 	result.WatchedNamespace = fromCRD.Kubernetes.WatchedNamespace | ||||||
| 	result.PDBNameFormat = fromCRD.Kubernetes.PDBNameFormat | 	result.PDBNameFormat = fromCRD.Kubernetes.PDBNameFormat | ||||||
|  | @ -47,11 +48,15 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result.InfrastructureRolesSecretName = fromCRD.Kubernetes.InfrastructureRolesSecretName | 	result.InfrastructureRolesSecretName = fromCRD.Kubernetes.InfrastructureRolesSecretName | ||||||
| 	result.PodRoleLabel = fromCRD.Kubernetes.PodRoleLabel | 	result.PodRoleLabel = fromCRD.Kubernetes.PodRoleLabel | ||||||
| 	result.ClusterLabels = fromCRD.Kubernetes.ClusterLabels | 	result.ClusterLabels = fromCRD.Kubernetes.ClusterLabels | ||||||
|  | 	result.InheritedLabels = fromCRD.Kubernetes.InheritedLabels | ||||||
| 	result.ClusterNameLabel = fromCRD.Kubernetes.ClusterNameLabel | 	result.ClusterNameLabel = fromCRD.Kubernetes.ClusterNameLabel | ||||||
| 	result.NodeReadinessLabel = fromCRD.Kubernetes.NodeReadinessLabel | 	result.NodeReadinessLabel = fromCRD.Kubernetes.NodeReadinessLabel | ||||||
| 	result.PodPriorityClassName = fromCRD.Kubernetes.PodPriorityClassName | 	result.PodPriorityClassName = fromCRD.Kubernetes.PodPriorityClassName | ||||||
| 	result.MasterPodMoveTimeout = fromCRD.Kubernetes.MasterPodMoveTimeout | 	result.MasterPodMoveTimeout = fromCRD.Kubernetes.MasterPodMoveTimeout | ||||||
| 
 | 
 | ||||||
|  | 	result.EnablePodAntiAffinity = fromCRD.Kubernetes.EnablePodAntiAffinity; | ||||||
|  | 	result.PodAntiAffinityTopologyKey = fromCRD.Kubernetes.PodAntiAffinityTopologyKey; | ||||||
|  | 
 | ||||||
| 	result.DefaultCPURequest = fromCRD.PostgresPodResources.DefaultCPURequest | 	result.DefaultCPURequest = fromCRD.PostgresPodResources.DefaultCPURequest | ||||||
| 	result.DefaultMemoryRequest = fromCRD.PostgresPodResources.DefaultMemoryRequest | 	result.DefaultMemoryRequest = fromCRD.PostgresPodResources.DefaultMemoryRequest | ||||||
| 	result.DefaultCPULimit = fromCRD.PostgresPodResources.DefaultCPULimit | 	result.DefaultCPULimit = fromCRD.PostgresPodResources.DefaultCPULimit | ||||||
|  |  | ||||||
|  | @ -6,9 +6,9 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/watch" | 	"k8s.io/apimachinery/pkg/watch" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,12 +14,12 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 	"k8s.io/client-go/tools/cache" | 	"k8s.io/client-go/tools/cache" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/ringlog" | 	"github.com/zalando/postgres-operator/pkg/util/ringlog" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (c *Controller) clusterResync(stopCh <-chan struct{}, wg *sync.WaitGroup) { | func (c *Controller) clusterResync(stopCh <-chan struct{}, wg *sync.WaitGroup) { | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| package controller | package controller | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"testing" | 	"testing" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import ( | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // EventType contains type of the events for the TPRs and Pods received from Kubernetes
 | // EventType contains type of the events for the TPRs and Pods received from Kubernetes
 | ||||||
|  |  | ||||||
|  | @ -8,11 +8,11 @@ import ( | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/util/wait" | 	"k8s.io/apimachinery/pkg/util/wait" | ||||||
| 
 | 
 | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/cluster" | 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | 	"github.com/zalando/postgres-operator/pkg/util/config" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| 	"gopkg.in/yaml.v2" | 	"gopkg.in/yaml.v2" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,8 +10,8 @@ import ( | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	v1core "k8s.io/client-go/kubernetes/typed/core/v1" | 	v1core "k8s.io/client-go/kubernetes/typed/core/v1" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil" | 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package versioned | package versioned | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | ||||||
| 	discovery "k8s.io/client-go/discovery" | 	discovery "k8s.io/client-go/discovery" | ||||||
| 	rest "k8s.io/client-go/rest" | 	rest "k8s.io/client-go/rest" | ||||||
| 	flowcontrol "k8s.io/client-go/util/flowcontrol" | 	flowcontrol "k8s.io/client-go/util/flowcontrol" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,9 +25,9 @@ SOFTWARE. | ||||||
| package fake | package fake | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	clientset "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned" | 	clientset "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned" | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | ||||||
| 	fakeacidv1 "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1/fake" | 	fakeacidv1 "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1/fake" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/watch" | 	"k8s.io/apimachinery/pkg/watch" | ||||||
| 	"k8s.io/client-go/discovery" | 	"k8s.io/client-go/discovery" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package fake | package fake | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package scheme | package scheme | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidv1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,8 +25,8 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/scheme" | 	"github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/scheme" | ||||||
| 	serializer "k8s.io/apimachinery/pkg/runtime/serializer" | 	serializer "k8s.io/apimachinery/pkg/runtime/serializer" | ||||||
| 	rest "k8s.io/client-go/rest" | 	rest "k8s.io/client-go/rest" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package fake | package fake | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/typed/acid.zalan.do/v1" | ||||||
| 	rest "k8s.io/client-go/rest" | 	rest "k8s.io/client-go/rest" | ||||||
| 	testing "k8s.io/client-go/testing" | 	testing "k8s.io/client-go/testing" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package fake | package fake | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidzalandov1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acid_zalan_do_v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 	testing "k8s.io/client-go/testing" | 	testing "k8s.io/client-go/testing" | ||||||
|  | @ -42,12 +42,12 @@ var operatorconfigurationsResource = schema.GroupVersionResource{Group: "acid.za | ||||||
| var operatorconfigurationsKind = schema.GroupVersionKind{Group: "acid.zalan.do", Version: "v1", Kind: "OperatorConfiguration"} | var operatorconfigurationsKind = schema.GroupVersionKind{Group: "acid.zalan.do", Version: "v1", Kind: "OperatorConfiguration"} | ||||||
| 
 | 
 | ||||||
| // Get takes name of the operatorConfiguration, and returns the corresponding operatorConfiguration object, and an error if there is any.
 | // Get takes name of the operatorConfiguration, and returns the corresponding operatorConfiguration object, and an error if there is any.
 | ||||||
| func (c *FakeOperatorConfigurations) Get(name string, options v1.GetOptions) (result *acidzalandov1.OperatorConfiguration, err error) { | func (c *FakeOperatorConfigurations) Get(name string, options v1.GetOptions) (result *acid_zalan_do_v1.OperatorConfiguration, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewGetAction(operatorconfigurationsResource, c.ns, name), &acidzalandov1.OperatorConfiguration{}) | 		Invokes(testing.NewGetAction(operatorconfigurationsResource, c.ns, name), &acid_zalan_do_v1.OperatorConfiguration{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.OperatorConfiguration), err | 	return obj.(*acid_zalan_do_v1.OperatorConfiguration), err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package fake | package fake | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidzalandov1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acid_zalan_do_v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	labels "k8s.io/apimachinery/pkg/labels" | 	labels "k8s.io/apimachinery/pkg/labels" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | @ -45,20 +45,20 @@ var postgresqlsResource = schema.GroupVersionResource{Group: "acid.zalan.do", Ve | ||||||
| var postgresqlsKind = schema.GroupVersionKind{Group: "acid.zalan.do", Version: "v1", Kind: "Postgresql"} | var postgresqlsKind = schema.GroupVersionKind{Group: "acid.zalan.do", Version: "v1", Kind: "Postgresql"} | ||||||
| 
 | 
 | ||||||
| // Get takes name of the postgresql, and returns the corresponding postgresql object, and an error if there is any.
 | // Get takes name of the postgresql, and returns the corresponding postgresql object, and an error if there is any.
 | ||||||
| func (c *FakePostgresqls) Get(name string, options v1.GetOptions) (result *acidzalandov1.Postgresql, err error) { | func (c *FakePostgresqls) Get(name string, options v1.GetOptions) (result *acid_zalan_do_v1.Postgresql, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewGetAction(postgresqlsResource, c.ns, name), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewGetAction(postgresqlsResource, c.ns, name), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.Postgresql), err | 	return obj.(*acid_zalan_do_v1.Postgresql), err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // List takes label and field selectors, and returns the list of Postgresqls that match those selectors.
 | // List takes label and field selectors, and returns the list of Postgresqls that match those selectors.
 | ||||||
| func (c *FakePostgresqls) List(opts v1.ListOptions) (result *acidzalandov1.PostgresqlList, err error) { | func (c *FakePostgresqls) List(opts v1.ListOptions) (result *acid_zalan_do_v1.PostgresqlList, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewListAction(postgresqlsResource, postgresqlsKind, c.ns, opts), &acidzalandov1.PostgresqlList{}) | 		Invokes(testing.NewListAction(postgresqlsResource, postgresqlsKind, c.ns, opts), &acid_zalan_do_v1.PostgresqlList{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
|  | @ -68,8 +68,8 @@ func (c *FakePostgresqls) List(opts v1.ListOptions) (result *acidzalandov1.Postg | ||||||
| 	if label == nil { | 	if label == nil { | ||||||
| 		label = labels.Everything() | 		label = labels.Everything() | ||||||
| 	} | 	} | ||||||
| 	list := &acidzalandov1.PostgresqlList{ListMeta: obj.(*acidzalandov1.PostgresqlList).ListMeta} | 	list := &acid_zalan_do_v1.PostgresqlList{ListMeta: obj.(*acid_zalan_do_v1.PostgresqlList).ListMeta} | ||||||
| 	for _, item := range obj.(*acidzalandov1.PostgresqlList).Items { | 	for _, item := range obj.(*acid_zalan_do_v1.PostgresqlList).Items { | ||||||
| 		if label.Matches(labels.Set(item.Labels)) { | 		if label.Matches(labels.Set(item.Labels)) { | ||||||
| 			list.Items = append(list.Items, item) | 			list.Items = append(list.Items, item) | ||||||
| 		} | 		} | ||||||
|  | @ -85,43 +85,43 @@ func (c *FakePostgresqls) Watch(opts v1.ListOptions) (watch.Interface, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Create takes the representation of a postgresql and creates it.  Returns the server's representation of the postgresql, and an error, if there is any.
 | // Create takes the representation of a postgresql and creates it.  Returns the server's representation of the postgresql, and an error, if there is any.
 | ||||||
| func (c *FakePostgresqls) Create(postgresql *acidzalandov1.Postgresql) (result *acidzalandov1.Postgresql, err error) { | func (c *FakePostgresqls) Create(postgresql *acid_zalan_do_v1.Postgresql) (result *acid_zalan_do_v1.Postgresql, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewCreateAction(postgresqlsResource, c.ns, postgresql), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewCreateAction(postgresqlsResource, c.ns, postgresql), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.Postgresql), err | 	return obj.(*acid_zalan_do_v1.Postgresql), err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Update takes the representation of a postgresql and updates it. Returns the server's representation of the postgresql, and an error, if there is any.
 | // Update takes the representation of a postgresql and updates it. Returns the server's representation of the postgresql, and an error, if there is any.
 | ||||||
| func (c *FakePostgresqls) Update(postgresql *acidzalandov1.Postgresql) (result *acidzalandov1.Postgresql, err error) { | func (c *FakePostgresqls) Update(postgresql *acid_zalan_do_v1.Postgresql) (result *acid_zalan_do_v1.Postgresql, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewUpdateAction(postgresqlsResource, c.ns, postgresql), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewUpdateAction(postgresqlsResource, c.ns, postgresql), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.Postgresql), err | 	return obj.(*acid_zalan_do_v1.Postgresql), err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdateStatus was generated because the type contains a Status member.
 | // UpdateStatus was generated because the type contains a Status member.
 | ||||||
| // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
 | // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
 | ||||||
| func (c *FakePostgresqls) UpdateStatus(postgresql *acidzalandov1.Postgresql) (*acidzalandov1.Postgresql, error) { | func (c *FakePostgresqls) UpdateStatus(postgresql *acid_zalan_do_v1.Postgresql) (*acid_zalan_do_v1.Postgresql, error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewUpdateSubresourceAction(postgresqlsResource, "status", c.ns, postgresql), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewUpdateSubresourceAction(postgresqlsResource, "status", c.ns, postgresql), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.Postgresql), err | 	return obj.(*acid_zalan_do_v1.Postgresql), err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Delete takes name of the postgresql and deletes it. Returns an error if one occurs.
 | // Delete takes name of the postgresql and deletes it. Returns an error if one occurs.
 | ||||||
| func (c *FakePostgresqls) Delete(name string, options *v1.DeleteOptions) error { | func (c *FakePostgresqls) Delete(name string, options *v1.DeleteOptions) error { | ||||||
| 	_, err := c.Fake. | 	_, err := c.Fake. | ||||||
| 		Invokes(testing.NewDeleteAction(postgresqlsResource, c.ns, name), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewDeleteAction(postgresqlsResource, c.ns, name), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  | @ -130,17 +130,17 @@ func (c *FakePostgresqls) Delete(name string, options *v1.DeleteOptions) error { | ||||||
| func (c *FakePostgresqls) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { | func (c *FakePostgresqls) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { | ||||||
| 	action := testing.NewDeleteCollectionAction(postgresqlsResource, c.ns, listOptions) | 	action := testing.NewDeleteCollectionAction(postgresqlsResource, c.ns, listOptions) | ||||||
| 
 | 
 | ||||||
| 	_, err := c.Fake.Invokes(action, &acidzalandov1.PostgresqlList{}) | 	_, err := c.Fake.Invokes(action, &acid_zalan_do_v1.PostgresqlList{}) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Patch applies the patch and returns the patched postgresql.
 | // Patch applies the patch and returns the patched postgresql.
 | ||||||
| func (c *FakePostgresqls) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *acidzalandov1.Postgresql, err error) { | func (c *FakePostgresqls) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *acid_zalan_do_v1.Postgresql, err error) { | ||||||
| 	obj, err := c.Fake. | 	obj, err := c.Fake. | ||||||
| 		Invokes(testing.NewPatchSubresourceAction(postgresqlsResource, c.ns, name, data, subresources...), &acidzalandov1.Postgresql{}) | 		Invokes(testing.NewPatchSubresourceAction(postgresqlsResource, c.ns, name, data, subresources...), &acid_zalan_do_v1.Postgresql{}) | ||||||
| 
 | 
 | ||||||
| 	if obj == nil { | 	if obj == nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return obj.(*acidzalandov1.Postgresql), err | 	return obj.(*acid_zalan_do_v1.Postgresql), err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,8 +25,8 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	acidzalandov1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acid_zalan_do_v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	scheme "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/scheme" | 	scheme "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/scheme" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	rest "k8s.io/client-go/rest" | 	rest "k8s.io/client-go/rest" | ||||||
| ) | ) | ||||||
|  | @ -39,7 +39,7 @@ type OperatorConfigurationsGetter interface { | ||||||
| 
 | 
 | ||||||
| // OperatorConfigurationInterface has methods to work with OperatorConfiguration resources.
 | // OperatorConfigurationInterface has methods to work with OperatorConfiguration resources.
 | ||||||
| type OperatorConfigurationInterface interface { | type OperatorConfigurationInterface interface { | ||||||
| 	Get(name string, options v1.GetOptions) (*acidzalandov1.OperatorConfiguration, error) | 	Get(name string, options v1.GetOptions) (*acid_zalan_do_v1.OperatorConfiguration, error) | ||||||
| 	OperatorConfigurationExpansion | 	OperatorConfigurationExpansion | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -58,8 +58,8 @@ func newOperatorConfigurations(c *AcidV1Client, namespace string) *operatorConfi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Get takes name of the operatorConfiguration, and returns the corresponding operatorConfiguration object, and an error if there is any.
 | // Get takes name of the operatorConfiguration, and returns the corresponding operatorConfiguration object, and an error if there is any.
 | ||||||
| func (c *operatorConfigurations) Get(name string, options v1.GetOptions) (result *acidzalandov1.OperatorConfiguration, err error) { | func (c *operatorConfigurations) Get(name string, options v1.GetOptions) (result *acid_zalan_do_v1.OperatorConfiguration, err error) { | ||||||
| 	result = &acidzalandov1.OperatorConfiguration{} | 	result = &acid_zalan_do_v1.OperatorConfiguration{} | ||||||
| 	err = c.client.Get(). | 	err = c.client.Get(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
| 		Resource("operatorconfigurations"). | 		Resource("operatorconfigurations"). | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,9 +25,9 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	scheme "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned/scheme" | 	scheme "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned/scheme" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	types "k8s.io/apimachinery/pkg/types" | 	types "k8s.io/apimachinery/pkg/types" | ||||||
| 	watch "k8s.io/apimachinery/pkg/watch" | 	watch "k8s.io/apimachinery/pkg/watch" | ||||||
| 	rest "k8s.io/client-go/rest" | 	rest "k8s.io/client-go/rest" | ||||||
|  | @ -44,11 +44,11 @@ type PostgresqlInterface interface { | ||||||
| 	Create(*v1.Postgresql) (*v1.Postgresql, error) | 	Create(*v1.Postgresql) (*v1.Postgresql, error) | ||||||
| 	Update(*v1.Postgresql) (*v1.Postgresql, error) | 	Update(*v1.Postgresql) (*v1.Postgresql, error) | ||||||
| 	UpdateStatus(*v1.Postgresql) (*v1.Postgresql, error) | 	UpdateStatus(*v1.Postgresql) (*v1.Postgresql, error) | ||||||
| 	Delete(name string, options *metav1.DeleteOptions) error | 	Delete(name string, options *meta_v1.DeleteOptions) error | ||||||
| 	DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error | 	DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error | ||||||
| 	Get(name string, options metav1.GetOptions) (*v1.Postgresql, error) | 	Get(name string, options meta_v1.GetOptions) (*v1.Postgresql, error) | ||||||
| 	List(opts metav1.ListOptions) (*v1.PostgresqlList, error) | 	List(opts meta_v1.ListOptions) (*v1.PostgresqlList, error) | ||||||
| 	Watch(opts metav1.ListOptions) (watch.Interface, error) | 	Watch(opts meta_v1.ListOptions) (watch.Interface, error) | ||||||
| 	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Postgresql, err error) | 	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Postgresql, err error) | ||||||
| 	PostgresqlExpansion | 	PostgresqlExpansion | ||||||
| } | } | ||||||
|  | @ -68,7 +68,7 @@ func newPostgresqls(c *AcidV1Client, namespace string) *postgresqls { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Get takes name of the postgresql, and returns the corresponding postgresql object, and an error if there is any.
 | // Get takes name of the postgresql, and returns the corresponding postgresql object, and an error if there is any.
 | ||||||
| func (c *postgresqls) Get(name string, options metav1.GetOptions) (result *v1.Postgresql, err error) { | func (c *postgresqls) Get(name string, options meta_v1.GetOptions) (result *v1.Postgresql, err error) { | ||||||
| 	result = &v1.Postgresql{} | 	result = &v1.Postgresql{} | ||||||
| 	err = c.client.Get(). | 	err = c.client.Get(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
|  | @ -81,7 +81,7 @@ func (c *postgresqls) Get(name string, options metav1.GetOptions) (result *v1.Po | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // List takes label and field selectors, and returns the list of Postgresqls that match those selectors.
 | // List takes label and field selectors, and returns the list of Postgresqls that match those selectors.
 | ||||||
| func (c *postgresqls) List(opts metav1.ListOptions) (result *v1.PostgresqlList, err error) { | func (c *postgresqls) List(opts meta_v1.ListOptions) (result *v1.PostgresqlList, err error) { | ||||||
| 	result = &v1.PostgresqlList{} | 	result = &v1.PostgresqlList{} | ||||||
| 	err = c.client.Get(). | 	err = c.client.Get(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
|  | @ -93,7 +93,7 @@ func (c *postgresqls) List(opts metav1.ListOptions) (result *v1.PostgresqlList, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Watch returns a watch.Interface that watches the requested postgresqls.
 | // Watch returns a watch.Interface that watches the requested postgresqls.
 | ||||||
| func (c *postgresqls) Watch(opts metav1.ListOptions) (watch.Interface, error) { | func (c *postgresqls) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { | ||||||
| 	opts.Watch = true | 	opts.Watch = true | ||||||
| 	return c.client.Get(). | 	return c.client.Get(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
|  | @ -144,7 +144,7 @@ func (c *postgresqls) UpdateStatus(postgresql *v1.Postgresql) (result *v1.Postgr | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Delete takes name of the postgresql and deletes it. Returns an error if one occurs.
 | // Delete takes name of the postgresql and deletes it. Returns an error if one occurs.
 | ||||||
| func (c *postgresqls) Delete(name string, options *metav1.DeleteOptions) error { | func (c *postgresqls) Delete(name string, options *meta_v1.DeleteOptions) error { | ||||||
| 	return c.client.Delete(). | 	return c.client.Delete(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
| 		Resource("postgresqls"). | 		Resource("postgresqls"). | ||||||
|  | @ -155,7 +155,7 @@ func (c *postgresqls) Delete(name string, options *metav1.DeleteOptions) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeleteCollection deletes a collection of objects.
 | // DeleteCollection deletes a collection of objects.
 | ||||||
| func (c *postgresqls) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { | func (c *postgresqls) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { | ||||||
| 	return c.client.Delete(). | 	return c.client.Delete(). | ||||||
| 		Namespace(c.ns). | 		Namespace(c.ns). | ||||||
| 		Resource("postgresqls"). | 		Resource("postgresqls"). | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,8 +25,8 @@ SOFTWARE. | ||||||
| package acid | package acid | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do/v1" | ||||||
| 	internalinterfaces "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | 	internalinterfaces "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Interface provides access to each of this group's versions.
 | // Interface provides access to each of this group's versions.
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	internalinterfaces "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | 	internalinterfaces "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Interface provides access to all the informers in this group version.
 | // Interface provides access to all the informers in this group version.
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -27,11 +27,11 @@ package v1 | ||||||
| import ( | import ( | ||||||
| 	time "time" | 	time "time" | ||||||
| 
 | 
 | ||||||
| 	acidzalandov1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	acid_zalan_do_v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	versioned "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned" | 	versioned "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned" | ||||||
| 	internalinterfaces "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | 	internalinterfaces "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/generated/listers/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/generated/listers/acid.zalan.do/v1" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	watch "k8s.io/apimachinery/pkg/watch" | 	watch "k8s.io/apimachinery/pkg/watch" | ||||||
| 	cache "k8s.io/client-go/tools/cache" | 	cache "k8s.io/client-go/tools/cache" | ||||||
|  | @ -63,20 +63,20 @@ func NewPostgresqlInformer(client versioned.Interface, namespace string, resyncP | ||||||
| func NewFilteredPostgresqlInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { | func NewFilteredPostgresqlInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { | ||||||
| 	return cache.NewSharedIndexInformer( | 	return cache.NewSharedIndexInformer( | ||||||
| 		&cache.ListWatch{ | 		&cache.ListWatch{ | ||||||
| 			ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { | 			ListFunc: func(options meta_v1.ListOptions) (runtime.Object, error) { | ||||||
| 				if tweakListOptions != nil { | 				if tweakListOptions != nil { | ||||||
| 					tweakListOptions(&options) | 					tweakListOptions(&options) | ||||||
| 				} | 				} | ||||||
| 				return client.AcidV1().Postgresqls(namespace).List(options) | 				return client.AcidV1().Postgresqls(namespace).List(options) | ||||||
| 			}, | 			}, | ||||||
| 			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { | 			WatchFunc: func(options meta_v1.ListOptions) (watch.Interface, error) { | ||||||
| 				if tweakListOptions != nil { | 				if tweakListOptions != nil { | ||||||
| 					tweakListOptions(&options) | 					tweakListOptions(&options) | ||||||
| 				} | 				} | ||||||
| 				return client.AcidV1().Postgresqls(namespace).Watch(options) | 				return client.AcidV1().Postgresqls(namespace).Watch(options) | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 		&acidzalandov1.Postgresql{}, | 		&acid_zalan_do_v1.Postgresql{}, | ||||||
| 		resyncPeriod, | 		resyncPeriod, | ||||||
| 		indexers, | 		indexers, | ||||||
| 	) | 	) | ||||||
|  | @ -87,7 +87,7 @@ func (f *postgresqlInformer) defaultInformer(client versioned.Interface, resyncP | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (f *postgresqlInformer) Informer() cache.SharedIndexInformer { | func (f *postgresqlInformer) Informer() cache.SharedIndexInformer { | ||||||
| 	return f.factory.InformerFor(&acidzalandov1.Postgresql{}, f.defaultInformer) | 	return f.factory.InformerFor(&acid_zalan_do_v1.Postgresql{}, f.defaultInformer) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (f *postgresqlInformer) Lister() v1.PostgresqlLister { | func (f *postgresqlInformer) Lister() v1.PostgresqlLister { | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -29,9 +29,9 @@ import ( | ||||||
| 	sync "sync" | 	sync "sync" | ||||||
| 	time "time" | 	time "time" | ||||||
| 
 | 
 | ||||||
| 	versioned "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned" | 	versioned "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned" | ||||||
| 	acidzalando "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do" | 	acid_zalan_do "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/acid.zalan.do" | ||||||
| 	internalinterfaces "github.com/zalando-incubator/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | 	internalinterfaces "github.com/zalando/postgres-operator/pkg/generated/informers/externalversions/internalinterfaces" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | @ -178,9 +178,9 @@ type SharedInformerFactory interface { | ||||||
| 	ForResource(resource schema.GroupVersionResource) (GenericInformer, error) | 	ForResource(resource schema.GroupVersionResource) (GenericInformer, error) | ||||||
| 	WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool | 	WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool | ||||||
| 
 | 
 | ||||||
| 	Acid() acidzalando.Interface | 	Acid() acid_zalan_do.Interface | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (f *sharedInformerFactory) Acid() acidzalando.Interface { | func (f *sharedInformerFactory) Acid() acid_zalan_do.Interface { | ||||||
| 	return acidzalando.New(f, f.namespace, f.tweakListOptions) | 	return acid_zalan_do.New(f, f.namespace, f.tweakListOptions) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -27,7 +27,7 @@ package externalversions | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	schema "k8s.io/apimachinery/pkg/runtime/schema" | 	schema "k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 	cache "k8s.io/client-go/tools/cache" | 	cache "k8s.io/client-go/tools/cache" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -27,7 +27,7 @@ package internalinterfaces | ||||||
| import ( | import ( | ||||||
| 	time "time" | 	time "time" | ||||||
| 
 | 
 | ||||||
| 	versioned "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned" | 	versioned "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned" | ||||||
| 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	runtime "k8s.io/apimachinery/pkg/runtime" | 	runtime "k8s.io/apimachinery/pkg/runtime" | ||||||
| 	cache "k8s.io/client-go/tools/cache" | 	cache "k8s.io/client-go/tools/cache" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* | /* | ||||||
| Copyright 2018 Compose, Zalando SE | Copyright 2019 Compose, Zalando SE | ||||||
| 
 | 
 | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | @ -25,7 +25,7 @@ SOFTWARE. | ||||||
| package v1 | package v1 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	v1 "github.com/zalando-incubator/postgres-operator/pkg/apis/acid.zalan.do/v1" | 	v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/api/errors" | 	"k8s.io/apimachinery/pkg/api/errors" | ||||||
| 	"k8s.io/apimachinery/pkg/labels" | 	"k8s.io/apimachinery/pkg/labels" | ||||||
| 	"k8s.io/client-go/tools/cache" | 	"k8s.io/client-go/tools/cache" | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // CRD describes CustomResourceDefinition specific configuration parameters
 | // CRD describes CustomResourceDefinition specific configuration parameters
 | ||||||
|  | @ -27,6 +27,7 @@ type Resources struct { | ||||||
| 	PodTerminateGracePeriod time.Duration     `name:"pod_terminate_grace_period" default:"5m"` | 	PodTerminateGracePeriod time.Duration     `name:"pod_terminate_grace_period" default:"5m"` | ||||||
| 	PodPriorityClassName    string            `name:"pod_priority_class_name"` | 	PodPriorityClassName    string            `name:"pod_priority_class_name"` | ||||||
| 	ClusterLabels           map[string]string `name:"cluster_labels" default:"application:spilo"` | 	ClusterLabels           map[string]string `name:"cluster_labels" default:"application:spilo"` | ||||||
|  | 	InheritedLabels         []string          `name:"inherited_labels" default:""` | ||||||
| 	ClusterNameLabel        string            `name:"cluster_name_label" default:"cluster-name"` | 	ClusterNameLabel        string            `name:"cluster_name_label" default:"cluster-name"` | ||||||
| 	PodRoleLabel            string            `name:"pod_role_label" default:"spilo-role"` | 	PodRoleLabel            string            `name:"pod_role_label" default:"spilo-role"` | ||||||
| 	PodToleration           map[string]string `name:"toleration" default:""` | 	PodToleration           map[string]string `name:"toleration" default:""` | ||||||
|  | @ -95,6 +96,8 @@ type Config struct { | ||||||
| 	EnableMasterLoadBalancer               bool   `name:"enable_master_load_balancer" default:"true"` | 	EnableMasterLoadBalancer               bool   `name:"enable_master_load_balancer" default:"true"` | ||||||
| 	EnableReplicaLoadBalancer              bool   `name:"enable_replica_load_balancer" default:"false"` | 	EnableReplicaLoadBalancer              bool   `name:"enable_replica_load_balancer" default:"false"` | ||||||
| 	CustomServiceAnnotations			   map[string]string `name:"custom_service_annotations"` | 	CustomServiceAnnotations			   map[string]string `name:"custom_service_annotations"` | ||||||
|  | 	EnablePodAntiAffinity                  bool   `name:"enable_pod_antiaffinity" default:"false"` | ||||||
|  | 	PodAntiAffinityTopologyKey			   string `name:"pod_antiaffinity_topology_key" default:"kubernetes.io/hostname"` | ||||||
| 	// deprecated and kept for backward compatibility
 | 	// deprecated and kept for backward compatibility
 | ||||||
| 	EnableLoadBalancer       *bool             `name:"enable_load_balancer"` | 	EnableLoadBalancer       *bool             `name:"enable_load_balancer"` | ||||||
| 	MasterDNSNameFormat      StringTemplate    `name:"master_dns_name_format" default:"{cluster}.{team}.{hostedzone}"` | 	MasterDNSNameFormat      StringTemplate    `name:"master_dns_name_format" default:"{cluster}.{team}.{hostedzone}"` | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ package k8sutil | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| 	policybeta1 "k8s.io/api/policy/v1beta1" | 	policybeta1 "k8s.io/api/policy/v1beta1" | ||||||
| 	apiextclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" | 	apiextclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" | ||||||
|  | @ -17,7 +17,7 @@ import ( | ||||||
| 	"k8s.io/client-go/tools/clientcmd" | 	"k8s.io/client-go/tools/clientcmd" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 
 | 
 | ||||||
| 	acidv1client "github.com/zalando-incubator/postgres-operator/pkg/generated/clientset/versioned" | 	acidv1client "github.com/zalando/postgres-operator/pkg/generated/clientset/versioned" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // KubernetesClient describes getters for Kubernetes objects
 | // KubernetesClient describes getters for Kubernetes objects
 | ||||||
|  |  | ||||||
|  | @ -7,8 +7,8 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util" | 	"github.com/zalando/postgres-operator/pkg/util" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ import ( | ||||||
| 	resource "k8s.io/apimachinery/pkg/api/resource" | 	resource "k8s.io/apimachinery/pkg/api/resource" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | 	"github.com/zalando/postgres-operator/pkg/spec" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var pgUsers = []struct { | var pgUsers = []struct { | ||||||
|  |  | ||||||
|  | @ -9,8 +9,8 @@ import ( | ||||||
| 	"github.com/aws/aws-sdk-go/service/ec2" | 	"github.com/aws/aws-sdk-go/service/ec2" | ||||||
| 	"k8s.io/api/core/v1" | 	"k8s.io/api/core/v1" | ||||||
| 
 | 
 | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/retryutil" | 	"github.com/zalando/postgres-operator/pkg/util/retryutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // EBSVolumeResizer implements volume resizing interface for AWS EBS volumes.
 | // EBSVolumeResizer implements volume resizing interface for AWS EBS volumes.
 | ||||||
|  |  | ||||||
|  | @ -3,6 +3,11 @@ | ||||||
| # Deploy a Postgres operator to a minikube aka local Kubernetes cluster | # Deploy a Postgres operator to a minikube aka local Kubernetes cluster | ||||||
| # Optionally re-build the operator binary beforehand to test local changes | # Optionally re-build the operator binary beforehand to test local changes | ||||||
| 
 | 
 | ||||||
|  | # Known limitations: | ||||||
|  | # 1) minikube provides a single node k8s cluster. That is, you will not be able test functions like pod | ||||||
|  | #    migration between multiple nodes locally | ||||||
|  | # 2) this script configures the operator via configmap, not the operator CRD | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| # enable unofficial bash strict mode | # enable unofficial bash strict mode | ||||||
| set -o errexit | set -o errexit | ||||||
|  | @ -13,6 +18,7 @@ IFS=$'\n\t' | ||||||
| 
 | 
 | ||||||
| readonly PATH_TO_LOCAL_OPERATOR_MANIFEST="/tmp/local-postgres-operator-manifest.yaml" | readonly PATH_TO_LOCAL_OPERATOR_MANIFEST="/tmp/local-postgres-operator-manifest.yaml" | ||||||
| readonly PATH_TO_PORT_FORWARED_KUBECTL_PID="/tmp/kubectl-port-forward.pid" | readonly PATH_TO_PORT_FORWARED_KUBECTL_PID="/tmp/kubectl-port-forward.pid" | ||||||
|  | readonly PATH_TO_THE_PG_CLUSTER_MANIFEST="/tmp/minimal-postgres-manifest.yaml" | ||||||
| readonly LOCAL_PORT="8080" | readonly LOCAL_PORT="8080" | ||||||
| readonly OPERATOR_PORT="8080" | readonly OPERATOR_PORT="8080" | ||||||
| 
 | 
 | ||||||
|  | @ -37,18 +43,16 @@ function retry(){ | ||||||
|     return 1 |     return 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| function display_help(){ | function display_help(){ | ||||||
|     echo "Usage: $0 [ -r | --rebuild-operator ] [ -h | --help ]" |     echo "Usage: $0 [ -r | --rebuild-operator ] [ -h | --help ] [ -n | --deploy-new-operator-image ] [ -t | --deploy-pg-to-namespace-test ]" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| function clean_up(){ | function clean_up(){ | ||||||
| 
 | 
 | ||||||
|     echo "==== CLEAN UP PREVIOUS RUN ==== " |     echo "==== CLEAN UP PREVIOUS RUN ==== " | ||||||
| 
 | 
 | ||||||
|     local status |     local status | ||||||
|     status=$(minikube status --format "{{.MinikubeStatus}}" || true) |     status=$(minikube status --format "{{.Host}}" || true) | ||||||
| 
 | 
 | ||||||
|     if [[ "$status" = "Running" ]] || [[ "$status" = "Stopped" ]]; then |     if [[ "$status" = "Running" ]] || [[ "$status" = "Stopped" ]]; then | ||||||
|         echo "Delete the existing local cluster so that we can cleanly apply resources from scratch..." |         echo "Delete the existing local cluster so that we can cleanly apply resources from scratch..." | ||||||
|  | @ -123,7 +127,7 @@ function deploy_self_built_image() { | ||||||
|     # docker should not attempt to fetch it from the registry due to imagePullPolicy |     # docker should not attempt to fetch it from the registry due to imagePullPolicy | ||||||
|     sed -e "s/\(image\:.*\:\).*$/\1$TAG/; s/smoke-tested-//" manifests/postgres-operator.yaml > "$PATH_TO_LOCAL_OPERATOR_MANIFEST" |     sed -e "s/\(image\:.*\:\).*$/\1$TAG/; s/smoke-tested-//" manifests/postgres-operator.yaml > "$PATH_TO_LOCAL_OPERATOR_MANIFEST" | ||||||
| 
 | 
 | ||||||
|     retry "kubectl create -f \"$PATH_TO_LOCAL_OPERATOR_MANIFEST\"" "attempt to create $PATH_TO_LOCAL_OPERATOR_MANIFEST resource" |     retry "kubectl apply -f \"$PATH_TO_LOCAL_OPERATOR_MANIFEST\"" "attempt to create $PATH_TO_LOCAL_OPERATOR_MANIFEST resource" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -139,17 +143,18 @@ function start_operator(){ | ||||||
|         retry "kubectl  create -f manifests/\"$file\"" "attempt to create $file resource" |         retry "kubectl  create -f manifests/\"$file\"" "attempt to create $file resource" | ||||||
|     done |     done | ||||||
| 
 | 
 | ||||||
|  |     cp  manifests/postgres-operator.yaml $PATH_TO_LOCAL_OPERATOR_MANIFEST | ||||||
|  | 
 | ||||||
|     if [[ "$should_build_custom_operator" = true ]]; then # set in main() |     if [[ "$should_build_custom_operator" = true ]]; then # set in main() | ||||||
|         deploy_self_built_image |         deploy_self_built_image | ||||||
|     else |     else | ||||||
|         retry "kubectl  create -f manifests/postgres-operator.yaml" "attempt to create /postgres-operator.yaml resource" |         retry "kubectl create -f ${PATH_TO_LOCAL_OPERATOR_MANIFEST}" "attempt to create ${PATH_TO_LOCAL_OPERATOR_MANIFEST} resource" | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     local -r msg="Wait for the postgresql custom resource definition to register..." |     local -r msg="Wait for the postgresql custom resource definition to register..." | ||||||
|     local -r cmd="kubectl get crd | grep --quiet 'postgresqls.acid.zalan.do'" |     local -r cmd="kubectl get crd | grep --quiet 'postgresqls.acid.zalan.do'" | ||||||
|     retry "$cmd" "$msg " |     retry "$cmd" "$msg " | ||||||
| 
 | 
 | ||||||
|     kubectl create -f manifests/minimal-postgres-manifest.yaml |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -186,16 +191,38 @@ function check_health(){ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | function submit_postgresql_manifest(){ | ||||||
|  | 
 | ||||||
|  |     echo "==== SUBMIT MINIMAL POSTGRES MANIFEST ==== " | ||||||
|  | 
 | ||||||
|  |     local namespace="default" | ||||||
|  |     cp manifests/minimal-postgres-manifest.yaml $PATH_TO_THE_PG_CLUSTER_MANIFEST | ||||||
|  | 
 | ||||||
|  |     if $should_deploy_pg_to_namespace_test; then | ||||||
|  |           kubectl create namespace test | ||||||
|  |           namespace="test" | ||||||
|  |           sed --in-place 's/namespace: default/namespace: test/'  $PATH_TO_THE_PG_CLUSTER_MANIFEST | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     kubectl create -f $PATH_TO_THE_PG_CLUSTER_MANIFEST | ||||||
|  |     echo "The operator will create the PG cluster with minimal manifest $PATH_TO_THE_PG_CLUSTER_MANIFEST in the ${namespace} namespace" | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| function main(){ | function main(){ | ||||||
| 
 | 
 | ||||||
|     if ! [[ $(basename "$PWD") == "postgres-operator" ]]; then |     if ! [[ $(basename "$PWD") == "postgres-operator" ]]; then | ||||||
|         echo "Please execute the script only from the root directory of the Postgres opepator repo." |         echo "Please execute the script only from the root directory of the Postgres operator repo." | ||||||
|         exit 1 |         exit 1 | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     trap "echo 'If you observe issues with minikube VM not starting/not proceeding, consider deleting the .minikube dir and/or rebooting before re-running the script'" EXIT |     trap "echo 'If you observe issues with minikube VM not starting/not proceeding, consider deleting the .minikube dir and/or rebooting before re-running the script'" EXIT | ||||||
| 
 | 
 | ||||||
|     local should_build_custom_operator=false # used in start_operator() |     local should_build_custom_operator=false | ||||||
|  |     local should_deploy_pg_to_namespace_test=false | ||||||
|  |     local should_replace_operator_image=false | ||||||
|  | 
 | ||||||
|     while true |     while true | ||||||
|     do |     do | ||||||
|         # if the 1st param is unset, use the empty string as a default value |         # if the 1st param is unset, use the empty string as a default value | ||||||
|  | @ -204,19 +231,32 @@ function main(){ | ||||||
|                 display_help |                 display_help | ||||||
|                 exit 0 |                 exit 0 | ||||||
|                 ;; |                 ;; | ||||||
|             -r | --rebuild-operator) |             -r | --rebuild-operator) # with minikube restart | ||||||
|                 should_build_custom_operator=true |                 should_build_custom_operator=true | ||||||
|                 break |                 break | ||||||
|                 ;; |                 ;; | ||||||
|  |             -n | --deploy-new-operator-image) # without minikube restart that takes minutes | ||||||
|  |                 should_replace_operator_image=true | ||||||
|  |                 break | ||||||
|  |                 ;; | ||||||
|  |             -t | --deploy-pg-to-namespace-test) # to test multi-namespace support locally | ||||||
|  |                 should_deploy_pg_to_namespace_test=true | ||||||
|  |                 break | ||||||
|  |                 ;; | ||||||
|             *)  break |             *)  break | ||||||
|                 ;; |                 ;; | ||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
| 
 | 
 | ||||||
|  |     if ${should_replace_operator_image}; then | ||||||
|  |        deploy_self_built_image | ||||||
|  |        exit 0 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|     clean_up |     clean_up | ||||||
|     start_minikube |     start_minikube | ||||||
|     kubectl create namespace test |  | ||||||
|     start_operator |     start_operator | ||||||
|  |     submit_postgresql_manifest | ||||||
|     forward_ports |     forward_ports | ||||||
|     check_health |     check_health | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue