make run.sh executable from within e2e
This commit is contained in:
		
							parent
							
								
									1d45a6aec3
								
							
						
					
					
						commit
						92f763a46a
					
				|  | @ -15,9 +15,9 @@ before_install: | ||||||
|   - go get github.com/mattn/goveralls |   - go get github.com/mattn/goveralls | ||||||
| 
 | 
 | ||||||
| install: | install: | ||||||
|   - make deps e2e-tools e2e-build |   - make deps | ||||||
| 
 | 
 | ||||||
| script: | script: | ||||||
|   - hack/verify-codegen.sh |   - hack/verify-codegen.sh | ||||||
|   - travis_wait 20 goveralls -service=travis-ci -package ./pkg/... -v |   - travis_wait 20 goveralls -service=travis-ci -package ./pkg/... -v | ||||||
|   - make e2e-run |   - make e2e | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										21
									
								
								Makefile
								
								
								
								
							|  | @ -1,4 +1,4 @@ | ||||||
| .PHONY: clean local test linux macos docker push scm-source.json e2e-run e2e-tools e2e-build | .PHONY: clean local test linux macos docker push scm-source.json e2e | ||||||
| 
 | 
 | ||||||
| BINARY ?= postgres-operator | BINARY ?= postgres-operator | ||||||
| BUILD_FLAGS ?= -v | BUILD_FLAGS ?= -v | ||||||
|  | @ -34,7 +34,10 @@ ifdef CDP_PULL_REQUEST_NUMBER | ||||||
| 	CDP_TAG := -${CDP_BUILD_VERSION} | 	CDP_TAG := -${CDP_BUILD_VERSION} | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| KIND_PATH := $(GOPATH)/bin | ifndef GOPATH | ||||||
|  | 	GOPATH := $(HOME)/go | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| PATH := $(GOPATH)/bin:$(PATH) | PATH := $(GOPATH)/bin:$(PATH) | ||||||
| SHELL := env PATH=$(PATH) $(SHELL) | SHELL := env PATH=$(PATH) $(SHELL) | ||||||
| 
 | 
 | ||||||
|  | @ -92,15 +95,5 @@ test: | ||||||
| 	hack/verify-codegen.sh | 	hack/verify-codegen.sh | ||||||
| 	@go test ./... | 	@go test ./... | ||||||
| 
 | 
 | ||||||
| e2e-build: | e2e: | ||||||
| 	docker build --tag="postgres-operator-e2e-tests" -f e2e/Dockerfile . | 	cd e2e; make tools test | ||||||
| 
 |  | ||||||
| e2e-tools: |  | ||||||
| 	# install pinned version of 'kind'  |  | ||||||
| 	# leave the name as is to avoid overwriting official binary named `kind` |  | ||||||
| 	wget https://github.com/kubernetes-sigs/kind/releases/download/v0.3.0/kind-linux-amd64 |  | ||||||
| 	chmod +x kind-linux-amd64 |  | ||||||
| 	mv kind-linux-amd64 $(KIND_PATH) |  | ||||||
| 
 |  | ||||||
| e2e-run: docker |  | ||||||
| 	e2e/run.sh |  | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ There is a browser-friendly version of this documentation at | ||||||
| * [The Postgres experience on K8s](docs/user.md) | * [The Postgres experience on K8s](docs/user.md) | ||||||
| * [The Postgres Operator UI](docs/operator-ui.md) | * [The Postgres Operator UI](docs/operator-ui.md) | ||||||
| * [DBA options - from RBAC to backup](docs/administrator.md) | * [DBA options - from RBAC to backup](docs/administrator.md) | ||||||
| * [Debug and extend the operator](docs/developer.md) | * [Build, debug and extend the operator](docs/developer.md) | ||||||
| * [Configuration options](docs/reference/operator_parameters.md) | * [Configuration options](docs/reference/operator_parameters.md) | ||||||
| * [Postgres manifest reference](docs/reference/cluster_manifest.md) | * [Postgres manifest reference](docs/reference/cluster_manifest.md) | ||||||
| * [Command-line options and environment variables](docs/reference/command_line_and_environment.md) | * [Command-line options and environment variables](docs/reference/command_line_and_environment.md) | ||||||
|  |  | ||||||
|  | @ -44,7 +44,7 @@ pipeline: | ||||||
|         - desc: 'Run e2e tests' |         - desc: 'Run e2e tests' | ||||||
|           cmd: | |           cmd: | | ||||||
|             cd $OPERATOR_TOP_DIR/postgres-operator |             cd $OPERATOR_TOP_DIR/postgres-operator | ||||||
|             make e2e-tools e2e-build e2e-run |             make e2e | ||||||
|         - desc: 'Push docker image' |         - desc: 'Push docker image' | ||||||
|           cmd: | |           cmd: | | ||||||
|             export PATH=$PATH:$HOME/go/bin |             export PATH=$PATH:$HOME/go/bin | ||||||
|  |  | ||||||
|  | @ -98,7 +98,7 @@ on `configmaps` resources). This is also done intentionally to avoid breaking | ||||||
| things if someone decides to configure the same service account in the | things if someone decides to configure the same service account in the | ||||||
| operator's ConfigMap to run Postgres clusters. | operator's ConfigMap to run Postgres clusters. | ||||||
| 
 | 
 | ||||||
