run e2e in a separate Docker image, 1st commit
This commit is contained in:
		
							parent
							
								
									52e53f152f
								
							
						
					
					
						commit
						084167ff35
					
				|  | @ -1,9 +1,18 @@ | ||||||
| FROM python:3.5-slim | FROM ubuntu:18.04 | ||||||
| MAINTAINER Team ACID @ Zalando <team-acid@zalando.de> | MAINTAINER Team ACID @ Zalando <team-acid@zalando.de> | ||||||
| 
 | 
 | ||||||
| WORKDIR /e2e | WORKDIR /e2e | ||||||
| 
 | 
 | ||||||
| COPY requirements.txt ./ | COPY e2e/requirements.txt ./ | ||||||
| RUN pip install --no-cache-dir -r requirements.txt | COPY e2e/manifests ./manifests | ||||||
|  | COPY e2e/tests ./tests | ||||||
|  | COPY e2e/kind-config-kind-smoke-test-postgres-operator /root/.kube/config | ||||||
| 
 | 
 | ||||||
| COPY tests . | RUN apt-get update | ||||||
|  | RUN apt-get install -y python3 python3-pip curl \ | ||||||
|  |     && pip3 install --no-cache-dir -r requirements.txt | ||||||
|  | RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl \ | ||||||
|  |     && chmod +x ./kubectl \ | ||||||
|  |     && mv ./kubectl /usr/local/bin/kubectl | ||||||
|  | 
 | ||||||
