Merge branch '2-add-helm-chart' into 'master'
Resolve "Add helm chart" Closes #2 See merge request openappstack/admin-frontend!2
This commit is contained in:
commit
95a054925f
19 changed files with 1355 additions and 6 deletions
2
.env
2
.env
|
@ -1,2 +0,0 @@
|
|||
REACT_APP_API_URL=https://oas-api.initdevelopment.com/api/v1
|
||||
EXTEND_ESLINT=true
|
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -13,6 +13,7 @@
|
|||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
|
@ -25,3 +26,9 @@ yarn-error.log*
|
|||
|
||||
.eslintcache
|
||||
cypress/videos/
|
||||
|
||||
# Helm dependencies
|
||||
deployment/helmchart/charts/
|
||||
|
||||
# Helm values
|
||||
deployment/helmchart/values-local.yaml
|
||||
|
|
|
@ -13,8 +13,8 @@ build-project:
|
|||
script:
|
||||
- echo "Building app"
|
||||
- yarn install
|
||||
# - echo "REACT_APP_API_URL=https://oas-api.initdevelopment.com/api/v1" > .env
|
||||
# - echo "EXTEND_ESLINT=true" >> .env
|
||||
- echo "REACT_APP_API_URL=/api/v1" > .env
|
||||
- echo "EXTEND_ESLINT=true" >> .env
|
||||
- yarn build
|
||||
- mv build web-build
|
||||
- echo "Build successful"
|
||||
|
|
23
deployment/helmchart/.helmignore
Normal file
23
deployment/helmchart/.helmignore
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
6
deployment/helmchart/Chart.lock
Normal file
6
deployment/helmchart/Chart.lock
Normal file
|
@ -0,0 +1,6 @@
|
|||
dependencies:
|
||||
- name: common
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 1.10.0
|
||||
digest: sha256:d6f283322d34efda54721ddd67aec935f1bea501c7b45dfbe89814aed21ae5dc
|
||||
generated: "2021-09-30T16:27:06.738339948+02:00"
|
25
deployment/helmchart/Chart.yaml
Normal file
25
deployment/helmchart/Chart.yaml
Normal file
|
@ -0,0 +1,25 @@
|
|||
annotations:
|
||||
category: Dashboard
|
||||
apiVersion: v2
|
||||
appVersion: 0.1.1
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
tags:
|
||||
- bitnami-common
|
||||
version: 1.x.x
|
||||
description: A Helm chart for deploying the Stackspin Dashboard to Kubernetes
|
||||
engine: gotpl
|
||||
home: https://open.greenhost.net/openappstack/dashboard-frontend/
|
||||
icon: https://open.greenhost.net/openappstack/dashboard-frontend/-/blob/master/public/assets/logo.svg
|
||||
keywords:
|
||||
- stackspin
|
||||
- dashboard
|
||||
maintainers:
|
||||
- email: info@openappstack.net
|
||||
name: Stackspin
|
||||
name: stackspin-dashboard
|
||||
sources:
|
||||
- https://open.greenhost.net/openappstack/dashboard-frontend/
|
||||
- https://open.greenhost.net/openappstack/dashboard-backend/
|
||||
version: 0.1.0
|
134
deployment/helmchart/templates/_helpers.tpl
Normal file
134
deployment/helmchart/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,134 @@
|
|||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "dashboard.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
{{ default (include "common.names.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the proper container image registry secret names
|
||||
*/}}
|
||||
{{- define "dashboard.imagePullSecrets" -}}
|
||||
{{ include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return true if a secret object for backend should be created
|
||||
*/}}
|
||||
{{- define "backend.createSecret" -}}
|
||||
{{- if or (not .Values.backend.existingSecret) (and (not .Values.backend.smtp.existingSecret) .Values.backend.smtp.password .Values.backend.smtp.enabled) }}
|
||||
{{- true -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the backend secret name
|
||||
*/}}
|
||||
{{- define "backend.secretName" -}}
|
||||
{{- if .Values.backend.existingSecret }}
|
||||
{{- printf "%s" .Values.backend.existingSecret -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-backend" (include "common.names.fullname" .) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the backend SMTP secret name
|
||||
*/}}
|
||||
{{- define "backend.smtp.secretName" -}}
|
||||
{{- if .Values.backend.smtp.existingSecret }}
|
||||
{{- printf "%s" .Values.backend.smtp.existingSecret -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-backend" (include "common.names.fullname" .) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return true if backend SMTP uses password authentication
|
||||
*/}}
|
||||
{{- define "backend.smtp.password.enabled" -}}
|
||||
{{- if and (or .Values.backend.smtp.password .Values.backend.smtp.existingSecret) .Values.backend.smtp.enabled }}
|
||||
{{- true -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Get the user defined LoadBalancerIP for this release
|
||||
Note, returns 127.0.0.1 if using ClusterIP.
|
||||
*/}}
|
||||
{{- define "frontend.serviceIP" -}}
|
||||
{{- if eq .Values.frontend.service.type "ClusterIP" -}}
|
||||
127.0.0.1
|
||||
{{- else -}}
|
||||
{{- .Values.frontend.service.loadBalancerIP | default "" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Gets the host to be used for this application.
|
||||
If not using ClusterIP, or if a host or LoadBalancerIP is not defined, the value will be empty
|
||||
*/}}
|
||||
{{- define "frontend.host" -}}
|
||||
{{- $host := .Values.frontend.host | default "" -}}
|
||||
{{- default (include "frontend.serviceIP" .) $host -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Service name for the backend service
|
||||
*/}}
|
||||
{{- define "backend.serviceName" -}}
|
||||
{{ include "common.names.fullname" . }}-backend
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Service name for the frontend service
|
||||
*/}}
|
||||
{{- define "frontend.serviceName" -}}
|
||||
{{ include "common.names.fullname" . }}-frontend
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Get the user defined LoadBalancerIP for this release
|
||||
Note, returns 127.0.0.1 if using ClusterIP.
|
||||
*/}}
|
||||
{{- define "backend.serviceIP" -}}
|
||||
{{- if eq .Values.backend.service.type "ClusterIP" -}}
|
||||
127.0.0.1
|
||||
{{- else -}}
|
||||
{{- .Values.backend.service.loadBalancerIP | default "" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Gets the host to be used for this application.
|
||||
If not using ClusterIP, or if a host or LoadBalancerIP is not defined, the value will be empty
|
||||
*/}}
|
||||
{{- define "backend.host" -}}
|
||||
{{- $host := .Values.backend.host | default "" -}}
|
||||
{{- default (include "backend.serviceIP" .) $host -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the proper frontend image name
|
||||
*/}}
|
||||
{{- define "frontend.image" -}}
|
||||
{{ include "common.images.image" (dict "imageRoot" .Values.frontend.image "global" .Values.global) }}
|
||||
{{- end -}}
|
||||
{{/*
|
||||
Return the proper backend image name
|
||||
*/}}
|
||||
{{- define "backend.image" -}}
|
||||
{{ include "common.images.image" (dict "imageRoot" .Values.backend.image "global" .Values.global) }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the proper Storage Class
|
||||
*/}}
|
||||
{{- define "dashboard.storageClass" -}}
|
||||
{{- include "common.storage.class" (dict "persistence" .Values.persistence "global" .Values.global) -}}
|
||||
{{- end -}}
|
42
deployment/helmchart/templates/backend-service.yaml
Normal file
42
deployment/helmchart/templates/backend-service.yaml
Normal file
|
@ -0,0 +1,42 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "backend.serviceName" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.backend.service.annotations .Values.commonAnnotations}}
|
||||
annotations:
|
||||
{{- if .Values.backend.service.annotations }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.backend.service.annotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
type: {{ .Values.backend.service.type }}
|
||||
{{- if (or (eq .Values.backend.service.type "LoadBalancer") (eq .Values.backend.service.type "NodePort")) }}
|
||||
externalTrafficPolicy: {{ .Values.backend.service.externalTrafficPolicy | quote }}
|
||||
{{- end }}
|
||||
{{- if (and (eq .Values.backend.service.type "LoadBalancer") (not (empty .Values.backend.service.loadBalancerIP))) }}
|
||||
loadBalancerIP: {{ .Values.backend.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if (and (eq .Values.backend.service.type "LoadBalancer") .Values.backend.service.loadBalancerSourceRanges) }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.backend.service.loadBalancerSourceRanges | nindent 4 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.backend.service.port }}
|
||||
targetPort: backend-http
|
||||
{{- if (and (or (eq .Values.backend.service.type "NodePort") (eq .Values.backend.service.type "LoadBalancer")) (not (empty .Values.backend.service.nodePorts.http))) }}
|
||||
nodePort: {{ .Values.backend.service.nodePorts.http }}
|
||||
{{- else if eq .Values.backend.service.type "ClusterIP" }}
|
||||
nodePort: null
|
||||
{{- end }}
|
||||
{{- if .Values.backend.service.extraPorts }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.backend.service.extraPorts "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
|
31
deployment/helmchart/templates/configmaps.yaml
Normal file
31
deployment/helmchart/templates/configmaps.yaml
Normal file
|
@ -0,0 +1,31 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "common.names.fullname" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
data:
|
||||
SECRET_KEY: {{ .Values.backend.secretKey }}
|
||||
FLASK_APP: app.py
|
||||
FLASK_ENV: {{ .Values.backend.flaskEnv }}
|
||||
# Probably needed in the future:
|
||||
# ADMIN_BACKEND_USERNAME: {{ .Values.backend.username | quote }}
|
||||
# ADMIN_BACKEND_EMAIL: {{ .Values.backend.email | quote }}
|
||||
# {{- if .Values.backend.smtp.enabled }}
|
||||
# ADMIN_BACKEND_SMTP_HOST: {{ .Values.backend.smtp.host | quote }}
|
||||
# ADMIN_BACKEND_SMTP_PORT: {{ .Values.backend.smtp.port | quote }}
|
||||
# {{- if .Values.backend.smtp.user }}
|
||||
# ADMIN_BACKEND_SMTP_USER: {{ .Values.backend.smtp.user | quote }}
|
||||
# {{- end }}
|
||||
# {{- if .Values.backend.smtp.protocol }}
|
||||
# ADMIN_BACKEND_SMTP_PROTOCOL: {{ .Values.backend.smtp.protocol | quote }}
|
||||
# {{- end }}
|
||||
# {{- if .Values.backend.smtp.auth }}
|
||||
# ADMIN_BACKEND_SMTP_AUTH: {{ .Values.backend.smtp.auth | quote }}
|
||||
# {{- end }}
|
||||
# {{- end }}
|
199
deployment/helmchart/templates/deployment.yaml
Normal file
199
deployment/helmchart/templates/deployment.yaml
Normal file
|
@ -0,0 +1,199 @@
|
|||
apiVersion: {{ template "common.capabilities.deployment.apiVersion" . }}
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "common.names.fullname" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
component: dashboard
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
|
||||
component: dashboard
|
||||
{{- if .Values.updateStrategy }}
|
||||
strategy: {{- toYaml .Values.updateStrategy | nindent 4 }}
|
||||
{{- end }}
|
||||
template:
|
||||
metadata:
|
||||
labels: {{- include "common.labels.standard" . | nindent 8 }}
|
||||
component: dashboard
|
||||
{{- if .Values.podLabels }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.podAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- include "dashboard.imagePullSecrets" . | nindent 6 }}
|
||||
{{- if .Values.hostAliases }}
|
||||
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.affinity }}
|
||||
affinity: {{- include "common.tplvalues.render" (dict "value" .Values.affinity "context" $) | nindent 8 }}
|
||||
{{- else }}
|
||||
affinity:
|
||||
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "context" $) | nindent 10 }}
|
||||
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "context" $) | nindent 10 }}
|
||||
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- if .Values.nodeSelector }}
|
||||
nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.tolerations }}
|
||||
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "dashboard.serviceAccountName" . }}
|
||||
securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
initContainers:
|
||||
{{- if .Values.initContainers }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: frontend
|
||||
securityContext: {{- toYaml .Values.frontend.containerSecurityContext | nindent 12 }}
|
||||
image: {{ template "frontend.image" . }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
|
||||
{{- if .Values.frontend.command }}
|
||||
command: {{- include "common.tplvalues.render" (dict "value" .Values.frontend.command "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.frontend.args }}
|
||||
args: {{- include "common.tplvalues.render" (dict "value" .Values.frontend.args "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
env:
|
||||
{{- if .Values.frontend.extraEnvVars }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.frontend.extraEnvVars "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
{{- if .Values.frontend.extraEnvVarsCM }}
|
||||
- configMapRef:
|
||||
name: {{ .Values.frontend.extraEnvVarsCM }}
|
||||
{{- end }}
|
||||
{{- if .Values.frontend.extraEnvVarsSecret }}
|
||||
- secretRef:
|
||||
name: {{ .Values.frontend.extraEnvVarsSecret }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: frontend-http
|
||||
containerPort: 80
|
||||
protocol: TCP
|
||||
{{- if .Values.frontend.livenessProbe.enabled }}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: frontend-http
|
||||
initialDelaySeconds: {{ .Values.frontend.livenessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.frontend.livenessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.frontend.livenessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.frontend.livenessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.frontend.livenessProbe.failureThreshold }}
|
||||
{{- else if .Values.frontend.customLivenessProbe }}
|
||||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.frontend.customLivenessProbe "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.frontend.readinessProbe.enabled }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: frontend-http
|
||||
initialDelaySeconds: {{ .Values.frontend.readinessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.frontend.readinessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.frontend.readinessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.frontend.readinessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.frontend.readinessProbe.failureThreshold }}
|
||||
{{- else if .Values.frontend.customReadinessProbe }}
|
||||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.frontend.customReadinessProbe "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
{{- if .Values.frontend.extraVolumeMounts }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.frontend.extraVolumeMounts "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.frontend.resources }}
|
||||
resources: {{- toYaml .Values.frontend.resources | nindent 12 }}
|
||||
{{- end }}
|
||||
- name: backend
|
||||
securityContext: {{- toYaml .Values.backend.containerSecurityContext | nindent 12 }}
|
||||
image: {{ template "backend.image" . }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
|
||||
{{- if .Values.backend.command }}
|
||||
command: {{- include "common.tplvalues.render" (dict "value" .Values.backend.command "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backend.args }}
|
||||
args: {{- include "common.tplvalues.render" (dict "value" .Values.backend.args "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: ADMIN_PANEL_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "backend.secretName" . }}
|
||||
key: backend-password
|
||||
{{- if (include "backend.smtp.password.enabled" .) }}
|
||||
- name: ADMIN_PANEL_SMTP_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "backend.smtp.secretName" . }}
|
||||
key: smtp-password
|
||||
{{- end }}
|
||||
{{- if .Values.backend.extraEnvVars }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.backend.extraEnvVars "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
{{- if .Values.backend.extraEnvVarsCM }}
|
||||
- configMapRef:
|
||||
name: {{ .Values.backend.extraEnvVarsCM }}
|
||||
{{- end }}
|
||||
{{- if .Values.backend.extraEnvVarsSecret }}
|
||||
- secretRef:
|
||||
name: {{ .Values.backend.extraEnvVarsSecret }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: backend-http
|
||||
containerPort: 5000
|
||||
protocol: TCP
|
||||
{{- if .Values.backend.livenessProbe.enabled }}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: backend-http
|
||||
initialDelaySeconds: {{ .Values.backend.livenessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.backend.livenessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.backend.livenessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.backend.livenessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.backend.livenessProbe.failureThreshold }}
|
||||
{{- else if .Values.backend.customLivenessProbe }}
|
||||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.backend.customLivenessProbe "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backend.readinessProbe.enabled }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: backend-http
|
||||
initialDelaySeconds: {{ .Values.backend.readinessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.backend.readinessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.backend.readinessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.backend.readinessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.backend.readinessProbe.failureThreshold }}
|
||||
{{- else if .Values.backend.customReadinessProbe }}
|
||||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.backend.customReadinessProbe "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
{{- if .Values.backend.extraVolumeMounts }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.backend.extraVolumeMounts "context" $) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.backend.resources }}
|
||||
resources: {{- toYaml .Values.backend.resources | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.sidecars }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.sidecars "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
{{- if .Values.extraVolumes }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.extraVolumes "context" $) | nindent 8 }}
|
||||
{{- end }}
|
42
deployment/helmchart/templates/frontend-service.yaml
Normal file
42
deployment/helmchart/templates/frontend-service.yaml
Normal file
|
@ -0,0 +1,42 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "frontend.serviceName" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.frontend.service.annotations .Values.commonAnnotations}}
|
||||
annotations:
|
||||
{{- if .Values.frontend.service.annotations }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.frontend.service.annotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
type: {{ .Values.frontend.service.type }}
|
||||
{{- if (or (eq .Values.frontend.service.type "LoadBalancer") (eq .Values.frontend.service.type "NodePort")) }}
|
||||
externalTrafficPolicy: {{ .Values.frontend.service.externalTrafficPolicy | quote }}
|
||||
{{- end }}
|
||||
{{- if (and (eq .Values.frontend.service.type "LoadBalancer") (not (empty .Values.frontend.service.loadBalancerIP))) }}
|
||||
loadBalancerIP: {{ .Values.frontend.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if (and (eq .Values.frontend.service.type "LoadBalancer") .Values.frontend.service.loadBalancerSourceRanges) }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.frontend.service.loadBalancerSourceRanges | nindent 4 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.frontend.service.port }}
|
||||
targetPort: frontend-http
|
||||
{{- if (and (or (eq .Values.frontend.service.type "NodePort") (eq .Values.frontend.service.type "LoadBalancer")) (not (empty .Values.frontend.service.nodePorts.http))) }}
|
||||
nodePort: {{ .Values.frontend.service.nodePorts.http }}
|
||||
{{- else if eq .Values.frontend.service.type "ClusterIP" }}
|
||||
nodePort: null
|
||||
{{- end }}
|
||||
{{- if .Values.frontend.service.extraPorts }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.frontend.service.extraPorts "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
|
66
deployment/helmchart/templates/ingress.yaml
Normal file
66
deployment/helmchart/templates/ingress.yaml
Normal file
|
@ -0,0 +1,66 @@
|
|||
{{- if .Values.ingress.enabled -}}
|
||||
apiVersion: {{ template "common.capabilities.ingress.apiVersion" . }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ template "common.names.fullname" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.ingress.annotations .Values.ingress.certManager .Values.commonAnnotations }}
|
||||
annotations:
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.annotations }}
|
||||
{{- toYaml .Values.ingress.annotations | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.certManager }}
|
||||
kubernetes.io/tls-acme: "true"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if or .Values.ingress.tls .Values.ingress.extraTls }}
|
||||
tls:
|
||||
{{- if .Values.ingress.tls }}
|
||||
- hosts:
|
||||
- {{ .Values.ingress.hostname }}
|
||||
secretName: {{ printf "%s-tls" .Values.ingress.hostname }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.extraTls }}
|
||||
{{- toYaml .Values.ingress.extraTls | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- if .Values.ingress.hostname }}
|
||||
- host: {{ .Values.ingress.hostname }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ .Values.ingress.path }}
|
||||
{{- if eq "true" (include "common.ingress.supportsPathType" .) }}
|
||||
pathType: {{ .Values.ingress.pathType }}
|
||||
{{- end }}
|
||||
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "frontend.serviceName" .) "servicePort" "frontend-http" "context" $) | nindent 14 }}
|
||||
# Forward API calls to the back-end container
|
||||
- path: {{ .Values.ingress.path }}api/v1
|
||||
{{- if eq "true" (include "common.ingress.supportsPathType" .) }}
|
||||
pathType: {{ .Values.ingress.pathType }}
|
||||
{{- end }}
|
||||
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "backend.serviceName" .) "servicePort" "backend-http" "context" $) | nindent 14 }}
|
||||
{{- end }}
|
||||
{{- range .Values.ingress.extraHosts }}
|
||||
- host: {{ .name }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ default "/" .path }}
|
||||
{{- if eq "true" (include "common.ingress.supportsPathType" $) }}
|
||||
pathType: {{ default "ImplementationSpecific" .pathType }}
|
||||
{{- end }}
|
||||
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "frontend.serviceName" $) "servicePort" "frontend-http" "context" $) | nindent 14 }}
|
||||
- path: {{ default "/" .path }}api/v1
|
||||
{{- if eq "true" (include "common.ingress.supportsPathType" $) }}
|
||||
pathType: {{ default "ImplementationSpecific" .pathType }}
|
||||
{{- end }}
|
||||
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "backend.serviceName" .) "servicePort" "backend-http" "context" $) | nindent 14 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
24
deployment/helmchart/templates/pvc.yaml
Normal file
24
deployment/helmchart/templates/pvc.yaml
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Disabled by default because the current dashboard does not need persistence
|
||||
{{- if and (include "frontend.host" .) .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "common.names.fullname" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.size | quote }}
|
||||
{{ include "dashboard.storageClass" . }}
|
||||
{{- if .Values.persistence.selector }}
|
||||
selector: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.selector "context" $) | nindent 4 }}
|
||||
{{- end -}}
|
||||
{{- end }}
|
23
deployment/helmchart/templates/secrets-admin-panel.yaml
Normal file
23
deployment/helmchart/templates/secrets-admin-panel.yaml
Normal file
|
@ -0,0 +1,23 @@
|
|||
{{- if (include "backend.createSecret" .) }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "backend.secretName" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
type: Opaque
|
||||
data:
|
||||
{{- if and (.Values.backend.password) (not .Values.backend.existingSecret) }}
|
||||
backend-password: {{ .Values.backend.password | b64enc | quote }}
|
||||
{{- else if not .Values.backend.existingSecret }}
|
||||
backend-password: {{ randAlphaNum 10 | b64enc | quote }}
|
||||
{{- end }}
|
||||
{{- if and (.Values.backend.smtp.password) (.Values.backend.smtp.enabled) (not .Values.backend.smtp.existingSecret) }}
|
||||
smtp-password: {{ .Values.backend.smtp.password | b64enc | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
19
deployment/helmchart/templates/serviceaccount.yaml
Normal file
19
deployment/helmchart/templates/serviceaccount.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "dashboard.serviceAccountName" . }}
|
||||
labels: {{- include "common.labels.standard" . | nindent 4 }}
|
||||
{{- if .Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.serviceAccount.annotations .Values.commonAnnotations }}
|
||||
annotations:
|
||||
{{- if .Values.serviceAccount.annotations }}
|
||||
{{- toYaml .Values.serviceAccount.annotations | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.commonAnnotations }}
|
||||
{{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
19
deployment/helmchart/templates/tls-secrets.yaml
Normal file
19
deployment/helmchart/templates/tls-secrets.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
{{- if .Values.ingress.enabled }}
|
||||
{{- range .Values.ingress.secrets }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .name }}
|
||||
labels: {{- include "common.labels.standard" $ | nindent 4 }}
|
||||
{{- if $.Values.commonLabels }}
|
||||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if $.Values.commonAnnotations }}
|
||||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
|
||||
{{- end }}
|
||||
type: kubernetes.io/tls
|
||||
data:
|
||||
tls.crt: {{ .certificate | b64enc }}
|
||||
tls.key: {{ .key | b64enc }}
|
||||
{{- end }}
|
||||
{{- end }}
|
12
deployment/helmchart/values-local.yaml.example
Normal file
12
deployment/helmchart/values-local.yaml.example
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Values you will likely want to override. See values.yaml for their meanings
|
||||
|
||||
frontend:
|
||||
host: dashboard.oas.example.com
|
||||
|
||||
backend:
|
||||
secretKey: My random secret key
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
certManager: true
|
||||
hostname: dashboard.oas.example.com
|
679
deployment/helmchart/values.yaml
Normal file
679
deployment/helmchart/values.yaml
Normal file
|
@ -0,0 +1,679 @@
|
|||
## @section Global parameters
|
||||
## Global container image parameters
|
||||
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
|
||||
## Current available global container image parameters: imageRegistry, imagePullSecrets and storageClass
|
||||
|
||||
## @param global.imageRegistry Global container image registry
|
||||
## @param global.imagePullSecrets Global container registry secret names as an array
|
||||
## @param global.storageClass Global StorageClass for Persistent Volume(s)
|
||||
##
|
||||
global:
|
||||
imageRegistry: ""
|
||||
## E.g.
|
||||
## imagePullSecrets:
|
||||
## - myRegistryKeySecretName
|
||||
##
|
||||
imagePullSecrets: []
|
||||
storageClass: ""
|
||||
|
||||
## @section Common parameters
|
||||
|
||||
## @param kubeVersion Force target Kubernetes version (using Helm capabilities if not set)
|
||||
##
|
||||
kubeVersion: ""
|
||||
## @param nameOverride String to partially override dashboard.fullname template (will maintain the release name)
|
||||
##
|
||||
nameOverride: ""
|
||||
## @param fullnameOverride String to fully override dashboard.fullname template
|
||||
##
|
||||
fullnameOverride: ""
|
||||
## @param commonLabels Labels to be added to all deployed resources
|
||||
##
|
||||
commonLabels: {}
|
||||
## @param commonAnnotations Annotations to be added to all deployed resources
|
||||
##
|
||||
commonAnnotations: {}
|
||||
|
||||
|
||||
|
||||
## @section Stackspin parameters
|
||||
|
||||
## @param imagePullSecrets Specify docker-registry secret names as an array
|
||||
##
|
||||
image:
|
||||
imagePullSecrets: []
|
||||
|
||||
## Admin frontend configuration parameters
|
||||
## ref: https://open.greenhost.net/openappstack/dashboard-frontend
|
||||
##
|
||||
frontend:
|
||||
## Admin frontend image version
|
||||
## ref: https://hub.docker.com/r/bitnami/frontend/tags/
|
||||
## @param image.registry Stackspin image registry
|
||||
## @param image.repository Stackspin image repository
|
||||
## @param image.tag Stackspin image tag
|
||||
## @param image.pullPolicy Stackspin image pull policy
|
||||
## @param image.pullSecrets Stackspin image pull secrets
|
||||
## @param image.debug Specify if debug logs should be enabled
|
||||
##
|
||||
image:
|
||||
registry: open.greenhost.net:4567
|
||||
repository: openappstack/admin-frontend/admin-frontend
|
||||
tag: 0.1.1
|
||||
## Specify a imagePullPolicy
|
||||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
pullPolicy: IfNotPresent
|
||||
## Optionally specify an array of imagePullSecrets.
|
||||
## Secrets must be manually created in the namespace.
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||
## e.g:
|
||||
## pullSecrets:
|
||||
## - myRegistryKeySecretName
|
||||
##
|
||||
pullSecrets: []
|
||||
## @section Service parameters
|
||||
|
||||
## Kubernetes service configuration. For minikube, set this to NodePort, elsewhere use LoadBalancer or ClusterIP
|
||||
##
|
||||
service:
|
||||
## @param service.type Kubernetes Service type
|
||||
##
|
||||
type: ClusterIP
|
||||
## @param service.port Service HTTP port
|
||||
##
|
||||
port: 80
|
||||
## @param service.nodePort Node Ports to expose
|
||||
##
|
||||
nodePort: ""
|
||||
## @param service.loadBalancerIP Use loadBalancerIP to request a specific static IP
|
||||
##
|
||||
loadBalancerIP: ""
|
||||
## @param service.externalTrafficPolicy Enable client source IP preservation
|
||||
## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
|
||||
##
|
||||
externalTrafficPolicy: Cluster
|
||||
## @param service.annotations Service annotations
|
||||
##
|
||||
annotations: {}
|
||||
## @param service.loadBalancerSourceRanges Limits which cidr blocks can connect to service's load balancer
|
||||
## Only valid if service.type: LoadBalancer
|
||||
##
|
||||
loadBalancerSourceRanges: []
|
||||
## @param service.extraPorts Extra ports to expose (normally used with the `sidecar` value)
|
||||
##
|
||||
extraPorts: []
|
||||
## @param service.nodePorts.http Kubernetes http node port
|
||||
## Example:
|
||||
## nodePorts:
|
||||
## http: <to set explicitly, choose port between 30000-32767>
|
||||
##
|
||||
nodePorts:
|
||||
http: ""
|
||||
## @param frontend.extendEslint Whether to read .eslint.json rules
|
||||
extendEslint: false
|
||||
## @param frontend.host Stackspin host to create application URLs (include the port if =/= 80)
|
||||
##
|
||||
host: ""
|
||||
## @param frontend.command Custom command to override image cmd
|
||||
##
|
||||
command: []
|
||||
## @param frontend.args Custom args for the custom command
|
||||
##
|
||||
args: []
|
||||
## @param frontend.containerSecurityContext Container security context specification
|
||||
## Example:
|
||||
## capabilities:
|
||||
## drop:
|
||||
## - ALL
|
||||
## readOnlyRootFilesystem: true
|
||||
## runAsNonRoot: true
|
||||
## runAsUser: 1000
|
||||
##
|
||||
containerSecurityContext: {}
|
||||
## Stackspin container's resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
## We usually recommend not to specify default resources and to leave this as a conscious
|
||||
## choice for the user. This also increases chances charts run on environments with little
|
||||
## resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
## @param frontend.resources.limits The resources limits for the container
|
||||
## @param frontend.resources.requests The requested resources for the container
|
||||
##
|
||||
resources:
|
||||
## Example:
|
||||
## limits:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
limits: {}
|
||||
## Examples:
|
||||
## requests:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
requests: {}
|
||||
## Stackspin extra options for liveness probe
|
||||
## WARNING: Stackspin installation process may take up some time and
|
||||
## setting inappropriate values here may lead to pods failure.
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
## @param frontend.livenessProbe.enabled Enable/disable livenessProbe
|
||||
## @param frontend.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated
|
||||
## @param frontend.livenessProbe.periodSeconds How often to perform the probe
|
||||
## @param frontend.livenessProbe.timeoutSeconds When the probe times out
|
||||
## @param frontend.livenessProbe.failureThreshold Minimum consecutive failures for the probe
|
||||
## @param frontend.livenessProbe.successThreshold Minimum consecutive successes for the probe
|
||||
##
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
successThreshold: 1
|
||||
## Stackspin extra options for readiness probe
|
||||
## WARNING: Stackspin installation process may take up some time and
|
||||
## setting inappropriate values here may lead to pods failure.
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
## @param frontend.readinessProbe.enabled Enable/disable readinessProbe
|
||||
## @param frontend.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated
|
||||
## @param frontend.readinessProbe.periodSeconds How often to perform the probe
|
||||
## @param frontend.readinessProbe.timeoutSeconds When the probe times out
|
||||
## @param frontend.readinessProbe.failureThreshold Minimum consecutive failures for the probe
|
||||
## @param frontend.readinessProbe.successThreshold Minimum consecutive successes for the probe
|
||||
##
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
successThreshold: 1
|
||||
## @param frontend.customLivenessProbe Custom liveness probe to execute (when the main one is disabled)
|
||||
##
|
||||
customLivenessProbe: {}
|
||||
## @param frontend.customReadinessProbe Custom readiness probe to execute (when the main one is disabled)
|
||||
##
|
||||
customReadinessProbe: {}
|
||||
## @param frontend.extraEnvVars An array to add extra env vars
|
||||
## For example:
|
||||
## extraEnvVars:
|
||||
## frontend:
|
||||
## - name: ADMIN_PANEL_ELASTICSEARCH_URL
|
||||
## value: test
|
||||
##
|
||||
extraEnvVars: []
|
||||
## @param frontend.extraEnvVarsCM Array to add extra configmaps
|
||||
##
|
||||
extraEnvVarsCM: []
|
||||
## @param frontend.extraEnvVarsSecret Array to add extra environment variables from a secret
|
||||
##
|
||||
extraEnvVarsSecret: ""
|
||||
## @param frontend.extraVolumeMounts Additional volume mounts (used along with `extraVolumes`)
|
||||
## Example: Mount CA file
|
||||
## extraVolumeMounts
|
||||
## - name: ca-cert
|
||||
## subPath: ca_cert
|
||||
## mountPath: /path/to/ca_cert
|
||||
##
|
||||
extraVolumeMounts: []
|
||||
## Admin backend configuration parameters
|
||||
## ref: https://open.greenhost.net/openappstack/dashboard-backend
|
||||
##
|
||||
backend:
|
||||
## Admin frontend image version
|
||||
## ref: https://hub.docker.com/r/bitnami/frontend/tags/
|
||||
## @param image.registry Stackspin image registry
|
||||
## @param image.repository Stackspin image repository
|
||||
## @param image.tag Stackspin image tag
|
||||
## @param image.pullPolicy Stackspin image pull policy
|
||||
## @param image.pullSecrets Stackspin image pull secrets
|
||||
## @param image.debug Specify if debug logs should be enabled
|
||||
##
|
||||
image:
|
||||
registry: open.greenhost.net:4567
|
||||
repository: openappstack/admin-backend/admin-backend
|
||||
tag: 0.1.0
|
||||
## Specify a imagePullPolicy
|
||||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
|
||||
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
|
||||
##
|
||||
pullPolicy: IfNotPresent
|
||||
## Optionally specify an array of imagePullSecrets.
|
||||
## Secrets must be manually created in the namespace.
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||
## e.g:
|
||||
## pullSecrets:
|
||||
## - myRegistryKeySecretName
|
||||
##
|
||||
pullSecrets: []
|
||||
|
||||
## Kubernetes service configuration. For minikube, set this to NodePort, elsewhere use LoadBalancer or ClusterIP
|
||||
##
|
||||
service:
|
||||
## @param service.type Kubernetes Service type
|
||||
##
|
||||
type: ClusterIP
|
||||
## @param service.port Service HTTP port
|
||||
##
|
||||
port: 80
|
||||
## @param service.nodePort Node Ports to expose
|
||||
##
|
||||
nodePort: ""
|
||||
## @param service.loadBalancerIP Use loadBalancerIP to request a specific static IP
|
||||
##
|
||||
loadBalancerIP: ""
|
||||
## @param service.externalTrafficPolicy Enable client source IP preservation
|
||||
## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
|
||||
##
|
||||
externalTrafficPolicy: Cluster
|
||||
## @param service.annotations Service annotations
|
||||
##
|
||||
annotations: {}
|
||||
## @param service.loadBalancerSourceRanges Limits which cidr blocks can connect to service's load balancer
|
||||
## Only valid if service.type: LoadBalancer
|
||||
##
|
||||
loadBalancerSourceRanges: []
|
||||
## @param service.extraPorts Extra ports to expose (normally used with the `sidecar` value)
|
||||
##
|
||||
extraPorts: []
|
||||
## @param service.nodePorts.http Kubernetes http node port
|
||||
## Example:
|
||||
## nodePorts:
|
||||
## http: <to set explicitly, choose port between 30000-32767>
|
||||
##
|
||||
nodePorts:
|
||||
http: ""
|
||||
|
||||
|
||||
## @param backend.reactAppApiUrl URL to the dashboard-backend API
|
||||
apiUrl: "/api/v1"
|
||||
|
||||
## Variables for future use {{{
|
||||
|
||||
## @param backend.username Admin user of the application
|
||||
##
|
||||
username: user
|
||||
## @param backend.password password. WARNING: Minimum length of 10 characters
|
||||
## Defaults to a random 10-character alphanumeric string if not set
|
||||
##
|
||||
password: ""
|
||||
## @param backend.existingSecret Name of an existing secret containing the password (ignores previous password)
|
||||
## The secret should contain the following key:
|
||||
## backend-password
|
||||
##
|
||||
existingSecret: ""
|
||||
## @param backend.email Admin user email of the application
|
||||
##
|
||||
email: user@example.com
|
||||
|
||||
## Admin panel SMTP settings
|
||||
## @param backend.smtp.enabled Enable/disable SMTP
|
||||
## @param backend.smtp.host SMTP host name
|
||||
## @param backend.smtp.port SMTP port number
|
||||
## @param backend.smtp.user SMTP account user name
|
||||
## @param backend.smtp.password SMTP account password
|
||||
## @param backend.smtp.protocol SMTP protocol (Allowed values: tls, ssl)
|
||||
## @param backend.smtp.auth SMTP authentication method
|
||||
## @param backend.smtp.existingSecret Name of an existing Kubernetes secret. The secret must have the following key configured: `smtp-password`
|
||||
##
|
||||
smtp:
|
||||
enabled: false
|
||||
host: ""
|
||||
port: ""
|
||||
user: ""
|
||||
password: ""
|
||||
protocol: ""
|
||||
auth: ""
|
||||
existingSecret: ""
|
||||
|
||||
## End variables for future use }}}
|
||||
|
||||
## @param backend.flaskEnv Overridable flask env for debugging
|
||||
flaskEnv: production
|
||||
|
||||
## @param backend.secretKey Flask secret for generating JWT tokens
|
||||
# secretKey: OVERRIDE_ME
|
||||
|
||||
## @param backend.command Custom command to override image cmd
|
||||
##
|
||||
command: []
|
||||
## @param backend.args Custom args for the custom command
|
||||
##
|
||||
args: []
|
||||
## @param backend.containerSecurityContext Container security context specification
|
||||
## Example:
|
||||
## capabilities:
|
||||
## drop:
|
||||
## - ALL
|
||||
## readOnlyRootFilesystem: true
|
||||
## runAsNonRoot: true
|
||||
## runAsUser: 1000
|
||||
##
|
||||
containerSecurityContext: {}
|
||||
## Stackspin container's resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
## We usually recommend not to specify default resources and to leave this as a conscious
|
||||
## choice for the user. This also increases chances charts run on environments with little
|
||||
## resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
## @param backend.resources.limits The resources limits for the container
|
||||
## @param backend.resources.requests The requested resources for the container
|
||||
##
|
||||
resources:
|
||||
## Example:
|
||||
## limits:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
limits: {}
|
||||
## Examples:
|
||||
## requests:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
requests: {}
|
||||
## Stackspin extra options for liveness probe
|
||||
## WARNING: Stackspin installation process may take up some time and
|
||||
## setting inappropriate values here may lead to pods failure.
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
## @param backend.livenessProbe.enabled Enable/disable livenessProbe
|
||||
## @param backend.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated
|
||||
## @param backend.livenessProbe.periodSeconds How often to perform the probe
|
||||
## @param backend.livenessProbe.timeoutSeconds When the probe times out
|
||||
## @param backend.livenessProbe.failureThreshold Minimum consecutive failures for the probe
|
||||
## @param backend.livenessProbe.successThreshold Minimum consecutive successes for the probe
|
||||
##
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
successThreshold: 1
|
||||
## Stackspin extra options for readiness probe
|
||||
## WARNING: Stackspin installation process may take up some time and
|
||||
## setting inappropriate values here may lead to pods failure.
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
## @param backend.readinessProbe.enabled Enable/disable readinessProbe
|
||||
## @param backend.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated
|
||||
## @param backend.readinessProbe.periodSeconds How often to perform the probe
|
||||
## @param backend.readinessProbe.timeoutSeconds When the probe times out
|
||||
## @param backend.readinessProbe.failureThreshold Minimum consecutive failures for the probe
|
||||
## @param backend.readinessProbe.successThreshold Minimum consecutive successes for the probe
|
||||
##
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 6
|
||||
successThreshold: 1
|
||||
## @param backend.customLivenessProbe Custom liveness probe to execute (when the main one is disabled)
|
||||
##
|
||||
customLivenessProbe: {}
|
||||
## @param backend.customReadinessProbe Custom readiness probe to execute (when the main one is disabled)
|
||||
##
|
||||
customReadinessProbe: {}
|
||||
## @param backend.extraEnvVars An array to add extra env vars
|
||||
## For example:
|
||||
## extraEnvVars:
|
||||
## backend:
|
||||
## - name: ADMIN_PANEL_ELASTICSEARCH_URL
|
||||
## value: test
|
||||
##
|
||||
extraEnvVars: []
|
||||
## @param backend.extraEnvVarsCM Array to add extra configmaps
|
||||
##
|
||||
extraEnvVarsCM: []
|
||||
## @param backend.extraEnvVarsSecret Array to add extra environment variables from a secret
|
||||
##
|
||||
extraEnvVarsSecret: ""
|
||||
## @param backend.extraVolumeMounts Additional volume mounts (used along with `extraVolumes`)
|
||||
## Example: Mount CA file
|
||||
## extraVolumeMounts
|
||||
## - name: ca-cert
|
||||
## subPath: ca_cert
|
||||
## mountPath: /path/to/ca_cert
|
||||
##
|
||||
extraVolumeMounts: []
|
||||
|
||||
## @param replicaCount Number of Stackspin & Sidekiq replicas
|
||||
## (Note that you will need ReadWriteMany PVCs for this to work properly)
|
||||
##
|
||||
replicaCount: 1
|
||||
## @param extraVolumes Array of extra volumes to be added deployment. Requires setting `extraVolumeMounts`
|
||||
## Example: Add secret volume
|
||||
## extraVolumes:
|
||||
## - name: ca-cert
|
||||
## secret:
|
||||
## secretName: ca-cert
|
||||
## items:
|
||||
## - key: ca-cert
|
||||
## path: ca_cert
|
||||
##
|
||||
extraVolumes: []
|
||||
## @param sidecars Attach additional sidecar containers to the pod
|
||||
## Example:
|
||||
## sidecars:
|
||||
## - name: your-image-name
|
||||
## image: your-image
|
||||
## imagePullPolicy: Always
|
||||
## ports:
|
||||
## - name: portname
|
||||
## containerPort: 1234
|
||||
##
|
||||
sidecars: []
|
||||
## @param initContainers Additional init containers to add to the pods
|
||||
##
|
||||
## e.g.
|
||||
## initContainers:
|
||||
## - name: your-image-name
|
||||
## image: your-image
|
||||
## imagePullPolicy: Always
|
||||
## ports:
|
||||
## - name: portname
|
||||
## containerPort: 1234
|
||||
##
|
||||
initContainers: []
|
||||
## @param serviceAccount.create Whether the service account should be created
|
||||
## @param serviceAccount.annotations Annotations to add to the service account
|
||||
## @param serviceAccount.name Name to be used for the service account
|
||||
##
|
||||
serviceAccount:
|
||||
create: false
|
||||
annotations: {}
|
||||
## If not set and create is true, a name is generated using the fullname template
|
||||
##
|
||||
name: ""
|
||||
## @param podSecurityContext Pod security context specification
|
||||
## Example:
|
||||
## fsGroup: 2000
|
||||
##
|
||||
##
|
||||
podSecurityContext: {}
|
||||
## @param hostAliases Add deployment host aliases
|
||||
## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
|
||||
##
|
||||
hostAliases: []
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
## @param persistence.enabled Whether to enable persistence based on Persistent Volume Claims
|
||||
##
|
||||
enabled: false
|
||||
## @param persistence.storageClass dashboard & sidekiq data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
storageClass: ""
|
||||
## @param persistence.existingClaim Use a existing PVC which must be created manually before bound
|
||||
##
|
||||
existingClaim: ""
|
||||
## @param persistence.accessMode PVC Access Mode (RWO, ROX, RWX)
|
||||
##
|
||||
accessMode: ReadWriteOnce
|
||||
## @param persistence.size Size of the PVC to request
|
||||
##
|
||||
size: 10Gi
|
||||
## @param persistence.selector Selector to match an existing Persistent Volume (this value is evaluated as a template)
|
||||
## selector:
|
||||
## matchLabels:
|
||||
## app: my-app
|
||||
selector: {}
|
||||
## @param updateStrategy.type Update strategy type. Only really applicable for deployments with RWO PVs attached
|
||||
## If replicas = 1, an update can get "stuck", as the previous pod remains attached to the
|
||||
## PV, and the "incoming" pod can never start. Changing the strategy to "Recreate" will
|
||||
## terminate the single previous pod, so that the new, incoming pod can attach to the PV
|
||||
## Example:
|
||||
## updateStrategy:
|
||||
## type: RollingUpdate
|
||||
## rollingUpdate:
|
||||
## maxSurge: 25%
|
||||
## maxUnavailable: 25%
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
## @param podAnnotations Additional pod annotations
|
||||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
|
||||
##
|
||||
podAnnotations: {}
|
||||
## @param podLabels Additional pod labels
|
||||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
|
||||
##
|
||||
podLabels: {}
|
||||
## @param podAffinityPreset Pod affinity preset. Allowed values: soft, hard
|
||||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
|
||||
##
|
||||
podAffinityPreset: ""
|
||||
## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
|
||||
## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
|
||||
##
|
||||
podAntiAffinityPreset: soft
|
||||
## Node affinity preset
|
||||
## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
|
||||
## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
|
||||
## @param nodeAffinityPreset.key Node label key to match Ignored if `affinity` is set.
|
||||
## @param nodeAffinityPreset.values Node label values to match. Ignored if `affinity` is set.
|
||||
##
|
||||
nodeAffinityPreset:
|
||||
type: ""
|
||||
## E.g.
|
||||
## key: "kubernetes.io/e2e-az-name"
|
||||
##
|
||||
key: ""
|
||||
## E.g.
|
||||
## values:
|
||||
## - e2e-az1
|
||||
## - e2e-az2
|
||||
##
|
||||
values: []
|
||||
## @param affinity Affinity for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
## Note: podAffinityPreset, podAntiAffinityPreset, and nodeAffinityPreset will be ignored when it's set
|
||||
##
|
||||
affinity: {}
|
||||
## @param nodeSelector Node labels for pod assignment.
|
||||
## Ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
##
|
||||
nodeSelector: {}
|
||||
## @param tolerations Tolerations for pod assignment.
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
|
||||
|
||||
## @section Volume Permissions parameters (currently disabled because there is
|
||||
## no persistence in the app)
|
||||
|
||||
## Init containers parameters:
|
||||
## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup
|
||||
## values from the securityContext section.
|
||||
##
|
||||
volumePermissions:
|
||||
## @param volumePermissions.enabled Enable init container that changes volume permissions in the data directory (for cases where the default k8s `runAsUser` and `fsUser` values do not work)
|
||||
##
|
||||
enabled: false
|
||||
## Init containers' resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
## We usually recommend not to specify default resources and to leave this as a conscious
|
||||
## choice for the user. This also increases chances charts run on environments with little
|
||||
## resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
## @param volumePermissions.resources.limits The resources limits for the init container
|
||||
## @param volumePermissions.resources.requests The requested resources for the init container
|
||||
##
|
||||
resources:
|
||||
## Example:
|
||||
## limits:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
limits: {}
|
||||
## Examples:
|
||||
## requests:
|
||||
## cpu: 100m
|
||||
## memory: 128Mi
|
||||
requests: {}
|
||||
|
||||
## @section Ingress parameters
|
||||
|
||||
## Ingress parameters
|
||||
##
|
||||
ingress:
|
||||
## @param ingress.enabled Enable ingress controller resource
|
||||
##
|
||||
enabled: false
|
||||
## @param ingress.certManager Add annotations for cert-manager
|
||||
##
|
||||
certManager: false
|
||||
## @param ingress.hostname Default host for the ingress resource
|
||||
##
|
||||
hostname: dashboard.local
|
||||
## @param ingress.apiVersion Force Ingress API version (automatically detected if not set)
|
||||
##
|
||||
apiVersion: ""
|
||||
## @param ingress.path Ingress path
|
||||
##
|
||||
path: /
|
||||
## @param ingress.pathType Ingress path type
|
||||
##
|
||||
pathType: ImplementationSpecific
|
||||
## @param ingress.annotations Ingress annotations done as key:value pairs
|
||||
## For a full list of possible ingress annotations, please see
|
||||
## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md
|
||||
##
|
||||
## If certManager is set to true, annotation kubernetes.io/tls-acme: "true" will automatically be set
|
||||
##
|
||||
annotations: {}
|
||||
## @param ingress.tls Enable TLS configuration for the hostname defined at ingress.hostname parameter
|
||||
## TLS certificates will be retrieved from a TLS secret with name: {{- printf "%s-tls" .Values.ingress.hostname }}
|
||||
## You can use the ingress.secrets parameter to create this TLS secret or relay on cert-manager to create it
|
||||
##
|
||||
tls: false
|
||||
## @param ingress.extraHosts The list of additional hostnames to be covered with this ingress record.
|
||||
## Most likely the hostname above will be enough, but in the event more hosts are needed, this is an array
|
||||
## extraHosts:
|
||||
## - name: dashboard.local
|
||||
## path: /
|
||||
extraHosts: []
|
||||
## @param ingress.extraTls The tls configuration for additional hostnames to be covered with this ingress record.
|
||||
## see: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
|
||||
## extraTls:
|
||||
## - hosts:
|
||||
## - dashboard.local
|
||||
## secretName: dashboard.local-tls
|
||||
extraTls: []
|
||||
## @param ingress.secrets If you're providing your own certificates, please use this to add the certificates as secrets
|
||||
## key and certificate should start with -----BEGIN CERTIFICATE----- or
|
||||
## -----BEGIN RSA PRIVATE KEY-----
|
||||
##
|
||||
## name should line up with a tlsSecret set further up
|
||||
## If you're using cert-manager, this is unneeded, as it will create the secret for you if it is not set
|
||||
##
|
||||
## It is also possible to create and manage the certificates outside of this helm chart
|
||||
## Please see README.md for more information
|
||||
## Example:
|
||||
## - name: dashboard.local-tls
|
||||
## key:
|
||||
## certificate:
|
||||
secrets: []
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "open-app-stack",
|
||||
"version": "0.1.0",
|
||||
"name": "stackspin-dashboard",
|
||||
"version": "0.1.1",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@craco/craco": "^6.2.0",
|
||||
|
|
Loading…
Reference in a new issue