| ### Give K8S users access to create/list `postgresqls` | ### Give K8s users access to create/list `postgresqls` | ||||||
| 
 | 
 | ||||||
| By default `postgresql` custom resources can only be listed and changed by | By default `postgresql` custom resources can only be listed and changed by | ||||||
| cluster admins. To allow read and/or write access to other human users apply | cluster admins. To allow read and/or write access to other human users apply | ||||||
|  | @ -363,7 +363,7 @@ used internally in K8s. | ||||||
| 
 | 
 | ||||||
| ## Logical backups | ## Logical backups | ||||||
| 
 | 
 | ||||||
| The operator can manage k8s cron jobs to run logical backups of Postgres | The operator can manage K8s cron jobs to run logical backups of Postgres | ||||||
| clusters. The cron job periodically spawns a batch job that runs a single pod. | clusters. The cron job periodically spawns a batch job that runs a single pod. | ||||||
| The backup script within this pod's container can connect to a DB for a logical | The backup script within this pod's container can connect to a DB for a logical | ||||||
| backup. The operator updates cron jobs during Sync if the job schedule changes; | backup. The operator updates cron jobs during Sync if the job schedule changes; | ||||||
|  |  | ||||||
|  | @ -96,7 +96,7 @@ kubectl get pod -l name=postgres-operator | ||||||
| The operator employs K8s-provided code generation to obtain deep copy methods | The operator employs K8s-provided code generation to obtain deep copy methods | ||||||
| and K8s-like APIs for its custom resource definitions, namely the | and K8s-like APIs for its custom resource definitions, namely the | ||||||
| Postgres CRD and the operator CRD. The usage of the code generation follows | Postgres CRD and the operator CRD. The usage of the code generation follows | ||||||
| conventions from the k8s community. Relevant scripts live in the `hack` | conventions from the K8s community. Relevant scripts live in the `hack` | ||||||
| directory: | directory: | ||||||
| * `update-codegen.sh` triggers code generation for the APIs defined in `pkg/apis/acid.zalan.do/`, | * `update-codegen.sh` triggers code generation for the APIs defined in `pkg/apis/acid.zalan.do/`, | ||||||
| * `verify-codegen.sh` checks if the generated code is up-to-date (to be used within CI). | * `verify-codegen.sh` checks if the generated code is up-to-date (to be used within CI). | ||||||
|  | @ -247,23 +247,20 @@ kubectl logs acid-minimal-cluster-0 | ||||||
| 
 | 
 | ||||||
| ## End-to-end tests | ## End-to-end tests | ||||||
| 
 | 
 | ||||||
| The operator provides reference e2e (end-to-end) tests to ensure various infra | The operator provides reference end-to-end tests (e2e) (as Docker image) to | ||||||
| parts work smoothly together. Each e2e execution tests a Postgres Operator image | ensure various infrastructure parts work smoothly together. Each e2e execution | ||||||
| built from the current git branch. The test runner starts a [kind](https://kind.sigs.k8s.io/) | tests a Postgres Operator image built from the current git branch. The test | ||||||
| (local k8s) cluster and Docker container with tests. The k8s API client from | runner creates a new local K8s cluster using [kind](https://kind.sigs.k8s.io/), | ||||||
| within the container connects to the `kind` cluster using the standard Docker | utilizes provided manifest examples, and runs e2e tests contained in the `tests` | ||||||
| `bridge` network. The tests utilize examples from `/manifests` (ConfigMap is | folder. The K8s API client in the container connects to the `kind` cluster via | ||||||
| used for the operator configuration) to avoid maintaining yet another set of | the standard Docker `bridge` network. The kind cluster is deleted if tests | ||||||
| configuration files. The kind cluster is deleted if tests complete successfully. | finish successfully or on each new run in case it still exists. | ||||||
| 
 | 
 | ||||||
| End-to-end tests are executed automatically during builds: | End-to-end tests are executed automatically during builds (for more details, | ||||||
|  | see the [README](../e2e/README.md) in the `e2e` folder): | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| # invoke them from the project's top directory | make e2e | ||||||
| make e2e-run |  | ||||||
| 
 |  | ||||||
| # install kind and build test image before first run |  | ||||||
| make e2e-tools e2e-build |  | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| End-to-end tests are written in Python and use `flake8` for code quality. | End-to-end tests are written in Python and use `flake8` for code quality. | ||||||
|  |  | ||||||
|  | @ -38,7 +38,7 @@ | ||||||
|       node[k8s-label] (app-label) {App} |       node[k8s-label] (app-label) {App} | ||||||
|       node[k8s-label, right=.25cm of app-label] (role-label) {Role} |       node[k8s-label, right=.25cm of app-label] (role-label) {Role} | ||||||
|       node[k8s-label, right=.25cm of role-label] (custom-label) {Custom} |       node[k8s-label, right=.25cm of role-label] (custom-label) {Custom} | ||||||
|       node[label, below of=role-label] (k8s-label-label) {K8S Labels} |       node[label, below of=role-label] (k8s-label-label) {K8s Labels} | ||||||
|       node[border, behind path, |       node[border, behind path, | ||||||
|            fit=(app-label)(role-label)(custom-label)(k8s-label-label) |            fit=(app-label)(role-label)(custom-label)(k8s-label-label) | ||||||
|       ] (k8s-labels) {};  \& \& |       ] (k8s-labels) {};  \& \& | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ used to complement it. | ||||||
| Here is a diagram, that summarizes what would be created by the operator, when a | Here is a diagram, that summarizes what would be created by the operator, when a | ||||||
| new Postgres cluster CRD is submitted: | new Postgres cluster CRD is submitted: | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
| This picture is not complete without an overview of what is inside a single | This picture is not complete without an overview of what is inside a single | ||||||
| cluster pod, so let's zoom in: | cluster pod, so let's zoom in: | ||||||
|  |  | ||||||
|  | @ -135,7 +135,7 @@ These parameters are grouped directly under  the `spec` key in the manifest. | ||||||
|   to S3. Default: false. Optional. |   to S3. Default: false. Optional. | ||||||
| 
 | 
 | ||||||
| * **logicalBackupSchedule** | * **logicalBackupSchedule** | ||||||
|   Schedule for the logical backup k8s cron job. Please take |   Schedule for the logical backup K8s cron job. Please take | ||||||
|   [the reference schedule format](https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#schedule) |   [the reference schedule format](https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#schedule) | ||||||
|   into account. Optional. Default is: "30 00 \* \* \*" |   into account. Optional. Default is: "30 00 \* \* \*" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -158,8 +158,8 @@ configuration they are grouped under the `kubernetes` key. | ||||||
| 
 | 
 | ||||||
| * **pod_service_account_role_binding_definition** | * **pod_service_account_role_binding_definition** | ||||||
|   This definition must bind pod service account to a role with permission |   This definition must bind pod service account to a role with permission | ||||||
|   sufficient for the pods to start and for Patroni to access k8s endpoints; |   sufficient for the pods to start and for Patroni to access K8s endpoints; | ||||||
|   service account on its own lacks any such rights starting with k8s v1.8. If |   service account on its own lacks any such rights starting with K8s v1.8. If | ||||||
|   not explicitly defined by the user, a simple definition that binds the |   not explicitly defined by the user, a simple definition that binds the | ||||||
|   account to the operator's own 'zalando-postgres-operator' cluster role will |   account to the operator's own 'zalando-postgres-operator' cluster role will | ||||||
|   be used. The default is empty. |   be used. The default is empty. | ||||||
|  | @ -416,7 +416,7 @@ yet officially supported. | ||||||
| 
 | 
 | ||||||
| ## Logical backup | ## Logical backup | ||||||
| 
 | 
 | ||||||
| These parameters configure a k8s cron job managed by the operator to produce | These parameters configure a K8s cron job managed by the operator to produce | ||||||
| Postgres logical backups. In the CRD-based configuration those parameters are | Postgres logical backups. In the CRD-based configuration those parameters are | ||||||
| grouped under the `logical_backup` key. | grouped under the `logical_backup` key. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,10 +1,8 @@ | ||||||
| FROM ubuntu:18.04 | FROM ubuntu:18.04 | ||||||
| LABEL maintainer="Team ACID @ Zalando <team-acid@zalando.de>" | LABEL maintainer="Team ACID @ Zalando <team-acid@zalando.de>" | ||||||
| 
 | 
 | ||||||
| WORKDIR /e2e |  | ||||||
| 
 |  | ||||||
| COPY manifests ./manifests | COPY manifests ./manifests | ||||||
| COPY e2e/requirements.txt e2e/tests ./ | COPY requirements.txt tests ./ | ||||||
| 
 | 
 | ||||||
| RUN apt-get update \ | RUN apt-get update \ | ||||||
|     && apt-get install --no-install-recommends -y \ |     && apt-get install --no-install-recommends -y \ | ||||||
|  | @ -19,4 +17,7 @@ RUN apt-get update \ | ||||||
|     && apt-get clean \ |     && apt-get clean \ | ||||||
|     && rm -rf /var/lib/apt/lists/* |     && rm -rf /var/lib/apt/lists/* | ||||||
| 
 | 
 | ||||||
|  | ARG VERSION=dev | ||||||
|  | RUN sed -i "s/__version__ = .*/__version__ = '${VERSION}'/" ./__init__.py | ||||||
|  | 
 | ||||||
| CMD ["python3", "-m", "unittest", "discover", "--start-directory", ".", "-v"] | CMD ["python3", "-m", "unittest", "discover", "--start-directory", ".", "-v"] | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | .PHONY: clean copy docker push tools test | ||||||
|  | 
 | ||||||
|  | BINARY ?= postgres-operator-e2e-tests | ||||||
|  | BUILD_FLAGS ?= -v | ||||||
|  | CGO_ENABLED ?= 0 | ||||||
|  | ifeq ($(RACE),1) | ||||||
|  | 	BUILD_FLAGS += -race -a | ||||||
|  |     CGO_ENABLED=1 | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | LOCAL_BUILD_FLAGS ?= $(BUILD_FLAGS) | ||||||
|  | LDFLAGS ?= -X=main.version=$(VERSION) | ||||||
|  | 
 | ||||||
|  | IMAGE            ?= registry.opensource.zalan.do/acid/$(BINARY) | ||||||
|  | VERSION          ?= $(shell git describe --tags --always --dirty) | ||||||
|  | TAG              ?= $(VERSION) | ||||||
|  | GITHEAD          = $(shell git rev-parse --short HEAD) | ||||||
|  | GITURL           = $(shell git config --get remote.origin.url) | ||||||
|  | GITSTATU         = $(shell git status --porcelain || echo 'no changes') | ||||||
|  | TTYFLAGS         = $(shell test -t 0 && echo '-it') | ||||||
|  | 
 | ||||||
|  | ifndef GOPATH | ||||||
|  | 	GOPATH := $(HOME)/go | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | KIND_PATH := $(GOPATH)/bin | ||||||
|  | PATH := $(GOPATH)/bin:$(PATH) | ||||||
|  | 
 | ||||||
|  | default: tools | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -fr manifests | ||||||
|  | 
 | ||||||
|  | copy: clean | ||||||
|  | 	mkdir manifests | ||||||
|  | 	cp ../manifests -r . | ||||||
|  | 
 | ||||||
|  | docker: copy | ||||||
|  | 	docker build --build-arg "VERSION=$(VERSION)" -t "$(IMAGE):$(TAG)" . | ||||||
|  | 
 | ||||||
|  | push: docker | ||||||
|  | 	docker push "$(IMAGE):$(TAG)" | ||||||
|  | 
 | ||||||
|  | tools: docker | ||||||
|  | 	# install pinned version of 'kind' | ||||||
|  | 	# leave the name as is to avoid overwriting official binary named `kind` | ||||||
|  | 	wget https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-linux-amd64 | ||||||
|  | 	chmod +x kind-linux-amd64 | ||||||
|  | 	mv kind-linux-amd64 $(KIND_PATH) | ||||||
|  | 
 | ||||||
|  | test: | ||||||
|  | 	./run.sh | ||||||
|  | @ -0,0 +1,46 @@ | ||||||
|  | # Postgres Operator end-to-end tests | ||||||
|  | 
 | ||||||
|  | End-to-end tests shall ensure that the Postgres Operator does its job when | ||||||
|  | applying manifests against a Kubernetes (K8s) environment. A test runner | ||||||
|  | Dockerfile is provided to run e2e tests without the need to install K8s and | ||||||
|  | its runtime `kubectl` in advance. The test runner uses | ||||||
|  | [kind](https://kind.sigs.k8s.io/) to create a local K8s cluster which runs on | ||||||
|  | Docker. | ||||||
|  | 
 | ||||||
|  | ## Prerequisites | ||||||
|  | 
 | ||||||
|  | Docker | ||||||
|  | Go | ||||||
|  | 
 | ||||||
|  | ## Build test runner | ||||||
|  | 
 | ||||||
|  | In the directory of the cloned Postgres Operator repository change to the e2e | ||||||
|  | folder and run: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | make | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | This will build the `postgres-operator-e2e-tests` image and download the kind | ||||||
|  | runtime. | ||||||
|  | 
 | ||||||
|  | ## Run tests | ||||||
|  | 
 | ||||||
|  | In the e2e folder you can invoke tests either with `make test` or with: | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | ./run.sh | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | To run both the build and test step you can invoke `make e2e` from the parent | ||||||
|  | directory. | ||||||
|  | 
 | ||||||
|  | ## Covered use cases | ||||||
|  | 
 | ||||||
|  | The current tests are all bundled in [`test_e2e.py`](tests/test_e2e.py): | ||||||
|  | 
 | ||||||
|  | * support for multiple namespaces | ||||||
|  | * scale Postgres cluster up and down | ||||||
|  | * taint-based eviction of Postgres pods | ||||||
|  | * invoking logical backup cron job | ||||||
|  | * uniqueness of master pod | ||||||
							
								
								
									
										24
									
								
								e2e/run.sh
								
								
								
								
							
							
						
						
									
										24
									
								
								e2e/run.sh
								
								
								
								
							|  | @ -6,11 +6,26 @@ set -o nounset | ||||||
| set -o pipefail | set -o pipefail | ||||||
| IFS=$'\n\t' | IFS=$'\n\t' | ||||||
| 
 | 
 | ||||||
|  | cd $(dirname "$0"); | ||||||
|  | 
 | ||||||
| readonly cluster_name="postgres-operator-e2e-tests" | readonly cluster_name="postgres-operator-e2e-tests" | ||||||
| readonly operator_image=$(docker images --filter=reference="registry.opensource.zalan.do/acid/postgres-operator" --format "{{.Repository}}:{{.Tag}}"  | head -1) |  | ||||||
| readonly e2e_test_image=${cluster_name} |  | ||||||
| readonly kubeconfig_path="/tmp/kind-config-${cluster_name}" | readonly kubeconfig_path="/tmp/kind-config-${cluster_name}" | ||||||
| 
 | 
 | ||||||
|  | function pull_images(){ | ||||||
|  | 
 | ||||||
|  |   operator_tag=$(git describe --tags --always --dirty) | ||||||
|  |   if [[ -z $(docker images -q registry.opensource.zalan.do/acid/postgres-operator:${operator_tag}) ]] | ||||||
|  |   then | ||||||
|  |     docker pull registry.opensource.zalan.do/acid/postgres-operator:latest | ||||||
|  |   fi | ||||||
|  |   if [[ -z $(docker images -q registry.opensource.zalan.do/acid/postgres-operator-e2e-tests:${operator_tag}) ]] | ||||||
|  |   then | ||||||
|  |     docker pull registry.opensource.zalan.do/acid/postgres-operator-e2e-tests:latest | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   operator_image=$(docker images --filter=reference="registry.opensource.zalan.do/acid/postgres-operator" --format "{{.Repository}}:{{.Tag}}" | head -1) | ||||||
|  |   e2e_test_image=$(docker images --filter=reference="registry.opensource.zalan.do/acid/postgres-operator-e2e-tests" --format "{{.Repository}}:{{.Tag}}" | head -1) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function start_kind(){ | function start_kind(){ | ||||||
| 
 | 
 | ||||||
|  | @ -20,8 +35,9 @@ function start_kind(){ | ||||||
|     kind-linux-amd64 delete cluster --name ${cluster_name} |     kind-linux-amd64 delete cluster --name ${cluster_name} | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   kind-linux-amd64 create cluster --name ${cluster_name} --config ./e2e/kind-cluster-postgres-operator-e2e-tests.yaml |   kind-linux-amd64 create cluster --name ${cluster_name} --config kind-cluster-postgres-operator-e2e-tests.yaml | ||||||
|   kind-linux-amd64 load docker-image "${operator_image}" --name ${cluster_name} |   kind-linux-amd64 load docker-image "${operator_image}" --name ${cluster_name} | ||||||
|  |   kind-linux-amd64 load docker-image "${e2e_test_image}" --name ${cluster_name} | ||||||
|   KUBECONFIG="$(kind-linux-amd64 get kubeconfig-path --name=${cluster_name})" |   KUBECONFIG="$(kind-linux-amd64 get kubeconfig-path --name=${cluster_name})" | ||||||
|   export KUBECONFIG |   export KUBECONFIG | ||||||
| } | } | ||||||
|  | @ -36,6 +52,7 @@ function set_kind_api_server_ip(){ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function run_tests(){ | function run_tests(){ | ||||||
|  | 
 | ||||||
|   docker run --rm --mount type=bind,source="$(readlink -f ${kubeconfig_path})",target=/root/.kube/config -e OPERATOR_IMAGE="${operator_image}" "${e2e_test_image}" |   docker run --rm --mount type=bind,source="$(readlink -f ${kubeconfig_path})",target=/root/.kube/config -e OPERATOR_IMAGE="${operator_image}" "${e2e_test_image}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -49,6 +66,7 @@ function main(){ | ||||||
| 
 | 
 | ||||||
|   trap "clean_up" QUIT TERM EXIT |   trap "clean_up" QUIT TERM EXIT | ||||||
| 
 | 
 | ||||||
|  |   pull_images | ||||||
|   start_kind |   start_kind | ||||||
|   set_kind_api_server_ip |   set_kind_api_server_ip | ||||||
|   run_tests |   run_tests | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | # This version is replaced during release process. | ||||||
|  | __version__ = '2019.0.dev1' | ||||||
|  | @ -11,7 +11,7 @@ from kubernetes import client, config | ||||||
| 
 | 
 | ||||||
| class EndToEndTestCase(unittest.TestCase): | class EndToEndTestCase(unittest.TestCase): | ||||||
|     ''' |     ''' | ||||||
|     Test interaction of the operator with multiple k8s components. |     Test interaction of the operator with multiple K8s components. | ||||||
|     ''' |     ''' | ||||||
| 
 | 
 | ||||||
|     # `kind` pods may stuck in the `Terminating` phase for a few minutes; hence high test timeout |     # `kind` pods may stuck in the `Terminating` phase for a few minutes; hence high test timeout | ||||||
|  | @ -21,15 +21,15 @@ class EndToEndTestCase(unittest.TestCase): | ||||||
|     @timeout_decorator.timeout(TEST_TIMEOUT_SEC) |     @timeout_decorator.timeout(TEST_TIMEOUT_SEC) | ||||||
|     def setUpClass(cls): |     def setUpClass(cls): | ||||||
|         ''' |         ''' | ||||||
|         Deploy operator to a "kind" cluster created by /e2e/run.sh using examples from /manifests. |         Deploy operator to a "kind" cluster created by run.sh using examples from /manifests. | ||||||
|         This operator deployment is to be shared among all tests. |         This operator deployment is to be shared among all tests. | ||||||
| 
 | 
 | ||||||
|         /e2e/run.sh deletes the 'kind' cluster after successful run along with all operator-related entities. |         run.sh deletes the 'kind' cluster after successful run along with all operator-related entities. | ||||||
|         In the case of test failure the cluster will stay to enable manual examination; |         In the case of test failure the cluster will stay to enable manual examination; | ||||||
|         next invocation of "make e2e-run" will re-create it. |         next invocation of "make test" will re-create it. | ||||||
|         ''' |         ''' | ||||||
| 
 | 
 | ||||||
|         # set a single k8s wrapper for all tests |         # set a single K8s wrapper for all tests | ||||||
|         k8s = cls.k8s = K8s() |         k8s = cls.k8s = K8s() | ||||||
| 
 | 
 | ||||||
|         # operator deploys pod service account there on start up |         # operator deploys pod service account there on start up | ||||||
|  |  | ||||||
|  | @ -84,7 +84,7 @@ type Config struct { | ||||||
| 	LogicalBackup | 	LogicalBackup | ||||||
| 
 | 
 | ||||||
| 	WatchedNamespace string            `name:"watched_namespace"`    // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to'
 | 	WatchedNamespace string            `name:"watched_namespace"`    // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to'
 | ||||||
| 	EtcdHost         string            `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use k8s as a DCS
 | 	EtcdHost         string            `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS
 | ||||||
| 	DockerImage      string            `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-11:1.5-p9"` | 	DockerImage      string            `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-11:1.5-p9"` | ||||||
| 	Sidecars         map[string]string `name:"sidecar_docker_images"` | 	Sidecars         map[string]string `name:"sidecar_docker_images"` | ||||||
| 	// default name `operator` enables backward compatibility with the older ServiceAccountName field
 | 	// default name `operator` enables backward compatibility with the older ServiceAccountName field
 | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| # Optionally re-build the operator binary beforehand to test local changes | # Optionally re-build the operator binary beforehand to test local changes | ||||||
| 
 | 
 | ||||||
| # Known limitations: | # Known limitations: | ||||||
| # 1) minikube provides a single node k8s cluster. That is, you will not be able test functions like pod | # 1) minikube provides a single node K8s cluster. That is, you will not be able test functions like pod | ||||||
| #    migration between multiple nodes locally | #    migration between multiple nodes locally | ||||||
| # 2) this script configures the operator via configmap, not the operator CRD | # 2) this script configures the operator via configmap, not the operator CRD | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,7 +10,6 @@ endif | ||||||
| 
 | 
 | ||||||
| LOCAL_BUILD_FLAGS ?= $(BUILD_FLAGS) | LOCAL_BUILD_FLAGS ?= $(BUILD_FLAGS) | ||||||
| LDFLAGS ?= -X=main.version=$(VERSION) | LDFLAGS ?= -X=main.version=$(VERSION) | ||||||
| DOCKERDIR = docker |  | ||||||
| 
 | 
 | ||||||
| IMAGE            ?= registry.opensource.zalan.do/acid/$(BINARY) | IMAGE            ?= registry.opensource.zalan.do/acid/$(BINARY) | ||||||
| VERSION          ?= $(shell git describe --tags --always --dirty) | VERSION          ?= $(shell git describe --tags --always --dirty) | ||||||
|  |  | ||||||
|  | @ -206,7 +206,7 @@ def create_postgresql(cluster, namespace, definition): | ||||||
|         r.raise_for_status() |         r.raise_for_status() | ||||||
|         return True |         return True | ||||||
|     except Exception as ex: |     except Exception as ex: | ||||||
|         logger.exception("K8S create request failed") |         logger.exception("K8s create request failed") | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -221,7 +221,7 @@ def apply_postgresql(cluster, namespace, resource_name, definition): | ||||||
|         r.raise_for_status() |         r.raise_for_status() | ||||||
|         return True |         return True | ||||||
|     except Exception as ex: |     except Exception as ex: | ||||||
|         logger.exception("K8S create request failed") |         logger.exception("K8s create request failed") | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -236,7 +236,7 @@ def remove_postgresql(cluster, namespace, resource_name): | ||||||
|         r.raise_for_status() |         r.raise_for_status() | ||||||
|         return True |         return True | ||||||
|     except Exception as ex: |     except Exception as ex: | ||||||
|         logger.exception("K8S delete request failed") |         logger.exception("K8s delete request failed") | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue