From 69bcadea36ed5299615d26572d8ce800e977fd04 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 18:11:50 +0100 Subject: [PATCH 01/22] Upgrade deployments, start upgrade init-containers --- portal/templates/app-lib-deployment.yaml | 2 +- portal/templates/frontend-deployment.yaml | 22 +++++++++------------- portal/templates/metadata-deployment.yaml | 23 +++++++++-------------- portal/templates/wiki-deployment.yaml | 2 +- 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/portal/templates/app-lib-deployment.yaml b/portal/templates/app-lib-deployment.yaml index 587f5fd..38bfe02 100644 --- a/portal/templates/app-lib-deployment.yaml +++ b/portal/templates/app-lib-deployment.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-app-library diff --git a/portal/templates/frontend-deployment.yaml b/portal/templates/frontend-deployment.yaml index bbcb21c..bc4ed1f 100644 --- a/portal/templates/frontend-deployment.yaml +++ b/portal/templates/frontend-deployment.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.frontend.name }} @@ -9,19 +9,15 @@ spec: labels: app: {{ .Values.frontend.name }} annotations: - pod.beta.kubernetes.io/init-containers: |- - [ - { - "name": "metadata-listener", - "image": "alpine", - "imagePullPolicy": "IfNotPresent", - "command": [ - "sh", "-c", - "for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1" - ] - } - ] spec: + initContainers: + - image: alpine + name: metadata-listener + command: + - sh + - -c + - | + for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 containers: - name: {{ .Chart.Name }} image: '{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}' diff --git a/portal/templates/metadata-deployment.yaml b/portal/templates/metadata-deployment.yaml index 67f0c10..f97703a 100644 --- a/portal/templates/metadata-deployment.yaml +++ b/portal/templates/metadata-deployment.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-metadata @@ -8,20 +8,15 @@ spec: metadata: labels: app: {{ .Release.Name }}-metadata - annotations: - pod.beta.kubernetes.io/init-containers: |- - [ - { - "name": "mysql-listener", - "image": "alpine", - "imagePullPolicy": "IfNotPresent", - "command": [ - "sh", "-c", - "for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-mysql 3306 && exit 0 || sleep 3; done; exit 1" - ] - } - ] spec: + initContainers: + - image: alpine + name: mysql-listener + command: + - sh + - -c + - | + for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 containers: - name: metadata image: '{{ .Values.metadata.image.repository }}:{{ .Values.metadata.image.tag }}' diff --git a/portal/templates/wiki-deployment.yaml b/portal/templates/wiki-deployment.yaml index 2e1f602..5914466 100644 --- a/portal/templates/wiki-deployment.yaml +++ b/portal/templates/wiki-deployment.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-wiki From 8c7dd24c05b409d06618788c79f38754356f6aa9 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 18:16:12 +0100 Subject: [PATCH 02/22] bump version --- portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/Chart.yaml b/portal/Chart.yaml index 85d1388..fad7329 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -1,4 +1,4 @@ apiVersion: v1 description: PhenoMeNal Portal name: portal -version: 2.3.1 +version: 2.4.0 From 8265bec0f23b7bcb41ed3a2fbc6129b6ab93b070 Mon Sep 17 00:00:00 2001 From: Luca Pireddu Date: Fri, 6 Mar 2020 18:35:24 +0100 Subject: [PATCH 03/22] Fix indentation --- portal/templates/frontend-deployment.yaml | 13 ++++++------- portal/templates/metadata-deployment.yaml | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/portal/templates/frontend-deployment.yaml b/portal/templates/frontend-deployment.yaml index bc4ed1f..c9be381 100644 --- a/portal/templates/frontend-deployment.yaml +++ b/portal/templates/frontend-deployment.yaml @@ -10,14 +10,13 @@ spec: app: {{ .Values.frontend.name }} annotations: spec: - initContainers: - - image: alpine - name: metadata-listener + initContainers: + - name: metadata-listener + image: alpine command: - - sh - - -c - - | - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 + - sh + - -c + - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 containers: - name: {{ .Chart.Name }} image: '{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}' diff --git a/portal/templates/metadata-deployment.yaml b/portal/templates/metadata-deployment.yaml index f97703a..3efe5d1 100644 --- a/portal/templates/metadata-deployment.yaml +++ b/portal/templates/metadata-deployment.yaml @@ -10,13 +10,12 @@ spec: app: {{ .Release.Name }}-metadata spec: initContainers: - - image: alpine - name: mysql-listener - command: - - sh - - -c - - | - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 + - name: mysql-listener + image: alpine + command: + - sh + - -c + - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 containers: - name: metadata image: '{{ .Values.metadata.image.repository }}:{{ .Values.metadata.image.tag }}' From 35a5a9436874670cfc1fe977a5ec393b83d33c8e Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 19:06:06 +0100 Subject: [PATCH 04/22] bump version --- portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/Chart.yaml b/portal/Chart.yaml index fad7329..43a75e9 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -1,4 +1,4 @@ apiVersion: v1 description: PhenoMeNal Portal name: portal -version: 2.4.0 +version: 2.4.1 From 8dc392776f147e3b466617ad0f715b385b2df7ed Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 20:04:41 +0100 Subject: [PATCH 05/22] bump mysql dependency version --- portal/requirements.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/requirements.yaml b/portal/requirements.yaml index 80996b2..201be4f 100644 --- a/portal/requirements.yaml +++ b/portal/requirements.yaml @@ -1,4 +1,4 @@ dependencies: - name: mysql - version: 0.2.8 + version: 1.6.2 repository: http://storage.googleapis.com/kubernetes-charts From abe13e9d9303640122df01a5b48300074954bc3a Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 20:06:46 +0100 Subject: [PATCH 06/22] bump version --- portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/Chart.yaml b/portal/Chart.yaml index 43a75e9..8b8bf43 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -1,4 +1,4 @@ apiVersion: v1 description: PhenoMeNal Portal name: portal -version: 2.4.1 +version: 2.4.2 From ed17436929883342f6af383b7447931652da3274 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 20:10:06 +0100 Subject: [PATCH 07/22] remove included mysql chart --- portal/Chart.yaml | 2 +- portal/charts/mysql-0.2.8.tgz | Bin 4662 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 portal/charts/mysql-0.2.8.tgz diff --git a/portal/Chart.yaml b/portal/Chart.yaml index 8b8bf43..37aaf4b 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -1,4 +1,4 @@ apiVersion: v1 description: PhenoMeNal Portal name: portal -version: 2.4.2 +version: 2.4.3 diff --git a/portal/charts/mysql-0.2.8.tgz b/portal/charts/mysql-0.2.8.tgz deleted file mode 100644 index 09b0ad310767c31e1fcdd51aa386fa11765ca94d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4662 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 From 69899359a473345289dd6ef30d32a38b7bac0d01 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 20:14:51 +0100 Subject: [PATCH 08/22] update included mysql chart --- portal/charts/mysql-1.6.2.tgz | Bin 0 -> 11063 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 portal/charts/mysql-1.6.2.tgz diff --git a/portal/charts/mysql-1.6.2.tgz b/portal/charts/mysql-1.6.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b84d1488c3d8c510347e6d10b165d49f128d9ec6 GIT binary patch literal 11063 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

`t&F17Ra6JlAEi8)BCX3FdG! z#_A*h6_POnAJfS9)Y*n=Yjq)aGftHQBUp6Gai_w3g3K950fbb(ddPDJ?~;(6G_)%p zH=YKR7r;m(!dI|Ub+L#-6-prm*lzc|qVB}G-lUp&;3l}yY9x{9E9{rK(n zc@nhTFAHE@nMB7!Q}Js=#p3JWh4e&W>^24wsGRvBAKs z62!o&t<(JkQ)_z_`XU*a;b#N;ozj|095rSPQj3@j~q> zr44hnPog?y2qcD%;Su42%_Ixa|x8ZcRTQP$(B8E8PkT$V;4tL+U+P1Kh-<5K=E=`&ibG0VB4G zJQ@V1`3=BegetWuzMF2LMZJrKI`1ph+GzYq^A86jJ+sT=*1!LI(sTtL<j(S zVT_eHn8Fk>BIQ&L9v+eadvRpF&gTGcsC$js&(T1WeI}_vG;loiQC-Y%W$Y`vj%8`> zVg?ww<8%NSA-Zqd91FPtzEM+Co?kvnPb8Mon z^?aKc1ap5<8l*4hB0ti;lQG8nGa$lfJ30gd1s-Bv>VmGq0_41SDv(|N?C+)FU z41lu0n8FxwbLppIYiXNlbMdRbV_9uqU=|=jrr4kD0fOJ#AM`$}ZN)rMKGS>!sZ(8w zug0dF`1jw8WfO&%eHDiOV7#!0*?b8V>y=3>5T{a*I$AdM#HUOPpLa4pc6EA>)PY1V ze=$+YJVG)jv&z#giy_MCO=3>YPRaoZOL%7UG{)7OI8)48QF+}i5S}Ri zO2UvRsW^mUAV@&sv*W;N0F-(99L6JDSwhu$M;z>fd?IGn%*>$r!h#bq+z!ySllFZ zP?0crikVY;X<08{o>4(u9An}H%^<*f^dyiF^2}_?^g;Y?BBMr{}SgHj=L-Yax>mxgyT>k}#LNNT02x^Si{z ztIzq>PCutA;m|*B^rbd0!G@hxrsi);VohEy4I9{XKso>M$Q_rUVN~-|bd5PoDAVV& z+96kwjRI>AuA_m(27QEPlKIxkeg<|fk2)Xty(yOeOUT(TEQc6x2 zM4A-2K*HozI*GWTlhim>JgIpQkCU5AC^)#f@u~wL!`&1!E1&1|;}kk@gS6nFxP@tu z{DHly5${35jkK9iCC5SO_EkBO!AxzINxB@lDXEj5K=2reE06Jz5R42WfmL2Bvl+^b zo_Qu*GQ;Glt7IVEF%A5g>D{PdiqiUy8w~qOYxODeu;hjPeqSmS1)!XySt2d{=o_0^q&#r#@U4573+8=x8S0|U9 zcCT~wvD>+n?>cAiPR}}5-H$(Yd#AmRz0>ov7?dl$z||0`4SdTaC@W(B=E(Ze;p08| z?-yU~8|p7-^hYJa>h^3L2sTsqU)gdz-aw+R90bR4HHKk;tQSGSl*hQD6Fy3R%&$H?35zR#tvGdbRP!kW^o^kyYL z;lO3HPzn&4!-EvPJv?;`AD|P7n01DS6BN{soL6-m)RXFVrn)m06Mt8;o!X%BP~`h<^l39fJUGbyXSL`0(PNyf(8j>K4*9~3t28DqS%p{CZ~ z>hjAt2C+tbXdeJ3WJw&SmfP?deIo*HLdx3CD4=WjkkY zs!Pfao}}SxJgaW^vfGA>%hO*a>HgCBeM#Gur4#j1$^ufVPm}Cbujd%W+1Z#>xZu!I6iY7^rJ7aXL zgIun`F=kk8hyew;a}vyTQp*6VUA2VSj!ND)K|!P}B4*E;)45V%RQh#KDTlv^cD1SKgJWPeE}SlN{rGmL?AAAAzT7?MhX3dp>aE0+uD x%Vspd>Fas7&?F_U@hn#$JC)x%7w_}){5(I;&$oR3UjP6A|Nq`vFQ@?Q0082njr#xq literal 0 HcmV?d00001 From dabf4480417b72d5568134f99cf95f14b15cced4 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 6 Mar 2020 20:42:18 +0100 Subject: [PATCH 09/22] Add selectors to deployments --- portal/templates/app-lib-deployment.yaml | 7 +++++-- portal/templates/frontend-deployment.yaml | 9 ++++++--- portal/templates/metadata-deployment.yaml | 7 +++++-- portal/templates/wiki-deployment.yaml | 5 ++++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/portal/templates/app-lib-deployment.yaml b/portal/templates/app-lib-deployment.yaml index 38bfe02..8e66b8f 100644 --- a/portal/templates/app-lib-deployment.yaml +++ b/portal/templates/app-lib-deployment.yaml @@ -4,7 +4,10 @@ metadata: name: {{ .Release.Name }}-app-library spec: replicas: {{ .Values.app_library.replicaCount }} - template: + selector: + matchLabels: + app: {{ .Release.Name }}-app-library + template: metadata: labels: app: {{ .Release.Name }}-app-library @@ -18,6 +21,6 @@ spec: - containerPort: {{ .Values.app_library.service.internalPort }} env: - name: "GIT_BRANCH" - value: {{ .Values.app_library.branch }} + value: {{ .Values.app_library.branch }} resources: {{ toYaml .Values.app_library.resources | indent 12 }} diff --git a/portal/templates/frontend-deployment.yaml b/portal/templates/frontend-deployment.yaml index c9be381..d654d98 100644 --- a/portal/templates/frontend-deployment.yaml +++ b/portal/templates/frontend-deployment.yaml @@ -4,7 +4,10 @@ metadata: name: {{ .Values.frontend.name }} spec: replicas: {{ .Values.replicaCount }} - template: + selector: + matchLabels: + app: {{ .Values.frontend.name }} + template: metadata: labels: app: {{ .Values.frontend.name }} @@ -13,7 +16,7 @@ spec: initContainers: - name: metadata-listener image: alpine - command: + command: - sh - -c - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 @@ -38,7 +41,7 @@ spec: - name: "TSI_PORTAL_URL" value: {{ .Values.tsi_portal_url }} - name: "AAP_URL" - value: {{ .Values.aap_url }} + value: {{ .Values.aap_url }} - name: "PORTAL_ANNOUNCEMENT" value: {{ .Values.portal_announcement }} - name: "CLOUD_DEPLOY_GIT_REPO" diff --git a/portal/templates/metadata-deployment.yaml b/portal/templates/metadata-deployment.yaml index 3efe5d1..6ad9b26 100644 --- a/portal/templates/metadata-deployment.yaml +++ b/portal/templates/metadata-deployment.yaml @@ -4,7 +4,10 @@ metadata: name: {{ .Release.Name }}-metadata spec: replicas: 1 - template: + selector: + matchLabels: + app: {{ .Release.Name }}-metadata + template: metadata: labels: app: {{ .Release.Name }}-metadata @@ -12,7 +15,7 @@ spec: initContainers: - name: mysql-listener image: alpine - command: + command: - sh - -c - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 diff --git a/portal/templates/wiki-deployment.yaml b/portal/templates/wiki-deployment.yaml index 5914466..fdbee9d 100644 --- a/portal/templates/wiki-deployment.yaml +++ b/portal/templates/wiki-deployment.yaml @@ -4,7 +4,10 @@ metadata: name: {{ .Release.Name }}-wiki spec: replicas: {{ .Values.wiki.replicaCount }} - template: + selector: + matchLabels: + app: {{ .Release.Name }}-wiki + template: metadata: labels: app: {{ .Release.Name }}-wiki From df9cad3e7d93df19d3c1e0fbca7ed05a13788d3d Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 7 Mar 2020 22:32:57 +0100 Subject: [PATCH 10/22] fix mysql listener --- portal/templates/metadata-deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/templates/metadata-deployment.yaml b/portal/templates/metadata-deployment.yaml index 6ad9b26..166b974 100644 --- a/portal/templates/metadata-deployment.yaml +++ b/portal/templates/metadata-deployment.yaml @@ -18,7 +18,7 @@ spec: command: - sh - -c - - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-metadata 8888 && exit 0 || sleep 3; done; exit 1 + - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-mysql 3306 && exit 0 || sleep 3; echo -n "." done; exit 1 containers: - name: metadata image: '{{ .Values.metadata.image.repository }}:{{ .Values.metadata.image.tag }}' From 9ba22255da273a130c7e98135b5a567aa5a6902d Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 7 Mar 2020 22:36:33 +0100 Subject: [PATCH 11/22] fix mysql listener --- portal/templates/metadata-deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/templates/metadata-deployment.yaml b/portal/templates/metadata-deployment.yaml index 166b974..c43a7c4 100644 --- a/portal/templates/metadata-deployment.yaml +++ b/portal/templates/metadata-deployment.yaml @@ -18,7 +18,7 @@ spec: command: - sh - -c - - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-mysql 3306 && exit 0 || sleep 3; echo -n "." done; exit 1 + - for i in $(seq 1 200); do nc -z -w3 {{ .Release.Name }}-mysql 3306 && exit 0 || sleep 3; echo -n "." ; done; exit 1 containers: - name: metadata image: '{{ .Values.metadata.image.repository }}:{{ .Values.metadata.image.tag }}' From d0ec78d4c0d896d669dcd450762cb5164ec780f8 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 7 Mar 2020 22:49:35 +0100 Subject: [PATCH 12/22] Temporarily pull only if not present --- portal/values.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/portal/values.yaml b/portal/values.yaml index 2b38092..aacb3ad 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -14,7 +14,8 @@ replicaCount: 1 tsi_portal_url: "https://api.portal.tsi.ebi.ac.uk/" aap_url: "https://api.aai.ebi.ac.uk/" cloud_deploy_git_repo: "https://github.com/phnmnl/cloud-deploy-kubenow.git" -imagePullPolicy: "Always" +#imagePullPolicy: "Always" +imagePullPolicy: "IfNotPresent" galaxy_url: "https://public.phenomenal-h2020.eu" galaxy_api_key: "" enable_https: "true" From 9db001f0ed7f31e03b5bae0e3649ece6e777fc38 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sun, 8 Mar 2020 10:53:17 +0100 Subject: [PATCH 13/22] start migrating to ingress --- .gitignore | 3 ++- portal/templates/frontend-ingress.yaml | 16 ++++++++++++++++ portal/templates/frontend-service.yaml | 1 - 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 portal/templates/frontend-ingress.yaml diff --git a/.gitignore b/.gitignore index 1f1025f..0d6891d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -.DS_Store \ No newline at end of file +.DS_Store +*~ diff --git a/portal/templates/frontend-ingress.yaml b/portal/templates/frontend-ingress.yaml new file mode 100644 index 0000000..c50064e --- /dev/null +++ b/portal/templates/frontend-ingress.yaml @@ -0,0 +1,16 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + labels: + app: docker-registry + name: {{ .Values.frontend.name }} +spec: + rules: + - host: portal.10.22.15.1.nip.io + http: + paths: + - backend: + serviceName: {{ .Values.frontend.name }} + servicePort: 5000 + path: / + \ No newline at end of file diff --git a/portal/templates/frontend-service.yaml b/portal/templates/frontend-service.yaml index 01d00ef..be6dbad 100644 --- a/portal/templates/frontend-service.yaml +++ b/portal/templates/frontend-service.yaml @@ -6,7 +6,6 @@ spec: type: {{ .Values.frontend.service.type }} ports: - name: {{ .Values.frontend.service.name }} - nodePort: {{ .Values.frontend.service.externalPort }} port: {{ .Values.frontend.service.internalPort }} selector: app: {{ .Values.frontend.name }} \ No newline at end of file From 279bb525d1b178db64f9c7610f0c6d1b04dbd97c Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sun, 8 Mar 2020 11:27:05 +0100 Subject: [PATCH 14/22] improve ingress --- portal/templates/NOTES.txt | 6 +++--- portal/templates/frontend-ingress.yaml | 6 ++---- portal/values.yaml | 5 +++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/portal/templates/NOTES.txt b/portal/templates/NOTES.txt index 2e1f8e8..a004824 100644 --- a/portal/templates/NOTES.txt +++ b/portal/templates/NOTES.txt @@ -3,13 +3,13 @@ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "fullname" . }}) export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT/login -{{- else if contains "LoadBalancer" .Values.service.type }} +{{- else if contains "LoadBalancer" .Values.frontend.service.type }} NOTE: It may take a few minutes for the LoadBalancer IP to be available. You can watch the status of by running 'kubectl get svc -w {{ template "fullname" . }}' export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo http://$SERVICE_IP:{{ .Values.service.externalPort }} -{{- else if contains "ClusterIP" .Values.service.type }} +{{- else if contains "ClusterIP" .Values.frontend.service.type }} export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "fullname" . }}" -o jsonpath="{.items[0].metadata.name}") echo "Visit http://127.0.0.1:8080 to use your application" - kubectl port-forward $POD_NAME 8080:{{ .Values.service.externalPort }} + kubectl port-forward $POD_NAME 8080:{{ .Values.frontend.service.externalPort }} {{- end }} diff --git a/portal/templates/frontend-ingress.yaml b/portal/templates/frontend-ingress.yaml index c50064e..70c3fee 100644 --- a/portal/templates/frontend-ingress.yaml +++ b/portal/templates/frontend-ingress.yaml @@ -1,16 +1,14 @@ apiVersion: extensions/v1beta1 kind: Ingress metadata: - labels: - app: docker-registry name: {{ .Values.frontend.name }} spec: rules: - - host: portal.10.22.15.1.nip.io + - host: {{ .Values.frontend.name }}.{{ .Values.mydomain }} http: paths: - backend: serviceName: {{ .Values.frontend.name }} - servicePort: 5000 + servicePort: 80 path: / \ No newline at end of file diff --git a/portal/values.yaml b/portal/values.yaml index aacb3ad..888c262 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -10,6 +10,7 @@ # # global settings +mydomain: "10.22.15.1.nip.io" replicaCount: 1 tsi_portal_url: "https://api.portal.tsi.ebi.ac.uk/" aap_url: "https://api.aai.ebi.ac.uk/" @@ -28,8 +29,8 @@ frontend: tag: latest service: name: http - type: NodePort - externalPort: 30767 + type: ClusterIP + externalPort: 80 internalPort: 80 resources: limits: From ab24edebab74750565318c63d101478a18d8c2db Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 14 Mar 2020 21:29:38 +0100 Subject: [PATCH 15/22] Set our domain --- portal/templates/frontend-ingress.yaml | 3 +-- portal/values.yaml | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/portal/templates/frontend-ingress.yaml b/portal/templates/frontend-ingress.yaml index 70c3fee..350a091 100644 --- a/portal/templates/frontend-ingress.yaml +++ b/portal/templates/frontend-ingress.yaml @@ -1,4 +1,4 @@ -apiVersion: extensions/v1beta1 +git apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Values.frontend.name }} @@ -11,4 +11,3 @@ spec: serviceName: {{ .Values.frontend.name }} servicePort: 80 path: / - \ No newline at end of file diff --git a/portal/values.yaml b/portal/values.yaml index 888c262..362b882 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -10,7 +10,8 @@ # # global settings -mydomain: "10.22.15.1.nip.io" +mydomain: "phenomenal-h2020.eu" + replicaCount: 1 tsi_portal_url: "https://api.portal.tsi.ebi.ac.uk/" aap_url: "https://api.aai.ebi.ac.uk/" From a8e132d55c066f2c72c80bbc3526800b63463bb7 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 10 Apr 2020 22:18:03 +0200 Subject: [PATCH 16/22] fix typo --- portal/templates/frontend-ingress.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/templates/frontend-ingress.yaml b/portal/templates/frontend-ingress.yaml index 350a091..d2093ea 100644 --- a/portal/templates/frontend-ingress.yaml +++ b/portal/templates/frontend-ingress.yaml @@ -1,4 +1,4 @@ -git apiVersion: extensions/v1beta1 +apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Values.frontend.name }} From 005b55aca4c1f0e5029e5f0daca876ae94b19e48 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Fri, 10 Apr 2020 22:26:49 +0200 Subject: [PATCH 17/22] fix portal name --- portal/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/values.yaml b/portal/values.yaml index 362b882..1018302 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -24,7 +24,7 @@ enable_https: "true" # frontend settings frontend: - name: phenomenal-portal + name: portal image: repository: container-registry.phenomenal-h2020.eu/phnmnl/phenomenal-portal tag: latest From 8e06560b4bcab7cebd65a44c63b869e4d8181e70 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 11 Apr 2020 15:11:23 +0200 Subject: [PATCH 18/22] Started TLS for ingress --- images/logo512x512.png | Bin 0 -> 86406 bytes portal/Chart.yaml | 9 ++++++++- portal/requirements.yaml | 4 ---- portal/templates/frontend-ingress.yaml | 10 ++++++++++ portal/templates/frontend-issuer.yaml | 12 ++++++++++++ portal/values.yaml | 16 +++++++++++++--- 6 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 images/logo512x512.png delete mode 100644 portal/requirements.yaml create mode 100644 portal/templates/frontend-issuer.yaml diff --git a/images/logo512x512.png b/images/logo512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..fe535de35b7916b58c71346fe98963fc621fb47b GIT binary patch literal 86406 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 Date: Sat, 11 Apr 2020 15:17:36 +0200 Subject: [PATCH 19/22] SOme more TLS work --- portal/templates/frontend-issuer.yaml | 22 +++++++++++++++------- portal/values.yaml | 4 ++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/portal/templates/frontend-issuer.yaml b/portal/templates/frontend-issuer.yaml index a95e20b..ee5640e 100644 --- a/portal/templates/frontend-issuer.yaml +++ b/portal/templates/frontend-issuer.yaml @@ -1,12 +1,20 @@ -apiVersion: certmanager.k8s.io/v1alpha1 +apiVersion: cert-manager.io/v1alpha2 kind: Issuer metadata: - name: letsencrypt-frontend + name: portal-tls-issuer # { { .Release.Name } }-issuer spec: acme: - server: https://portal.phenomenal-h2020.eu - email: sneumann@ipb-halle.de + # You must replace this email address with your own. + # Let's Encrypt will use this to contact you about expiring + # certificates, and issues related to your account. + email: {{ .Values.SiteAdminEmail }} +# server: https://acme-staging-v02.api.letsencrypt.org/directory + server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: - name: letsencrypt-frontend - http01: {} - + # Secret resource that will be used to store the account's private key. + name: {{ .Release.Name }}-acme-key + # Add a single challenge solver, HTTP01 using nginx + solvers: + - http01: + ingress: + class: nginx diff --git a/portal/values.yaml b/portal/values.yaml index 1b2ec80..23b6695 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -21,6 +21,7 @@ imagePullPolicy: "IfNotPresent" galaxy_url: "https://public.phenomenal-h2020.eu" galaxy_api_key: "" enable_https: "true" +SiteAdminEmail: "sneumann@ipb-halle.de" # frontend settings frontend: @@ -44,10 +45,9 @@ frontend: ingress: enabled: false annotations: - cert-manager.io/issuer: "letsencrypt-frontend" + cert-manager.io/issuer: "portal-tls-issuer" hosts: - host: portal.phenomenal-h2020.eu - tls: [] # - secretName: portal-cert # hosts: From 6754a932dc6c71b7fbfce52af8d6219dd487d14d Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 11 Apr 2020 15:26:01 +0200 Subject: [PATCH 20/22] Fix logo --- portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/Chart.yaml b/portal/Chart.yaml index 7627718..afcd4ab 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: PhenoMeNal Portal name: portal type: application -icon: https://msbi.ipb-halle.de/MetFragLogo232x128.png +icon: https://pbs.twimg.com/profile_images/662304401990750208/4g1r_5gs.png version: 2.4.3 dependencies: From cfcf1674dd629bb6560ada89527a3965e01f1dcb Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 11 Apr 2020 15:35:02 +0200 Subject: [PATCH 21/22] more work on TLS --- portal/templates/frontend-ingress.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/portal/templates/frontend-ingress.yaml b/portal/templates/frontend-ingress.yaml index ac0a5b8..5995059 100644 --- a/portal/templates/frontend-ingress.yaml +++ b/portal/templates/frontend-ingress.yaml @@ -1,7 +1,15 @@ +{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} apiVersion: extensions/v1beta1 +{{- end }} kind: Ingress metadata: name: {{ .Values.frontend.name }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} spec: {{- if .Values.ingress.tls }} tls: From 34efb9226d0b574ef093513c731d5c3eebbf0e3a Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Tue, 21 Apr 2020 22:08:56 +0200 Subject: [PATCH 22/22] Change cloud-deploy repo to Anders hotfix --- portal/Chart.yaml | 2 +- portal/values.yaml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/portal/Chart.yaml b/portal/Chart.yaml index afcd4ab..baff787 100644 --- a/portal/Chart.yaml +++ b/portal/Chart.yaml @@ -3,7 +3,7 @@ description: PhenoMeNal Portal name: portal type: application icon: https://pbs.twimg.com/profile_images/662304401990750208/4g1r_5gs.png -version: 2.4.3 +version: 2.4.4 dependencies: - name: mysql diff --git a/portal/values.yaml b/portal/values.yaml index 23b6695..6133b4d 100644 --- a/portal/values.yaml +++ b/portal/values.yaml @@ -15,7 +15,8 @@ mydomain: "phenomenal-h2020.eu" replicaCount: 1 tsi_portal_url: "https://api.portal.tsi.ebi.ac.uk/" aap_url: "https://api.aai.ebi.ac.uk/" -cloud_deploy_git_repo: "https://github.com/phnmnl/cloud-deploy-kubenow.git" +#cloud_deploy_git_repo: "https://github.com/phnmnl/cloud-deploy-kubenow.git" +cloud_deploy_git_repo: "https://github.com/phnmnl/cloud-deploy-kubenow-dalcotidine-20190625.git" #imagePullPolicy: "Always" imagePullPolicy: "IfNotPresent" galaxy_url: "https://public.phenomenal-h2020.eu"