|  | CMD ["python3", "-m", "unittest", "discover", "--start-directory", "tests", "-v"] | ||||||
|  | @ -0,0 +1,19 @@ | ||||||
|  | apiVersion: v1 | ||||||
|  | clusters: | ||||||
|  | - cluster: | ||||||
|  |     certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EVXdPVEUxTlRVeU1Gb1hEVEk1TURVd05qRTFOVFV5TUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWhZCjhTSVNNejlYb3VDMG9HQkRkNmVFdk5QQS9VZVJldHBucFRiUkNNU2tObUNkSFgzVWQ3SC9tTVdJcnVwdVhUeDQKWUV5dmJqWUt3YnJ5bUpTRU5xQ0h2RHE1SlV4TWE0dEZWRFBTNUZIaThiRUVHYW1UVUM3alo0Q2hma2hPN0ZSRQpKVW1xeDBLVDJ5SVVySDZTT203ajc3SDlOL0J5SGhhdnRJNXJsSlp3emdsbGw2eCtsV0RGbEExMndmYVVUaTdlCmpnd1Mzcjl4N0h3R1JQejVHNmhmaGlmSzZMVVhsNXAzYjB0RTZ1QVllNFBlWlNtQmJuS1UwdzAzQlJoYmpmTmIKSEdleUJIYm43RWhWZmJ4Y1dIV2RnaEMzV1dWRDdSa05NTXQvREtPbUdHR3Bab1RCeEpTSXR3UEFyMS9tUGVMRQp5VkxubjJmYzhDZ0dXT01SS0MwQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFEb2RRS1Nzd2NJa0NRMFVGUWNJRi9yNmtMQ2YKSjFHL3ZkQ1FkTW1taU9rcWRsMW1tQjAyL2d1UDZtL3AxbUltRmRmWjZJNGlPNGpwUCsvaGllMDB5aUMwMS84MgpLaUE2a292ckpMVzZnQ05rR2Nyb3hhdHRITklEYlF1TkVoZ3RJYWgxK2cxclo4eStTblU4b2pSRVFXYTZJUGJQClJKQjQyZjZ4dFFxZ1BJanRBT2EyeGpuMFdDNGpRTXNiSUx0M2Z0S2RLOTFmNG5BTFBmZGRSdyt6N3NxcWZNeFEKQU9UL3NycVo0eVJqT3d1Q2w4clBsTFVEUzBMTkRuM2FST0VDNVF6dm1nUElKY2k1ZWIrV1JGWEthblpjU2FXMwp6VFlVck9oTStSNEEyUGRBWWFSbm5qdnRGZ3JuY1cwRHVSb2tWUnFHL0Rvd2xHbzdZRUxQNEg4eDVHST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= | ||||||
|  |     server: https://172.17.0.3:6443 | ||||||
|  |   name: kind-smoke-test-postgres-operator | ||||||
|  | contexts: | ||||||
|  | - context: | ||||||
|  |     cluster: kind-smoke-test-postgres-operator | ||||||
|  |     user: kubernetes-admin | ||||||
|  |   name: kubernetes-admin@kind-smoke-test-postgres-operator | ||||||
|  | current-context: kubernetes-admin@kind-smoke-test-postgres-operator | ||||||
|  | kind: Config | ||||||
|  | preferences: {} | ||||||
|  | users: | ||||||
|  | - name: kubernetes-admin | ||||||
|  |   user: | ||||||
|  |     client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJWTVVRkRiKzc1c1l3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBMU1Ea3hOVFUxTWpCYUZ3MHlNREExTURneE5UVTFNakJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5OVkEvMFcrQmxqOENQcjYKZ1EvZUU0aWhMSnh3dlNuSEQ1VE1DYllRSFZFMTN5NmRiclRzTUhyU2duMlZBMmtaSGFEbmpPRXFieG0zMmt5aQowZmJhMzNZVm5BdGwrVmtyVzc2VW1USUFhb1RxaFNkRlpFczlrT3N5WUgweGluSXRMMExrWE9IeWwwVlVSUXVHCm94TVFxU2duaGpSMWJJVjdKbzYvYnhSbU42ZWJwb1FSRHN0QWk5Z2QramlHSU93Q05SWHVhM1B4Nm1DK04rVFoKTnZzRjNieHdIWURwTGo3aU1mNGUvRlM4MjQzVEU4eUo0Ymp1ejNyOHBsR2t4RkU0ZjZJbEtVQVpDK1dKN01KZAp2MDdOMDZVVFg3WlZxekE3R1l6QkROb2UrSmQ0S3JwcDFHbVdIWFgxaU9yRnhHNE9FSlFvbXE0c205VFhha25PCmlSVUQyUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFDMHdMSDRjTnBNeHlTQlRiVmlXYzd0Yk8rT2dyRlYzMmltNQpCa3pyMDBrd05nYmw5VFFUNFpkZDlHRnFTRVFpUDNXT2lWNjErMHpNdEpUcEthL0hITnBhNXg5MmhLc2FKZHdpCnErRm5TRisyVytIK0pnTy9tM0l6Z1VQK25kUVNNUXdwWmQ3bWQ0TnE0Wnh6VThrOTYwWWRMYlhHRXdTQTF5Ty8KN3RVQUJWWHVWdFFFaTQvQ1NSTXFjNndLT3NFNUU3QUNiYkU2MXhFTThsUzg5ZVhyaSs0aDZGenBpbkZWa1ZiRwpXaTAyYUV6cVJuTGFqV1NOZThuYnh2ZG1sRGhUZjFxYjkvWGJ0cWxIQWRMc1ZpdU5GT2Jxa3Yzb3FwSW5kQVNBClVRUDMxWXZ4VERPaEpaY3k2dkVyK2tqT2RpZjgrUytJa05BRnhzeVFPK0Vmc05zWUdvdz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= | ||||||
|  |     client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBbk5WQS8wVytCbGo4Q1ByNmdRL2VFNGloTEp4d3ZTbkhENVRNQ2JZUUhWRTEzeTZkCmJyVHNNSHJTZ24yVkEya1pIYURuak9FcWJ4bTMya3lpMGZiYTMzWVZuQXRsK1Zrclc3NlVtVElBYW9UcWhTZEYKWkVzOWtPc3lZSDB4aW5JdEwwTGtYT0h5bDBWVVJRdUdveE1RcVNnbmhqUjFiSVY3Sm82L2J4Um1ONmVicG9RUgpEc3RBaTlnZCtqaUdJT3dDTlJYdWEzUHg2bUMrTitUWk52c0YzYnh3SFlEcExqN2lNZjRlL0ZTODI0M1RFOHlKCjRianV6M3I4cGxHa3hGRTRmNklsS1VBWkMrV0o3TUpkdjA3TjA2VVRYN1pWcXpBN0dZekJETm9lK0pkNEtycHAKMUdtV0hYWDFpT3JGeEc0T0VKUW9tcTRzbTlUWGFrbk9pUlVEMlFJREFRQUJBb0lCQVFDTTM3R0dteXJab015agpkRzNYeUZ6K3h0ZWZydFpGMUdVT1JlWVJRd3l1aU9nUEZWd3N1UzcvVFJRU1NxT3pjSkF5NFBtY3ZoVFR2eEk2CmNHUkFuYkIwMFNrUUJkMFBZVjFsQjRlTEpETGplNGo5R2cxbXpYNzcwWWhxeTRuWWhqNjRHU252bExYSDAycWkKcW52QnQ3cGJkOG9vN3E0YlVMc1NJMThwYy9WdFB5U1lmd3h3OVpFTEdRb3ZNNklRTGNBb1RxdHdKYXZDZmlKQQpKYjZFaXdROUljOTB1MDJxaGE3RGw4K3lrWmRaSnJmNmYwditoZDUrdGFRK3RkNnZMd3RvUGZCa2licXhBNkx1CkxId2IvWnBSOGlKbXJFTjkwdFNMTFpMWVAzQkhkYUNNcXdJYllXUkRsS2p2cE1DUUp2NDgrdDhuMERNcUVzSFUKQi9XK2EwdEJBb0dCQU02b3VHTmhUMWpkTTlSenBITzg3enpiaHh2T0VWQ3BDN29zdGl1dmJnUnVGcFl2WloxTQpzTHY5dVBrTFlmanAxais3VzJvWncvQ25Zcjh0ZGVYTHVBKzNpcXk5bzZlblhjVEExM0wwTFNHY0tuZXAwenpxCmtqUmNGYmZEOXNpM2Jsc0FmT0hnSzY5MFByZmdINjF1bW5rYTVjWEhSc3dTcThBbVBHVU5EQWxsQW9HQkFNSkgKR1Z3WWhlN2hlbE5FQ1FNTWxENW90c01zWGJtWEFzbUFCZ2dxQXhRVkw0dmVUTk9XZHV2b2t1eDFVVWZhMVhqdgpUNEduYTZmeCtvMDUyRlNkU1FLTkEwNlhwVWhxZUNIcHU1ZmV3MHV0WVJhblhrS2MzRnZ5NEJlbEd3aHZUUVJRCnIxVmdlWWc0V3A2bTFuaHJwRDEydGh2WDE2Rm9uN0I4Skp2clVxTmxBb0dCQU1vcVk3ZFV5cnEwS3EvN01UWEgKN29JcWY5SERsVXpERXFYZWQ1Zmsxa3VmSnBsbFpKS3RJM2ZFamQrVU14TytMY25MRDNLTUloS2FyUTg0K2MwRApyZHd5UVljYlBhNFZITFlOc0xiVUNCS0pJMEpNOEVqM2NHK29aZGFQN2l3TXhmaGdVY3JsOGRhQ2NaaVB1RzJCCmRieGpnOFFuWGlybFdQOXdhRVN5cnNQQkFvR0FmRkxwYktFWTNHU1lWajZja2NIei8vZ2N0TXRvY3dLck91MWQKYnM0THlFZENkUHhlSjYwTER5NTNEekNJUWpaTkU2WDVPQncrYld3UmpWeXVEbi9Vbi9oRFhJRDR1VjNBNE5ybApQR3ZHaUdBOFdEWGt3VFlHWWlVTHVMWGtsY0k4QS8zcUpmV2w4RUUzNUgwWmxGZzE4MHRMZ0lmZ3FwNzhTZ0UzCm9EdTRWMjBDZ1lCNER0MDNoNG4zWGxPMW8rZlBKMGJETnZnb1JGZnZYYWk2YjBVa1VpcXNKclRTZVFrRVEzenUKNnFPRnBLNUgzRDlWc3lweWF0N3JJNmk4bFQzbHlsaUU1dGdzMEV5ektvSjJCYVFEOE5MRVJueHVyRHFkV2paaQp6NXNJSjU0c0N6NDJjTytQSkVTUjRCTlBZU1ZNUEhDZURWd1diL1QwNXdOU1NxemIrRWJQN1E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | ||||||
|  | @ -2,4 +2,3 @@ kubernetes | ||||||
| flake8 | flake8 | ||||||
| timeout_decorator | timeout_decorator | ||||||
| docker | docker | ||||||
| halo |  | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								e2e/run.sh
								
								
								
								
							
							
						
						
									
										10
									
								
								e2e/run.sh
								
								
								
								
							|  | @ -21,5 +21,13 @@ kubectl cluster-info | ||||||
| image=$(docker images --filter=reference="registry.opensource.zalan.do/acid/postgres-operator" --format "{{.Repository}}:{{.Tag}}"  | head -1) | image=$(docker images --filter=reference="registry.opensource.zalan.do/acid/postgres-operator" --format "{{.Repository}}:{{.Tag}}"  | head -1) | ||||||
| kind load docker-image ${image} --name ${cluster_name} | kind load docker-image ${image} --name ${cluster_name} | ||||||
| 
 | 
 | ||||||
| python3 -m unittest discover --start-directory e2e/tests/ -v && | cp -r ./manifests ./e2e/manifests | ||||||
|  | cp $KUBECONFIG ./e2e | ||||||
|  | d=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}:6443" ${cluster_name}-control-plane) | ||||||
|  | sed -i "s/server.*$/server: https:\/\/$d/g" e2e/kind-config-${cluster_name} | ||||||
|  | 
 | ||||||
|  | docker build --tag=postgres-operator-e2e-tests -f e2e/Dockerfile . && docker run postgres-operator-e2e-tests | ||||||
|  | #python3 -m unittest discover --start-directory e2e/tests/ -v && | ||||||
|  | 
 | ||||||
| kind delete cluster --name ${cluster_name} | kind delete cluster --name ${cluster_name} | ||||||
|  | rm -rf ./e2e/manifests ./e2e/kind-smoke-test-postgres-operator.yaml | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import timeout_decorator | ||||||
| import subprocess | import subprocess | ||||||
| import warnings | import warnings | ||||||
| import docker | import docker | ||||||
| from halo import Halo | #from halo import Halo | ||||||
| 
 | 
 | ||||||
| from kubernetes import client, config, utils | from kubernetes import client, config, utils | ||||||
| 
 | 
 | ||||||
|  | @ -42,8 +42,8 @@ class SmokeTestCase(unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|         # submit the most recent operator image built locally |         # submit the most recent operator image built locally | ||||||
|         # HACK assumes "images list" returns the most recent image at index 0 |         # HACK assumes "images list" returns the most recent image at index 0 | ||||||
|         docker_client = docker.from_env() |         # docker_client = docker.from_env() | ||||||
|         image = docker_client.images.list(name="registry.opensource.zalan.do/acid/postgres-operator")[0].tags[0] |         image = "registry.opensource.zalan.do/acid/postgres-operator:v1.1.0-67-g52e53f1-dirty" # docker_client.images.list(name="registry.opensource.zalan.do/acid/postgres-operator")[0].tags[0] | ||||||
|         body = { |         body = { | ||||||
|             "spec": { |             "spec": { | ||||||
|                 "template": { |                 "template": { | ||||||
|  | @ -114,12 +114,12 @@ class Utils: | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def wait_for_pod_start(k8s_api, pod_labels, retry_timeout_sec): |     def wait_for_pod_start(k8s_api, pod_labels, retry_timeout_sec): | ||||||
|         pod_phase = 'No pod running' |         pod_phase = 'No pod running' | ||||||
|         with Halo(text="Wait for the pod '{}' to start. Pod phase: {}".format(pod_labels, pod_phase), spinner='dots'): |         #with Halo(text="Wait for the pod '{}' to start. Pod phase: {}".format(pod_labels, pod_phase), spinner='dots'): | ||||||
|             while pod_phase != 'Running': |         while pod_phase != 'Running': | ||||||
|                 pods = k8s_api.core_v1.list_namespaced_pod('default', label_selector=pod_labels).items |             pods = k8s_api.core_v1.list_namespaced_pod('default', label_selector=pod_labels).items | ||||||
|                 if pods: |             if pods: | ||||||
|                     pod_phase = pods[0].status.phase |                 pod_phase = pods[0].status.phase | ||||||
|             time.sleep(retry_timeout_sec) |         time.sleep(retry_timeout_sec) | ||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def wait_for_pg_to_scale(k8s_api, number_of_instances, retry_timeout_sec): |     def wait_for_pg_to_scale(k8s_api, number_of_instances, retry_timeout_sec): | ||||||
|  | @ -133,9 +133,9 @@ class Utils: | ||||||
|                                                        "v1", "default", "postgresqls", "acid-minimal-cluster", body) |                                                        "v1", "default", "postgresqls", "acid-minimal-cluster", body) | ||||||
| 
 | 
 | ||||||
|         labels = 'version=acid-minimal-cluster' |         labels = 'version=acid-minimal-cluster' | ||||||
|         with Halo(text="Waiting for the cluster to scale to {} pods.".format(number_of_instances), spinner='dots'): |         #with Halo(text="Waiting for the cluster to scale to {} pods.".format(number_of_instances), spinner='dots'): | ||||||
|             while Utils.count_pods_with_label(k8s_api, labels) != number_of_instances: |         while Utils.count_pods_with_label(k8s_api, labels) != number_of_instances: | ||||||
|                 time.sleep(retry_timeout_sec) |             time.sleep(retry_timeout_sec) | ||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def count_pods_with_label(k8s_api, labels): |     def count_pods_with_label(k8s_api, labels): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue